>[success] # 统计数组中元素出现次数
![](https://img.kancloud.cn/71/b6/71b6b59ac38ff5a332fec884de9c72c1_530x200.png)
1. 解决思路使用**Map 结构**统计每个数字出现的次数
* 图
![](https://img.kancloud.cn/c4/d1/c4d142c214cb26dfed69cf081e354f62_208x362.png)
2. 解决思路如果已知元素所存在的范围足够小可以使用**数组**来作为统计
* 图 角标对元素,数组存储是个数(及元素为索引,次数为value)
![](https://img.kancloud.cn/60/63/6063205a955e9767105892abf2a7e9ee_778x163.png)
>[danger] ##### js 实现
~~~
const arr = [3, 2, 2, 5, 6]
// 使用map
function mapCount(arr) {
return arr.reduce((acc, cur) => {
if (!acc[cur]) {
acc[cur] = 0
}
++acc[cur]
return acc
}, {})
}
// 使用数组
function arrCount(arr) {
return arr.reduce((acc, cur) => {
const index = cur - 1
if (!acc[index]) {
acc[index] = 0
}
++acc[index]
return acc
}, [])
}
console.log(mapCount(arr)) // { '2': 2, '3': 1, '5': 1, '6': 1 }
console.log(arrCount(arr)) // [ <1 empty item>, 2, 1, <1 empty item>, 1, 1 ]
~~~
>[danger] ##### java
~~~ java
import java.sql.Array;
import java.util.HashMap;
import java.util.Map;
public class ArrayCount {
// 使用map 计数
public static Map<Integer,Integer> countArrMap(int[] arr){
// 创建一个Map 对象
Map<Integer,Integer> countMap = new HashMap<>();
for(int num:arr){
if(!countMap.containsKey(num)) {
countMap.put(num,0);
}
int count = countMap.get(num);
// compute 对 hashMap 中指定 key 的值进行重新计算
countMap.compute(num,(key,value)-> value+1);
}
return countMap;
}
// 使用数组计数
public static int[] countArrArr(int[] arr){
// 已知最大数为 6 创建数组长度为6
int[] countArr = new int[6];
for(int num:arr){
// 数组角标从0开始因此-1
int index = num - 1;
++ countArr[index];
}
return countArr;
}
public static void main(String args[]){
int[] ls = {3, 2, 2, 5, 6};
Map<Integer,Integer> mapCount = ArrayCount.countArrMap(ls);
int[] arrCount = ArrayCount.countArrArr(ls);
System.out.println(mapCount);
int idx = 0;
for(int item:arrCount){
System.out.print("key:" + ++idx +"-"+"val:"+item);
}
}
}
~~~
- 刷题准备
- 统计数组中元素出现次数
- Leetcode -- 442数组中重复的数据
- leetcode -- 448 找到所有数组中消失的数字
- 字符类似题
- Leetcode -- 1002 查找共用字符
- Leetcode -- 1370上升下降字符串
- 指针类题解
- Leetcode -- 283 移动零
- Leetcode -- 26. 删除有序数组中的重复项
- Leetcode -- 80. 删除有序数组中的重复项 II
- Leetcode -- 27. 移除元素
- Leetcode -- 344. 反转字符串
- Leetcode -- 125 验证回文串
- Leetcode -- 11 盛最多水的容器
- Leetcode -- 1480. 一维数组的动态和