3.数组中重复数字

题目:

在一个长度为 n 的数组里的所有数字都在0 到 n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次。请找出数组中任意一个重复的数字。

Input:
{2, 3, 1, 0, 2, 5}

Output:
2

思路:

1.排序:O(nlogn)
2.放进hashmap: 时间O(n) 空间O(n)
3.根据0-n-1这个条件,将值为 i 的元素调整到第 i 个位置上。向后遍历
时间O(n),空间O(1)

public class RapetNum {
    public boolean duplicate(int numbers[],int length,int [] duplication) {
        if(numbers == null || numbers.length <= 0) {
            return false;
        }
        for(int i = 0; i < length; i++) {
            while(i != numbers[i]) {
                if(numbers[i] == numbers[numbers[i]]){
                    duplication[0] = numbers[i];
                    return true;
                }
                swap(numbers,i,numbers[i]);
            }
        }
        return false;
    }

    private void swap(int[] numbers, int i, int j) {
        numbers[i] = numbers[i]^numbers[j];
        numbers[j] = numbers[i]^numbers[j];
        numbers[i] = numbers[i]^numbers[j];
    }

}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,349评论 0 33
  • 她又跳到两个人相吻的那块地方,一个人静静的笑着、回味着。今年夏天的暑假里,建刚没有回来,他是作为校级三好生去参加全...
    d022bc721931阅读 1,423评论 0 0
  • 每逢佳节倍思亲,今天元宵节,儿子放老家了,老公吃晚饭后和同事出去了,剩下自己坐在电脑旁,有点茫然,好像很久都这...
    紫草星阅读 2,910评论 0 1
  • 忘了从什么开始过起了没有播放器的日子,没有了那种固定的循环。原以为自己会不习惯,却怎料自己却不在意。也忘了从时候...
    禾子凉阅读 1,774评论 0 0
  • 如何学习基础知识 比特币不仅是一种加密货币鼻祖,也是以区块链为底层技术的数字货币生态系统。学习精通比特币一石二鸟,...
    晴耕雨读ok阅读 1,807评论 0 0