zoukankan      html  css  js  c++  java
  • 38.0到n-1中缺失的数字

    题目描述:

      一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字的范围都在0到n-1之内。在范围0到n-1内的n个数字中有且仅有一个数字不在该数组中,求出该数字。

    思路分析:

      因为0到n-1这些数字在数组中是有序的因此数组一开始的一些数字与他们的下标相同。也就是说,0在下标0位置,1在下标1位置,以此类推。如果不在数组中的数字是m,那么m+1就会在下标为m的地方。我们发现m正好是数组中第一个数值和下标不相等的下标,所以这个问题就转化成在数组中找第一个值和下标不相等的元素。

      因为数组有序,所以我们采用二分法进行查找,如果中间数字的数值等于其下标,那么下一阶段我们只需要在右半段进行查找,如果中间数字的数值不等于下标,并且它前面的一个元素的值和下标相等,那么意味着中间这个数就是第一个数值和下标不等的数,那么它的下标就是缺失的数字。如果前一个元素的值和下标不相等,那我们下一阶段在左半段进行查找。

    代码:

    public class Test{
        public int GetMissingNumber(int[]nums){
            if(nums.length==0||nums==null)
                return -1;
            int res=find(nums,0,nums.length-1);
            return res;
        }
        public int find(int []nums,int start,int end){
            int mid=(start+end)/2;
            int midnunm=nums[mid];
            if(start<=end){
                if(midnunm==mid){
                    start=mid+1;
                }else if(mid==0||mid-1==nums[mid-1]){  //mid==0缺第一个数0
                    return mid;
                }else{
                    end=mid-1;
                }
            }
            return find(nums,start,end);
        }
    }
    
  • 相关阅读:
    HDU1041
    HDU1005
    HDU1231
    MYSQL入门总结
    oracle性能问题排查~记一个单实例的问题
    mysql案例~关于mysql的配置文件个人见解
    数据恢复系列~恢复方案制定
    mysql架构解读~mysql的多源复制
    mysql 案例~select引起的性能问题
    遭遇Bad version number in .class file
  • 原文地址:https://www.cnblogs.com/yjxyy/p/10846871.html
Copyright © 2011-2022 走看看