1、找出数组中任意重复的数字——《剑指offer》
2018-05-18 17:11
591 查看
版权声明: https://blog.csdn.net/ustcer_93lk/article/details/80366750
数组中任意一个重复的数
问题描述:在一个长度为n的数组里的所有数字都在0到n-1的范围内, 数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次。请找出数组中任意一个重复的数字。
首先,我们先说一般的方法:可以建立个数组记录,但是需要空间O(n),相信大多数人都会做,这里不详细赘述了。
比较好的方法:如果没重复的数字,应该是一个坑对应一个数字;有重复的情况下,肯定是一个坑对应多个数字。我们只需要找到这个坑就行了。
持续更新...
代码附下
Java实现:
package 找出数组中任意一个重复的数;
public class DuplicateNumber { public static void main(String[] args) { // TODO Auto-generated method stub int a[] = new int[] { 2, 3, 5, 0, 1, 2 }; System.out.println(duplication(a)); } /** * 如果下标i对应的a[i]==i,就继续 不是的话,就以a[i]为下标去交换,就是a[a[i]],a[i]交换,重新判断a[i] * * @param a * @return */ public static int duplication(int[] a) { // 常规判断 if (a == null || a.length <= 0) { return -1; } // 判断每一个元素是否非法 for (int i = 0; i < a.length; ++i) { if (a[i] < 0 || a[i] > a.length - 1) return -1; } for (int i = 0; i < a.length; i++) { while (i != a[i]) { if (a[i] == a[a[i]]) { // 如果这个坑上已经有对应的数字了,那就是重复了 return a[i]; } else { swap(a, i, a[i]); } } } return -2; } private static void swap(int[] a, int i, int j) { // TODO Auto-generated method stub int temp = a[i]; a[i] = a[j]; a[j] = temp; } }
持续更新...欢迎赞赏!
https://blog.csdn.net/ustcer_93lk/article/details/80366750如果有问题,欢迎大家留言,有更好的方法也期待大家告知。欢迎赞赏,鼓励知识付费,谢谢!
阅读更多相关文章推荐
- 《剑指offer》-请找出数组中任意一个重复的数字
- 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{
- 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3
- 2、不修改数组找出重复的数字——《剑指offer》
- 剑指offer:找出数组中重复的数字
- 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{
- 《牛客网剑指offer50题》找出数组中任意一个重复的数字
- 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。
- 输入一个递增的数组和一个数字s,找出数组中任意两个数使他们的和正好是这个数字s,如果有任意多对数字的和为s,输出任意一堆数字即可,例如,输入数组[1,2,4,7,11,15]和数字
- 计数排序——有一个数组,里面是从1到1,000,000的整数,其中有一个数字出现了两次,你怎么找出那个重复的数字?
- 《剑指offer》3.数组中重复的数字
- 《剑指Offer》学习笔记--面试题51:数组中重复的数字
- 《剑指offer》-找到数组中重复的数字
- 找出数组中重复的数字
- 讲两个int 数组找出重复的数字 用最少的循环
- 算法面试题之不修改数组找出重复的数字
- 一个含n个元素的整数数组至少存在一个重复数, 请编程实现,在O(n)时间内找出其中任意一个重复数。
- 数组中重复的数字——剑指offer
- 剑指OFFER(java)-数组中重复的数字
- 数组中重复的数字(剑指offer)+时间复杂度O(n)空间复杂度O(1)的想法