-
2021-02-28 12:36:37
Map map=new HashMap()
定义了一个集合,里面是多个 键 和 键对应的值。
可以简单想象成两个具有联系的数组:
一个数组存数(键)
一个数组存该数出现的次数(值)
参考代码:package Main;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class _1184 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int [] src=new int[n];
Map map=new HashMap();
for(int i=0;i
src[i]=sc.nextInt();
}
int value=0;
int max=0,t = 0;
for(int i=0;i
if(map.containsKey(src[i])){//函数 containsKey 是判断集合内是否有这个键
value=map.get(src[i]);//取这个键的值
value++;
map.put(src[i], value);//更新这个键的数据
if(value>max){
t=src[i];
max=value;
}
}
else{
map.put(src[i], 1);
}
}
System.out.println(t+"\n"+max);
}
}
更多相关内容 -
分治法-求解众数问题Java
2021-09-22 16:16:571.众数问题: 给定含有N个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数,多重集合S中重数最大的元素称为多重集合S的众数,众数的重数称为多重集合S的重数,试求一个给定多重结合的重数和众数。 例如...1.众数问题:
给定含有N个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数,多重集合S中重数最大的元素称为多重集合S的众数,众数的重数称为多重集合S的重数,试求一个给定多重结合的重数和众数。
例如:S={a,b,b,b,f,f,4,5}的重数是3,众数是b
2.算法思路:
- 首先为集合S排序,使之成为有序的数组(使用Arrays类的sort方法)
- 取中位数为众数,中位数的个数为重数,确定左右界
- 向左界递归,取中位数为众数,取中位数个数为重数,比较
- 向右界递归,取中位数为众数,取中位数个数为重数,比较
3.问题:
翻阅网上的代码,多是使用c++实现,而c++代码中有引用参数传递的过程,在程序运行中可以直接引用函数传参,但Java中没有提供。在阅读(7条消息) 分治法-众数问题java实现_cook_1996的博客-CSDN博客 这篇博客后,发现了IntHolder这个类。
IntHolder持有者类型:因为java中只存在值传递,同时包装类一旦创建其数值是不能改变的。所有不可能实现一个方法改变一个数据类型的值。如果想编写一个修改数据值参数的方法,就需要使用在 org.omg.CORBA 包中定义的持有者(holder)类型,包括IntHolder、BooleanHolder等。每个持有者类型都包含一个共有域值,通过它可以访问储存在其中的值。
4.代码:
import jdk.nashorn.internal.runtime.regexp.joni.encoding.IntHolder; import java.lang.reflect.Array; import java.util.Arrays; import java.util.Scanner; public class Mode { public static void getMaxCnt(int a[], int n, IntHolder num, IntHolder maxCnt){ int l =0, r = 0; int s; int mid = n / 2; for( l = 0;l < mid;l ++){ if(a[l] == a[mid]) break; } for(r = mid + 1;r < n;r ++){ if(a[r] != a[mid]) break; } s = r - l; if(s > maxCnt.value){ num.value = a[mid]; maxCnt.value = s; } if(s == maxCnt.value){ if(num.value > a[mid]){ num.value = a[mid]; maxCnt.value = s; } } if(l + 1 > maxCnt.value){ getMaxCnt(a,l+1,num,maxCnt); } if(n - r > maxCnt.value){ int [] b = new int[n-r]; for(int i = 0;i < n-r;i ++){ b[i] = a[r + i]; } getMaxCnt(b,n-r,num,maxCnt); } } public static void main(String[] args) { int i,n; IntHolder num = new IntHolder(); IntHolder maxCnt = new IntHolder(); System.out.println("请输入数组个数:"); Scanner scanner = new Scanner(System.in); n = scanner.nextInt(); int []a = new int[n]; System.out.println("请输入一个数组:"); for(i = 0;i < n;i ++){ a[i] = scanner.nextInt(); } Arrays.sort(a); getMaxCnt(a,n,num,maxCnt); System.out.println("众数:" + num.value + " 重数:" + maxCnt.value); } }
-
分治算法---众数问题java
2022-03-29 20:01:03众数问题 问题描述: 给定含有n个元素的多重集合s,每个元素在S中出现的次数称为该元素的重数。多重集S中重数最大的元素称为众数。例如, S-(1, 2, 2, 2, 3, 3, 5).多重集S的众数是2,其重数为3,对于给定的由n个自然数...众数问题
问题描述:
给定含有n个元素的多重集合s,每个元素在S中出现的次数称为该元素的重数。多重集S中重数最大的元素称为众数。例如, S-(1, 2, 2, 2, 3, 3, 5).多重集S的众数是2,其重数为3,对于给定的由n个自然数组成的多重集s,计算S的众数及其重数。如果出现多个众数,请输出最小的那个。
输入数据的第1行是多重集S中元素个数n (n<1 300000) ;接下来的n行中,每行有一个最多含有5位数字的自然数。输出数据的第1行给出众数,第2行是重数。
样例为:
Sample input
6
1
2
2
2
3
5
Sample output
2
3
算法思想:取中位数的个数为重数,中位数为众数,确定左界、右界。
在往左界递归取中位数为众数,个数为重数,比较
往右界递归取中位数为众数,个数为重数,比较
注意!!!
如果中位数的个数大于左界个数,那左边一定没有该组数据的众数;反之,右边一样。
该程序要求数据有序(从小到大),本程序未写排序算法。
————————————————import java.io.*; public class que { public static int chong = 0, zhong = 0; public static void main(String[] args) { FileReader fr = null; BufferedReader br = null; FileReader fr2 = null; BufferedReader br2 = null; FileWriter fw = null; BufferedWriter bw = null; try { fr = new FileReader("src//1.txt"); br = new BufferedReader(fr); fw = new FileWriter("src//2.txt"); bw = new BufferedWriter(fw); } catch (IOException e) { System.out.println("error1"); } int i = 0, count = 0; String s; try {// 计算有多少个数 while ((s = br.readLine()) != null) { count++; } br.close(); } catch (Exception e) { System.out.println("error2"); } int[] arr = new int[count]; try//读取n个数 { fr2 = new FileReader("src//1.txt"); br2 = new BufferedReader(fr2); while ((s = br2.readLine()) != null) { arr[i] = Integer.parseInt(s); i++; } } catch (Exception e) { e.printStackTrace(); } sort(arr); zhongshu(arr, 0, arr.length - 1); try { bw.write(zhong + ""); bw.newLine(); bw.write(chong + ""); bw.close(); } catch (IOException e) { e.printStackTrace(); } } public static void zhongshu(int arr[], int l, int r) { int m, c1 = 0, c2 = 0, i, j, val; m = (r + l) / 2; i = m; j = m; val = arr[m]; while (i >= l && arr[i] == val) { i--; c1++; } while (j <= r && arr[j] == val) { j++; c2++; } if (chong < j - i - 1) { chong = j - i - 1; zhong = val; } if (i - l + 1 > chong) zhongshu(arr, l, i); if (r - j + 1 > chong) zhongshu(arr, j, r); } public static void sort(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { int min = i; // 遍历的区间最小的值 for (int j = i + 1; j < arr.length; j++) { if (arr[j] < arr[min]) { // 找到当前遍历区间最小的值的索引 min = j; } } if (min != i) { // 发生了调换 int temp = arr[min]; arr[min] = arr[i]; arr[i] = temp; } } } }
-
众数问题-java
2022-02-08 10:32:35众数问题-java题目描述:
问题描述:
给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重集S中重数最大的元素称为众数。
例如,S={1,2,2,2,3,5}。多重集S的众数是2,其重数为3。
编程任务:
对于给定的由n 个自然数组成的多重集S,编程计算S 的众数及其重数。输入:
第1行多重集S中元素个数n(n<=50000);接下来的n 行中,每行有一个自然数。输出:
输出文件有2 行,第1 行给出众数,第2 行是重数。(如果有多个众数,只输出最小的)样例输入:
6
1
2
2
2
3
5样例输出:
2
3全部代码:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int []s = new int[n]; int []k = new int[50000]; for(int i=0; i<n; i++) { s[i]=sc.nextInt(); } for(int i=0; i<k.length; i++) { k[i]=0; } for(int i=0; i<n; i++) { for(int j=0; j<k.length; j++) { if(s[i]==j) { k[j]++; } } } int temp=0,x=0; for(int i=0; i<k.length; i++) { if(k[i]>temp) { temp=k[i]; x=i; } } System.out.println(x); System.out.println(temp); } }
-
分治法-求众数问题-Java实现
2019-09-19 20:52:26没有解决的问题是,如果有重复众数,怎么输出不同的众数的问题,干脆就设定不准出现重复的众数了 分析有时间再写 源代码:源码 -
算法课程设计—众数寻找问题
2012-11-23 23:43:05算法课程设计——众数寻找问题(java,包含原代码) -
15行Java代码搞定经典算法题——求众数
2021-03-16 02:00:3815行Java代码搞定经典算法题——求众数15行Java代码搞定经典算法题——求众数问题描述问题有一个长度为n的数列,已知有一个数字出现的次数大于n/2,找出这个数字。输入输出描述例:输入一个数组(假设:{1,3,2,2,2,4,... -
众数问题(Java语言)
2021-10-15 15:39:53import java.util.Scanner; public class Mode2 { public static int n1 ; //众数 public static int n2 ; //重数 public static int count(int [] arr, int left, int right){ //找到等于中间值元素的元素个数 ... -
分治法-众数问题java实现
2018-09-15 09:42:21来填坑了,众数问题的分治法java实现。 首先说一下其他的思路 1.暴力法:选取其中的每个数遍历,得到每个数的重复次数,进行比较,O(n2) 2.先进行排序,O(nlgn),再去找,O(n) 3.使用额外空间(数组或者是哈希... -
Java求众数
2021-11-04 14:20:45用Java来求一个数组的众数,可使用HashMap、栈等数据结构完成。 -
求众数问题
2014-03-21 16:19:19给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重集S中重数最大的元素称为众数。例如,S={1,2,2,2,3,5}。多重集S的众数是2,其重数为3。 -
java求众数
2013-04-27 13:53:47java从文件中读取数据通过两种方法求众数和重数并将结果写入文件中 -
算法设计与分析: 2-2 众数问题
2018-07-07 15:48:272-2 众数问题 问题描述 给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重集S中重数最大的元素称为众数。例如,S={1,2,2,2,3,5}。多重集S的众数是2,其重数为3。对于给定的n个自然数... -
算法设计与分析 实验一 A - 众数问题
2021-11-23 19:37:34A - 众数问题 Description 给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重集S中重数最大的元素称为众数。例如,S={1,2,2,2,3,5}。多重集S的众数是2,其重数为3。对于给定的由n 个... -
求众数(Java实现)
2019-05-06 14:57:00给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于⌊ n/2 ⌋的元素。 你可以假设数组是非空的,并且给定的数组总是存在众数。 示例1: 输入: [3,2,3] 输出: 3 示例2: 输入: [2,2,1,1,1,2... -
算法实现题 2-2 众数问题
2021-04-02 12:11:37´问题描述: 给定含有 n 个元素的多重集合 S,每个元素在 S 中出现的次数称为该元素的重数。多重 集 S 中重数最大的元素称为众数。 例如,S={1,2,2,2,3,5}。 多重集 S 的众数是 2,其重数为 3。 ´编程任务: ... -
众数问题 code
2014-05-10 14:38:57多重集S 中重数最大的元素成为众数。例如,S={1,2,2,2,3,5}。多 重集S 的众数是2,其重数为3。 算法设计:对于给定的由n 个自然数组成的多重集S,计算S 的众数及其重数。">:给定含有n 个元素的多重集合S,每个元素... -
求众数(Java)
2019-03-17 15:21:09题目描述 给定一个大小为n的数组,找到多数元素。大多数元素的元素⌊n / 2⌋多次出现。 您可以假设数组是非空的,并且大多数元素始终存在于数组中。 解决 使用hashmap public int majorityElement1(int[] nums) { ... -
Java编程实现数组中的众数
2021-04-24 12:25:01Java编程实现数组中的众数1.首先创建数据模型/*** @Author SuXiaojun* @Date 2021/3/13 16:26* @Version 1.0*/public class Count {private Integer value;//值private Integer count;//出现的次数public Count... -
JAVA求数组的平均数,众数,中位数
2021-07-03 13:55:48目录 1、名称解释 2、实例代码 (1)求平均数 (2)求中位数 ...众数:众数是指一组数据中出现次数最多的那个数,众数可以是0个或多个。 2、实例代码 (1)求平均数 public static double m.. -
leetcode169. 求众数(java实现的三种解法)
2019-04-03 12:04:47真的,写自从学了数据结构后我越来越觉得自己的脑子不够用了,前两种是我自己的解法,允许时间都达到9ms以上,虽然时间复杂度比较高,但是通俗易懂,最后一种是大神的解法,说实话,我现在其实也有点懵逼,日后遇到... -
众数问题(递归分治策略)
2016-03-07 08:30:12所谓众数,就是对于给定的含有N个元素的多重集合,每个元素在S中出现次数最多的成为该元素的重数, 多重集合S重的重数最大的元素成为众数。例如:S={1,2,2,2,3,5},则多重集S的众数是2,其重数为3。 现在你的任务... -
众数问题-递归和分治
2021-04-12 10:17:33问题描述给定一个数组,找出其中出现次数最多的那个元素(即众数)。例如:1 2 2 2 3 5众数是: 2算法思路:先排序 后用分治法计算求解分治法求解代码如下:#include #include #include using namespace std;/*--------... -
java编程题,求众数
2021-04-22 15:12:58求众数。众数就是一个序列中出现次数最多的数字。如果不唯一,则输出小的那个值。给定第一个代表有几个数字。1<=n<=10^5,每个数字在 int 范围内。 输入样例: 8 10 3 8 8 3 2 2 2 输出样例: 2 ... -
NYOJ-众数问题
2016-07-19 10:27:56众数问题 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 所谓众数,就是对于给定的含有N个元素的多重集合,每个元素在S中出现次数最多的成为该元素的重数,多重集合S重的重数最大的元素成为众数。例如:... -
如何找到一个数组中的众数?
2021-03-10 05:40:31陪伴而非守候使用 Map 来统计每个数出现的频率,然后按频率降序排序,选出频率最大的数即为众数(可能为多个)。import java.util.*;public class What {public static void main(String[] args) throws Exception {... -
算法准备-分治算法解决众数求解问题
2021-03-15 11:28:29分治算法解决众数求解一般来讲分治算法需要处理的序列是有序的,所以该算法处理众数问题的时候也需要进行排序分治算法适合于解决可以将问题规模减小的问题,直到这个小问题可以直接解决这里还是需要想一下这个过程,...