[LeetCode]268. Missing Number

来源:互联网 发布:游戏网络推广员 编辑:程序博客网 时间:2024/06/05 04:49

[LeetCode]268. Missing Number

题目描述

这里写图片描述

思路

因为只有0-n的数在数组中,所以只要对数组每一位指向的数字加标识即可
这里做的标识为取相反数,需要考虑0的情况

代码

#include <iostream>#include <vector>using namespace std;class Solution {public:    int missingNumber(vector<int>& nums) {        int zeroIndex = -1;        for (int i = 0; i < nums.size(); ++i) {            //数组中数字为数组长度时,越界,跳过            if (abs(nums[i]) == nums.size())                continue;            //数组中数字对应为0时,需要额外标识            else if (nums[abs(nums[i])] == 0)                zeroIndex = abs(nums[i]);            //取相反数标识            else                nums[abs(nums[i])] = nums[abs(nums[i])] < 0 ? nums[abs(nums[i])] : -nums[abs(nums[i])];        }        for (int i = 0; i < nums.size(); ++i) {            //标识后,对应数字为正数,或者数字为0,零标识未改变的,返回当前数字下标            if (nums[i] > 0 || (nums[i] == 0 && zeroIndex == -1))                return i;        }        //若数组中数字都小于0,且0标识也被改变,那么缺失的数只有最大的        return nums.size();    }};int main() {    vector<int> nums = { 2, 0, 1 };    Solution s;    cout << s.missingNumber(nums) << endl;    system("pause");    return 0;}
0 0
原创粉丝点击