题解 | #缺失数字#
缺失数字
http://www.nowcoder.com/practice/9ce534c8132b4e189fd3130519420cde
原地哈希
时间复杂度:
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 找缺失数字 * @param a int整型vector 给定的数字串 * @return int整型 */ int solve(vector<int>& nums) { // write code here int n = nums.size(); for(int i = 0; i < n ; i ++){ //原地哈希 while(nums[i] >=0 && nums[i] < n && nums[i] != nums[nums[i]]){ swap(nums[i], nums[nums[i]]); } } for(int i = 0; i < n ; i ++){ //原地哈希 if(nums[i] != i) return i; } return n + 1; } };
二分
题目暗示为有序??有序可以直接二分!
时间复杂度:
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 找缺失数字 * @param a int整型vector 给定的数字串 * @return int整型 */ int solve(vector<int>& nums) { // write code here int n = nums.size(); int left = 0, right = n - 1; while(left < right){ int mid = left + (right - left) / 2; if(nums[mid] != mid) right = mid; else left = mid + 1; } if(nums[left] == left) left ++; return left; } };