• 268. Missing Number


    一、题目

      1、审题

      

      2、分析

        求出一个数组中连续的元素中缺失的那一个。

    二、解答

      1、思路

        方法一、

          将数组中的元素与下标进行对应。最终与下标不一致的元素即为缺失德那一个。

        public int missingNumber(int[] nums) {
            int end = nums.length - 1;
            for (int start = 0; start <= end; start++) {
                if(nums[start] > end || nums[start] == start)
                    continue;
                int tmp = nums[start];
                nums[start] = nums[tmp];
                nums[tmp] = tmp;
                start--;
            }
            
            for (int start = 0; start <= end; start++) {
                if(nums[start] != start)
                    return start;
            }
            return end + 1;
        }

      方法二、

        采用异或 ^ 运算符。将下标与元素值一起做 ^ 操作。出现了两次的元素最终会被消去,只剩下要求的出现一次的元素。

        public int missingNumber2(int[] nums) {
            int re = 0, i = 0;
            for (i = 0; i < nums.length; i++) 
                re = re ^ i ^ nums[i];
            
            return re ^ i;
        }

      方法三、

        采用求和方法。假若元素全部连续,将他们求和后再减去出现的元素值,剩下的即为未出现的元素值。

        public int missingNumber3(int[] nums) {
            int len = nums.length;
            int sum = (0 + len) * (len + 1) / 2;
            for (int i = 0; i < len; i++) 
                sum -= nums[i];
            return sum;
        }

      方法四、

        先将数组排序,在采用二分法查找缺失德元素。排序后下标与元素值相等,则该元素及前部分都是完整的部分。若该元素与下标不对应,则缺失德元素在前部。

        public int missingNumber4(int[] nums) {
            Arrays.sort(nums);
            int left = 0, right = nums.length, mid = (left + right) / 2;
            while(left < right) {
                mid = (left + right )/ 2;
                if(nums[mid] > mid) 
                    right = mid;
                else 
                    left = mid + 1;
            }
            return left;
        }
  • 相关阅读:
    在ubuntu下关闭笔记本触摸板
    (转载)实用小命令 windows下查看端口占用情况
    (转载)JBoss 4.2.3下部署EJB 3.0碰到的local和remote问题
    Windows下通过xmanager远程桌面控制Linux(转)
    SQL Server 事务日志的问题
    回归
    用友软件工程IT应用研究院
    关于Oracle数据库的死锁(转书摘)
    关于企业级Web2.0的一点想法
    关注Java的开源项目(中文版)
  • 原文地址:https://www.cnblogs.com/skillking/p/10000511.html
Copyright © 2020-2023  润新知