zoukankan      html  css  js  c++  java
  • 287. Find the Duplicate Number

        /*
         * 287. Find the Duplicate Number
         * 12.7 by Mingyang 
         * 占位问题,多次遇到过了,另一种解法是Binary Search
         * 如果题目要求不能动这个array,那么占位不行,因为他不能被
         * swap  nums[i] != i 很重要
         */
        public static int findDuplicate1(int[] nums) {
            int len = nums.length;
            if (nums == null || nums.length == 0)
                return 0;
            for (int i = 0; i < len; i++) {
                while (nums[i] != i ) {
                    // 为什么这么个条件呢,因为有可能遇到这种情况,
                    //1,2,2当把1换到2的时候,下一步走到1就返回1了,所以特别注意这一点
                    //错了,是因为1==1,所以返回1,还没做任何事情
                    if (nums[i] == nums[nums[i]])
                        return nums[i];
                    else
                        swap1(nums, i, nums[i]);
                }
            }
            return 0;
        }
        //下面是最好的方法,就是说我们需要计算比中间值小的个数
        public int findDuplicate(int[] nums) {
            int n = nums.length - 1;
            int low = 0, high = n;
            int mid = 0;
            while (low < high) {
                mid = low + (high - low) / 2;
                int c = count(nums, mid); 
    // count #numbers less than mid.一定有一个值,所以不用等于 if (c <= mid) { low = mid + 1; } else { high = mid; } } return low; } private int count(int[] nums, int mid) { int c = 0; for (int i = 0; i < nums.length; i++) { if (nums[i] <= mid) c++; } return c; }
  • 相关阅读:
    SharedPreferences
    短信发送器的实现
    第四周总结
    本周开发工作时间及内容
    自我总结
    随笔
    结对编程
    目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点?
    八皇后
    数制转换
  • 原文地址:https://www.cnblogs.com/zmyvszk/p/5634870.html
Copyright © 2011-2022 走看看