给定一个数组A[n], 定义数组的众数 ( Majority Element) 为数组中出现次数超过 n/2 次的元素, 假设数组A[n]非空且一定存在众数, 请设计算法找到该众数并输出.
给定一个数组A[n], 定义数组的众数 ( Majority Element) 为数组中出现次数超过 n/2 次的元素, 假设数组A[n]非空且一定存在众数, 请设计算法找到该众数并输出.
一个非空且一定存在众数的整数数组,如: [1,2,2]
输出打印该众数,如: 2
[1,2,2]
2
[3,1,-2,3,1,3,3]
3
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { // get input data Scanner input = new Scanner(System.in); String[] str = input.nextLine().replace("[", "").replace("]", "").split(","); int[] arr = new int[str.length]; for (int i = 0; i < arr.length; i++) { arr[i] = Integer.parseInt(str[i]); } Arrays.sort(arr); int flag = arr[0]; int len = 0; for (int i = 0; i <= arr.length; i++) { if (len > (arr.length / 2)) { System.out.println(flag); break; } else { if (arr[i] == flag) { len++; } else { flag = arr[i]; len = 1; } } } } }
牛客的字符统计题太多了,已经数不清,一律用map作统计
把中括号去掉,再按逗号分隔成为数组
import java.util.*; public class Main { public static void main(String [] args) { Scanner sc=new Scanner(System.in); while(sc.hasNext()) { String str=sc.next(); String a=str.replace("[",""); String b=a.replace("]",""); String [] array=b.split(","); HashMap<String,Integer> map=new HashMap<>(); for(int i=0;i<array.length;i++) { String s=array[i]; if(map.containsKey(s)) { int value=map.get(s); value+=1; map.put(s,value); } else { map.put(s,1); } } Set<String> set=map.keySet(); String result=null; for(String key:set) { int value=map.get(key); if(value>array.length/2) { result=key; } } System.out.println(result); } } }
public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String[] strings = in.nextLine().replace("[","").replace("]","").split(","); int[] a = new int[strings.length]; for (int i=0;i<a.length;i++) a[i] = Integer.parseInt(strings[i]); int count = 1; int data = a[0]; for (int i=1;i<a.length;i++){ if (count == 0) { data = a[i];count++; }else { if (a[i] == data) count++; else count--; } } System.out.println(data); } }
时间复杂度为O(n),我们可以考虑在遍历数组的时候保存两个值,一个是数组中的一个数字,另一个是次数,
当我们遍历到下一个数字的时候如果下一个数字和我们之前保存的数字相同则次数加1,如果次数为零那么我们需要保