zoukankan      html  css  js  c++  java
  • 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;
        }
  • 相关阅读:
    docker工具链概述
    Microsoft.AspNetCore.Authentication.Cookies从入门到精通 (二)
    Microsoft.AspNetCore.Authentication.Cookies从入门到精通 (一)
    阿贝云免费虚拟主机使用体验
    Topshelf 秒建 Windows 服务
    一次兼职项目开发的经历
    修改了my.ini没有效果,MySql的字符集还是没有变成utf8——mysql中文乱码
    【转载】Fiddler工具使用介绍(一)
    C#中$的用法
    系统开发常用模块
  • 原文地址:https://www.cnblogs.com/skillking/p/10000511.html
Copyright © 2011-2022 走看看