Skip to content

Commit d8ec0f6

Browse files
committed
3.4.8 and 3.4.9 一些拙见
1 parent 8ebb297 commit d8ec0f6

2 files changed

+59
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#### **题目**:找出数组中出现次数超过一半的数,现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数。
2+
3+
#### **出题人**:阿里巴巴新零售技术质量部
4+
5+
#### **参考答案**
6+
7+
遍历数组的同时用Object来储存每个元素出现的个数,每次遍历都跟max比较
8+
9+
#### **参考代码**
10+
```
11+
const arr =[1,2,3,4,5,6,7,8,89,9,9,9,9,99];
12+
13+
const maxNumObj =(arr)=>{
14+
return arr.reduce((obj,cur)=>{
15+
if(!obj['max']){
16+
obj['max']=arr[0];
17+
}
18+
obj[cur] = ++obj[cur]||1;
19+
if(obj[cur]>obj['max']){
20+
obj['max'] = obj[cur]
21+
}
22+
return obj;
23+
},{})['max'];
24+
}
25+
```
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#### **题目**: 找出被修改过的数字
2+
3+
#### **出题人**:阿里巴巴新零售技术质量部
4+
5+
#### **参考答案**
6+
7+
emmm假设背景是寻找数组中被修改的数字或者元素,我使用代理的方式来监听数组中元素的变化,并将变化的最后数值和次数储存在额外空间中
8+
9+
#### **参考代码**
10+
11+
```
12+
const arr =[1,2,3,4,5,6,7,8,89,9,9,9,9,99];
13+
14+
const saveModifyNum={
15+
16+
}
17+
const watchNumChangeProxy=new Proxy(arr,{
18+
set:function(target,key,value){
19+
let {count} = Reflect.get(saveModifyNum,target[key])||{count:0,value};
20+
++count;
21+
return Reflect.set(saveModifyNum,target[key],{
22+
count,
23+
value
24+
});
25+
}
26+
})
27+
watchNumChangeProxy[0]=2;
28+
watchNumChangeProxy[0]=3;
29+
watchNumChangeProxy[0]=4;
30+
//{ '1': { count: 3, value: 4 } }
31+
```
32+
33+
34+

0 commit comments

Comments
 (0)