美文网首页Android小牛算法
查找数组中至少一个重复的数字

查找数组中至少一个重复的数字

作者: zhangxuanchen | 来源:发表于2017-01-20 12:48 被阅读4次

1.一个数组长度是n+1 范围是1~n-1 查找至少一个数组中重复的数字

public static void main(String[] args) {
        //长度必须是N+1, 范围是1~N-1
        
        int[] a = new int[]{1,2,3,4,5,6,7,8,3,9};
        System.out.println(find1(a) + "");
        System.out.println(find2(a) + "");
    }
    
    static int find1(int[] a){
        int[] is = new int[a.length];
        for(int i = 0 ; i < a.length ; i++){
            is[a[i]] = ++is[a[i]];
            if(is[a[i]] > 1){
                return a[i];
            }
        }
        return -1;
    }
    
    static int find2(int[] a){
        int x = 0; 
        int y = 0;
        do{
            x = a[a[x]];
            y = a[y];
        }while(x != y);
        x = 0; //x y 获取到折中的位置
        do{
            x = a[x];
            y = a[y];
        }while(x != y);
        return x;
    }```

第一种方式使用位图当N较大的时候会比较费内存。
第二种方式使用单链表存在环来判断。虽然没第一种快,但是节省内存而且时间复杂度只为N,在特定条件下是一种比较实用的算法。

相关文章

  • 查找数组中至少一个重复的数字

    1.一个数组长度是n+1 范围是1~n-1 查找至少一个数组中重复的数字

  • 编程案例自我总结(一)

    此内容仅提供解题思路,应自行尝试撰写具体代码 1.数组中重复的数字查找:查找数组中重复的数字,数组长度为n,取值范...

  • 变异二分查找解题过程

    0.问题描述 题目描述请实现有重复数字的有序数组的二分查找。输出在数组中第一个大于等于查找值的位置,如果数组中不存...

  • 不修改数组找出重复的数字

    # 描述 在一个长度为 n+1 的数组中所有的数字都在 1~n 范围内,所以数组中至少有一个数字是重复的。请至少找...

  • 刷leetCode算法题+解析(三十八)

    至少是其他数字两倍的最大数 题目:在一个给定的数组nums中,总是存在一个最大元素 。查找数组中的最大元素是否至少...

  • 剑指Offer(一)

    题目汇总03.数组中重复的数字(简单),本题考查数组04.二维数组中的查找(简单),本题考查数组05.替换空格,本...

  • Leetcode_747 Largest Number At L

    在一个给定的数组nums中,总是存在一个最大元素 。 查找数组中的最大元素是否至少是数组中每个其他数字的两倍。 如...

  • [LeetCode][Python]747. 至少是其他数字两倍

    在一个给定的数组nums中,总是存在一个最大元素 。 查找数组中的最大元素是否至少是数组中每个其他数字的两倍。 如...

  • LeetCode-747. 至少是其他数字两倍的最大数

    在一个给定的数组nums中,总是存在一个最大元素 。 查找数组中的最大元素是否至少是数组中每个其他数字的两倍。 如...

  • 剑指offer

    面试题3——数组中重复的数字 使用LinkedHashMap,有序存放。 面试题4——二维数组中的查找 首先选...

网友评论

    本文标题:查找数组中至少一个重复的数字

    本文链接:https://www.haomeiwen.com/subject/oqbwbttx.html