268. Missing Number

来源:互联网 发布:yy协议软件手机版 编辑:程序博客网 时间:2024/06/05 18:01

题目

268. Missing Number

解题思路

与之前那道题有些相似,也是遍历并让数字归位,因为只有一位数字丢失,假设数组长度为n,数组中的数字在[0,n]之间,

如果丢失的数字x范围是0≤x≤n-1,则数组最大的数字n必然无处归位(数组下标最大为n-1),则把n所在位置的数字设为-1,遍历结束后-1所在位置就是没有归位的数字,也就是丢失的数字;

如果丢失数字是n是话,那么数组所有数字都归位并且没有-1出现。

举个栗子:
用missindex来标注丢失数字的位置,初始化为-1
假设 4 2 5 0 1

1: 第一个数字为4位置不对,与第5个数字1交换位置
1 2 5 0 4 missindex = -1

2: 第一个数字为1位置不对,与第2个数字2交换位置
2 1 5 0 4 missindex = -1

3: 第一个数字为2位置不对,与第3个数字5交换位置
5 1 2 0 4 missindex = -1

4: 第一个数字为5位置不对,没有第6个位置,所以把5设为-1
-1 1 2 0 4 missindex = 0

5: 第一个数字为-1,跳过,继续遍历,第1,2个数字位置正确,也跳过,第3个数字0位置错误,与第一个数字-1交换位置
0 1 2 -1 4 missindex = 3

6:第3个数字是-1,跳过,继续遍历,后面数字位置正确,遍历结束时missindex = 3,因此丢失的数字是3

具体代码

class Solution {public:    void swap(vector<int>& nums, int a, int b) {        int t = nums[a];        nums[a] = nums[b];        nums[b] = t;    }    int missingNumber(vector<int>& nums) {        int missindex = -1;        for (int i = 0; i < nums.size(); i++) {            while (nums[i] != -1 && nums[i] != i && nums[i] != nums.size()) {                swap(nums, i, nums[i]);            }            if (nums[i] == nums.size()) {                nums[i] = -1;                missindex = i;            }            if (nums[i] == -1)                missindex = i;        }        return missindex == -1 ? nums.size() : missindex;    }};

PS

说来惭愧……又看见discuss的dalao神解法……对不起我的智商拉低了leetcode题目的easy率

dalao代码如下:

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

有个很必要知道的定理就是:a^b^b =a, 所以最后出来的那个数字肯定只出现过一次,也就是那个丢失的数字啦~

位运算,学的棒,走遍天下都不怕!

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 批量性不良再限度样本规格内怎么办 老公说老婆不攒钱都买衣服了怎么办 华为手机获取安装包信息失败怎么办 液压电动脱模器不上升了怎么办 退伍军人证和身份证名字不付怎么办 车辆有违章需要短信提醒要怎么办 1969年退伍的退伍证丢了怎么办 江苏移动没实名认证停机了怎么办呀 亿达老年手机来电音量太大怎么办 挑三十六乘二的内螺纹丝瞳毛怎么办 内六角螺丝的冒滑了怎么办 孔里的内六角滑了怎么办 十字螺丝刀的头卡在螺母里怎么办 内六角扳手断在螺丝孔里怎么办 六棱螺丝刀折进螺丝里了怎么办 内6棱螺丝拧花了怎么办 只有pe模式可以用键盘鼠标怎么办 电脑重做了系统连不上无线网怎么办 联想手机死机了怎么办不可拆卸电池 手机界面弹出后大小无法调整怎么办 方向盘打方向瑟瑟的吱吱响怎么办 三脚架提升杆螺丝滑丝了怎么办 花土里面有很多细长的螺丝怎么办 防盗门外边上边缝宽螺丝松了怎么办 填充墙与框架梁不对齐怎么办 亚轧滚珠丝杠螺帽超程了怎么办 在公司交的五险一金辞职了怎么办 铝合金的渣子整到眼睛里怎么办 铁锅手柄上的铆钉拧不动怎么办 喂完鱼鱼缸上边飘着一层油膜怎么办 铸铁管道横着排的结口漏水怎么办 缤智行李架免打孔螺丝款怎么办 前保险杠和叶子板缝隙大怎么办 新奥拓的大灯调节螺丝滑丝了怎么办 小米手环2计步不准怎么办 小米手环3计步不准怎么办 眼镜用洗发水洗了后模糊怎么办 雷朋近视镜眼镜腿折了怎么办 近视镜眼镜腿断了该怎么办 老师把学生的眼镜打坏了怎么办 生死狙击忘了密保改不了密码怎么办