import java.util.HashMap;import java.util.Map;public class Main { public static int countDuplicates(int[] arr) { Map<Integer, Integer> countMap = new HashMap<>(); int duplicates = 0; // 统计每个元素出现的次数 for (int i = 0; i < arr.length; i++) { int key = arr[i]; int count = countMap.getOrDefault(key, 0); countMap.put(key, count + 1); } // 统计重复元素的个数 for (int count : countMap.values()) { if (count > 1) { duplicates++; } } return duplicates; } public static void main(String[] args) { int[] arr = {1, 2, 3, 2, 4, 3, 5, 4, 6}; int duplicates = countDuplicates(arr); System.out.println(duplicates); // 输出:3 }}
时间: 2023-04-05 12:00:24 浏览: 138
这是一个关于 Java 编程的问题,主要是统计数组中重复元素的个数。根据给出的代码,使用 HashMap 统计每个元素出现的次数,然后再遍历 HashMap 统计重复元素的个数。最后输出重复元素的个数。对于给出的数组,输出结果为 3。
相关问题
import java.util.*; class Answer { public String rankGroup(String[] args){ int len = args[0].length(); int[][] arr = new int[26][len]; char[][] ch = new char[args.length][len]; for (int i=0; i < ch.length; i++){ ch[i] = args[i].toCharArray(); } for (int j = 0; j<len; j++){ for (int i = 0; i < ch.length; i++){ char c = ch[i][j]; arr[c - 'A'][j] += 1; } } Map<int[], Character> map = new HashMap(); int[] nullArr = new int[len]; for (int i=0; i<arr.length; i++){ if (!Arrays.equals(arr[i], nullArr)){ map.put(arr[i], (char) (i + 65)); } } Arrays.sort(arr, new Comparator<int[]>() { @Override public int compare(int[] a, int[] b) { int len = a.length; int index = 0; while (index < len - 1){ if (a[index] == b[index]){ index += 1; }else { break; } } return b[index] - a[index]; } }); String res = ""; for (int i = 0; i < arr.length; i++){ if (map.get(arr[i]) !=null){ res += map.get(arr[i]); } } return res; } }
这段代码是Java语言编写的,实现了一个名为 `Answer` 的类,其中包含一个方法 `rankGroup`,该方法接收一个字符串数组 `args` 作为参数,返回一个字符串类型的结果。
具体实现的功能是:将字符串数组中的每个字符串按照每个字符在每个字符串中出现的次数进行统计,并按照出现次数的大小进行排名,将排名第一的字符作为结果返回。
具体实现过程如下:
- 首先获取字符串数组中第一个字符串的长度,然后创建一个二维数组 `arr`,用于存储每个字符在每个字符串中出现的次数。同时,创建一个字符类型的二维数组 `ch`,用于存储字符串数组中的每个字符串。
- 遍历字符类型二维数组 `ch`,将每个字符串转化为字符数组,存储到 `ch` 中。
- 遍历二维数组 `arr`,统计每个字符在每个字符串中出现的次数,存储到 `arr` 中。
- 创建一个 `Map` 对象 `map`,用于存储每个字符在二维数组 `arr` 中对应的出现次数。同时,创建一个长度为 `len` 的整型数组 `nullArr`,用于判断某个字符在所有字符串中是否出现。
- 遍历二维数组 `arr`,将出现次数不为零的字符和它在二维数组 `arr` 中对应的出现次数存储到 `map` 中。
- 使用 `Arrays.sort` 方法对二维数组 `arr` 进行排序,排序方式为按照每个字符在所有字符串中出现的次数从大到小进行排序。
- 遍历排序后的二维数组 `arr`,从 `map` 中获取对应的字符,将这些字符按照顺序拼接成一个字符串,并返回该字符串作为方法 `rankGroup` 的结果。
需要注意的是,该方法中使用了一些 Java 中的内置类和方法,如 `Arrays` 类、`Map` 接口、`Comparator` 接口等。
public class Main { public static void main(String[] args) { System.out.println("此题定义了一个数组,数组添加了若干个元素,每个元素可以理解一个运单,每张运单有三个元素,分别是运单号,货主和发票金额,现在要对这批运单进行分组合并开票,分组规则是同一货主才能被分到一组,一张票包含的最大运单数为2 。分好组后对每组运单的开票金额进行累加即为发票的开票金额 。 请写一段代码,在右边控制台打印出每张票的货主和开票金额,比如上海运钢/170 上海运钢/82 江苏运钢/170 江苏运钢/90 "); java.util.ArrayList<String> al = new java.util.ArrayList<>(); al.add("运单1/90"); al.add("运单号1/上海运钢/90"); al.add("运单号2/江苏运钢/90"); al.add("运单号3/上海运钢/80"); al.add("运单号4/上海运钢/82"); al.add("运单号5/江苏运钢/80"); al.add("运单号6/江苏运钢/80"); } }
public static void printGroup(ArrayList<String> al) {
HashMap<String, Integer> map = new HashMap<>();
for (String s : al) {
String[] arr = s.split("/");
String key = arr[1];
int value = Integer.parseInt(arr[2]);
if (map.containsKey(key)) {
map.put(key, map.get(key) + value);
} else {
map.put(key, value);
}
}
for (String key : map.keySet()) {
System.out.println(key + "/" + map.get(key));
}
}
阅读全文