3 数组中的重复数字
题目描述
在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次。请找出数组中任意一个重复的数字。
Input: {2, 3, 1, 0, 2, 5}Output: 2
思路
给出了长度为n且数组内的数字的范围是0-n,0-n的范围恰好是这个数组的索引的范围。思路是遍历整个数组,把值为j的元素放到索引为j的位置上,如果整个数组没有重复,那么在放置的过程中就不会发生冲突。
{3,0,2,1} {0,1,2,3}
如果至少有一个元素发生了至少一次冲突,那么置换完毕后的数组的长度肯定小于原有数组的长度。
{3,0,2,2} {0,2,3}
实现
这种需要置换的,肯定把置换的方法写出来
public static void swap(int[]arr,int i,int j){/*** 把数组arr里位置i j的元素交换位置*/int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}
我的第一版是这样的,看起来好像没啥问题。遍历整个数组,然后把arr[i]位置的元素和arr[arr[i]]位置的元素交换。
public static boolean isDuplicate(int[] arr){int length = arr.length;for(int i=0; i<=length-1; i++){if(arr[i] == arr[arr[i]])return true;else {swap(arr, i, arr[i]);}}return false;}
我拿[3,1,0,2]这个数组测试的时候,返回的是true,这显然是不对的。调试之后发现在i=1即循环一次后,数组变成了{3,1,2,0},返回true。返回的条件是arr[1] == arr[arr[1]]。到这里我就看到我这个算法的问题了,我的算法只有在原始数组是完全乱序的前提下才会返回正确的结果,也即我的算法是判断一个数组是否完全乱序。因为{3,1,2,0}中的1处在了正确的位置,所以会导致提前退出。
错误的原因是我没有考虑到一个数组的arr[i]==i的情况下,也会出现上述的交换冲突。
public static boolean isDuplicate2(int[] arr){int length = arr.length;for(int i=0; i<=length-1; i++){if(arr[i] == arr[arr[i]] && arr[i] != i)return true;else {swap(arr, i, arr[i]);}}return false;}
转载于:https://www.cnblogs.com/AshOfTime/p/10391657.html
3 数组中的重复数字相关推荐
- 题目:查找数组中的重复数字,要求空间复杂度为O(1)(基于Java实现)
题目:查找数组中的重复数字,要求空间复杂度为O(1)(基于Java实现) 题目: 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字 ...
- lintcode :Remove Duplicates from Sorted Array II 删除排序数组中的重复数字 II
题目: 删除排序数组中的重复数字 II 跟进"删除重复数字": 如果可以允许出现两次重复将如何处理? 样例 给出数组A =[1,1,1,2,2,3],你的函数应该返回长度5,此时A ...
- [剑指offer][JAVA]面试题第[03]题[数组中的重复数字][HashSet]
[问题描述][数组中的重复数字][简单] 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道 ...
- np.unique( )--去除数组中的重复数字,并进行排序之后输出
该函数是去除数组中的重复数字,并进行排序之后输出. 要求是 arr 里面是相同的维数. import numpy as npresult1 = np.unique([1, 1, 2, 2, 2, 3, ...
- C/C++面试之算法系列--去除数组中的重复数字
去除数组中的重复数字 Sailor_forever sailing_9806@163.com 转载请注明 http://blog.csdn.net/sailor_8318/archive/2008/ ...
- 剑指offer系列-03.数组中的重复数字
剑指offer系列第03题.数组中的重复数字 找出数组中重复的数字.在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内. 数组中某些数字是重复的,但不知道有几个数字重复了,也不 ...
- 删除排序数组中的重复数字 II · Remove Duplicates from Sorted Array II
重复一次 [抄题]: 给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度. 不要使用额外的数组空间,必须在原地没有额外空间的条件下完成. [思维问题]: [ ...
- 寻找数组中的重复数字(java,可执行程序)
package Array;import java.util.ArrayList; import java.util.Arrays;public class ex3_2 {public static ...
- 删除排序数组中的重复数字 II
题目连接 http://www.lintcode.com/zh-cn/problem/remove-duplicates-from-sorted-array-ii/ 题目大意 跟进"删除重复 ...
最新文章
- Java基础入门语法和安装
- android Studio 配置LUA 开发环境
- MSTP多业务传输平台对设备接口的要求有哪些?
- 小程序_协作开发(版本控制)
- JavaScript栈和队列方法(Array类型)
- 使用Python分析英文句子的词性和情感倾向
- D:\ProgramData\Anaconda3\envs\test_onnx\python.exe: No module named pip
- 为什么单片机定时器的TH和TL都要设置?
- Minecraft服务器搭建(官方服务器端)
- 【电商网站】将商品加入购物车代码
- 对抗生成网络代码Generative Adversarial Networks (GANs),Vanilla GAN,Deeply Convolutional GANs
- 嵌入式编程中boot和app的s19简易合并方法(使用mfc编程)
- unity GetComponent使用
- Linux脚本的制作命令
- hdu5445 Food Problem(背包)
- MATLAB 2020a 安装许可证错误问题 licensing error:-8523
- 拼多多被指洗钱 官方回应:将起诉差评并索赔1000万元
- 使用nmap扫描端口
- 数字电路48( 逐次比较型模数转换器的工作原理)
- r86s编译lede x86 OpenWrt
热门文章
- [蓝桥杯][2015年第六届真题]表格计算(递归+记忆化)
- Swap Letters CodeForces - 1215C(贪心)
- CVPR 2021 | 如何让GAN的训练更加高效优雅
- 汇编语言start标号的作用
- java服务器内存问题_java内存泄漏5种情况总结
- 【算法竞赛学习】数据分析达人赛3:汽车产品聚类分析
- python爬取大众点评_浅谈python爬取58同城,大众点评这两个网站
- [机器学习] LR与SVM的异同
- Socket 编程 windows到Linux代码移植遇到的问题
- 5个强大的Java分布式缓存框架