简单得很,但是我发现我的算法效率很低,其实还有很多地方需要完善的。一次排序,便利查找。发现了就返回。思路简单,效率嘛堪忧。
class Solution { public: int missingNumber(vector<int>& nums) { sort(nums.begin(),nums.end()); for(int i = 0;i != (nums.size() + 1);++ i) { if(i != nums[i]) { return i; } } } };
上次聊到一个异或操作,我发现找数用这个特别方便,因为最大自然数我们已经知道了,就是nums的长度。那么最大的这个自然数,和0异或操作后得到0或者1,再用这个结果和nums中存储的数进行异或,假设这个数存在那么返回的就是0,假设这个数不存在返回的就是这个数。
class Solution { public: int missingNumber(vector<int>& nums) { int len = nums.size(); int xOR = len; for(int i = 0;i != len;++ i) { xOR ^= i; xOR ^= nums[i]; } return xOR; } };
卧槽,好像效率有所提高。不过这都是瞎猫抓死耗子,没点技术含量啊。