原地哈希
时间复杂度:
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;
}
}; 
京公网安备 11010502036488号