day4

1.剑指 Offer 03. 数组中重复的数字

 1)排序+遍历查找

 1 class Solution {
 2 public:
 3     int findRepeatNumber(vector<int>& nums) {
 4       sort(nums.begin(),nums.end());
 5       int n = nums.size();int i;
 6       for(i = 0;i < n - 1;i ++)
 7        if(nums[i] == nums[i + 1])
 8          break;
 9       return nums[i];
10     }
11 };

2)哈希

 1 class Solution {
 2 public:
 3     int findRepeatNumber(vector<int>& nums) {
 4       unordered_map<int,bool> map;
 5       int res;
 6       for(auto x : nums){
 7           if(map[x]){
 8             res = x;
 9             break;
10           }
11           map[x] = true;
12       }
13       return res;
14     }
15 };

3)原地交换

 1 class Solution {
 2 public:
 3     int findRepeatNumber(vector<int>& nums) {
 4      int n = nums.size();
 5      int res,i = 0;
 6      while(i < n){
 7         if(nums[i] == i){
 8           i ++;
 9           continue;
10         }
11         if(nums[i] == nums[nums[i]])
12         {
13             res = nums[i];
14             break;
15         }
16         swap(nums[i],nums[nums[i]]);
17      }
18      return res;
19     }
20 };

 

2.剑指 Offer 53 - I. 在排序数组中查找数字 I

 1 class Solution {
 2 public:
 3     int search(vector<int>& nums, int target) {
 4       int n = nums.size();
 5       int l = 0,r = n - 1,mid;
 6       int flag = 0;
 7       while(l <= r){
 8           mid = l + (r - l) / 2;
 9           if(nums[mid] == target){
10               flag = 1;
11               break;
12           }
13           else if(nums[mid] < target)
14            l = mid + 1;
15           else
16            r = mid - 1;
17       }
18       if(! flag) return 0;
19       int cnt = 0;
20       for(int i = mid;i >= 0;i --){
21           if(nums[i] == nums[mid])
22            cnt ++;
23           else
24            break;
25       }
26       for(int i = mid + 1;i < n;i ++){
27           if(nums[i] == nums[mid])
28            cnt ++;
29           else
30            break;
31       }
32       return cnt;
33     }
34 };

 3.剑指 Offer 53 - II. 0~n-1 中缺失的数字

 双指针+二分

 1 class Solution {
 2 public:
 3     int missingNumber(vector<int>& nums) {
 4       int n = nums.size();
 5       int i,j;
 6       for(i = 0,j = n - 1;i <= j;){
 7           int mid = (i + j) / 2;
 8           if(nums[mid] != mid)
 9             j = mid - 1;
10           else
11             i = mid + 1;
12       }
13       return i;
14     }
15 };

 

 
posted @ 2022-06-28 23:03  balabalahhh  阅读(42)  评论(0)    收藏  举报