【追求进步】数组中重复的数字
来源:互联网 发布:主播音效软件 编辑:程序博客网 时间:2024/04/29 08:33
题目描述
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。
三种方法的代码分别是:
常规思想:
1.一个个比较,重复即就是相等,则输出复杂度o(n平方);
public static int duplicate(int numbers[],int length) {if(numbers==null||length<1){return -1;}int count=0;for(int i=0;i<length;i++){for(int j=1;j>i;j++){if(numbers[i]==numbers[j]){ count=i;break;}}} return numbers[count]; }2.巧妙的字符串索引,复杂度o(n)
public static boolean duplicate(int numbers[],int length,int [] duplication) { //复杂度o(n):思想巧妙的根据Java中字符串中的位置索引不同 //最笨的方法就是一个个对比,复杂度o(n平方);还有一个就是使用HashMap来统计字符出现的次数 StringBuffer sb = new StringBuffer(); for(int i = 0; i < length; i++){ sb.append(numbers[i] + "");//将数组转化为字符串 } for(int j = 0; j < length; j++){ //将数组转化为字符串,用字符串的出现字符的索引位置不同来判断存在重复的字符 if(sb.indexOf(numbers[j]+"") != sb.lastIndexOf(numbers[j]+"")){ duplication[0] = numbers[j]; return true; } } return false; }3.借助HashMap,出现次数存放在value中。复杂度o(n)
public static int duplicate(int numbers[],int length){int result=0;HashMap<String,Integer> map=new HashMap<>();for (int i = 0; i < numbers.length; i++) {int index=1;if(map.containsKey(numbers[i]+"")){index++;map.put(numbers[i]+"", index);result=numbers[i];break;}else{map.put(numbers[i]+"", index);}}return result;} public static void main(String[] args) { int a[]={2,3,1,0,2}; System.out.println(duplicate(a,5));}
0 0
- 【追求进步】数组中重复的数字
- 【追求进步】数组中出现次数超过一半的数字
- 【追求进步】数字在排序数组中出现的次数
- 【追求进步】数组中只出现一次的数字
- 【追求进步】旋转数组的最小数字
- 【追求进步】二进制中1的个数
- 数组中重复的数字
- 数组中重复的数字
- 数组中重复的数字
- 数组中重复的数字
- 数组中重复的数字
- 数组中重复的数字
- 数组中重复的数字
- 数组中重复的数字
- 数组中重复的数字
- 数组中重复的数字
- 数组中重复的数字
- 数组中重复的数字
- Linux启动ftp服务器530 Permission denied解决方法
- error2019的问题
- Palindrome Number
- Drawable资源——ShapeDrawable资源
- 浮动与display:inline-block
- 【追求进步】数组中重复的数字
- 多线程
- 如何优雅的使用 Mac
- 7.PHP中的运算符2
- 移植gdb工具-远程调试qt程序
- 抢银行 扭向0 1
- 文章标题
- Java 多线程编程学习(二)
- mojo 接口返回键值对的json格式