ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
>[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); } } } ~~~