# 代码随想录二刷DAY1~3

## Day1

### 704 二分查找，简单

1. class Solution {
2. public:
3.     int search(vector<int>& nums, int target) {
4.         int l=0,r=nums.size()-1;
5.         while(l<r){
6.             int mid=l+r>>1;
7.             if(nums[mid]<target){
8.                 l=mid+1;
9.             }
10.             else{
11.                 r=mid;
12.             }
13.         }
14.         if(nums[l]==target) return l;
15.         return -1;
16.     }
17. };

1. class Solution {
2. public:
3.     int search(vector<int>& nums, int target) {
4.         int l=0,r=nums.size()-1;
5.         while(l<r){
6.             int mid=(l+r+1)>>1;
7.             if(nums[mid]>target){
8.                 r=mid-1;
9.             }
10.             else{
11.                 l=mid;
12.             }
13.         }
14.         if(nums[l]==target) return l;
15.         return -1;
16.     }
17. };

### 35 搜索插入的位置，简单

1. class Solution {
2. public:
3.     int searchInsert(vector<int>& nums, int target) {
4.         int l=0,r=nums.size()-1;
5.         while(l<r){
6.             int mid=(l+r+1)>>1;
7.             if(nums[mid]>target) r=mid-1;
8.             else l=mid;
9.         }
10.         if(nums[l]<target) return l+1;
11.         return l;
12.     }
13. };

### 34 排序数组中查找元素的第一个和最后一个位置，中等

Line 1037: Char 9: runtime error: reference binding to null pointer of type 'int' (stl_vector.h)是空指针访问，注意检查nums.size()==0

1. class Solution {
2. private:
3.     int get_left(vector<int>&nums,int target){
4.         int l=0,r=nums.size()-1;
5.         while(l<r){
6.             int mid=l+r>>1;
7.             if(nums[mid]<target) l=mid+1;
8.             else r=mid;
9.         }
10.         if(nums[l]==target) return l;
11.         return -1;
12.     }
13.     int get_right(vector<int>&nums,int target){
14.         int l=0,r=nums.size()-1;
15.         while(l<r){
16.             int mid=(l+r+1)>>1;
17.             if(nums[mid]>target) r=mid-1;
18.             else l=mid;
19.         }
20.         if(nums[l]==target) return l;
21.         return -1;
22.     }
23. public:
24.     vector<intsearchRange(vector<int>& nums, int target) {
25.         if(nums.size()==0return {-1,-1};
26.         int low=get_left(nums,target);
27.         int high=get_right(nums,target);
28.         return {low,high};
29.     }
30. };

### 27 移除元素，简单

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

1. class Solution {
2. public:
3.     int removeElement(vector<int>& nums, int val) {
4.         // i slow
5.         // j fast
6.         int i=0;
7.         for(int j=0;j<nums.size();j++){
8.             while(j<nums.size()&&nums[j]!=val)
9.                 nums[i++]=nums[j++];
10.         }
11.         return i;
12.     }
13. };

## DAY2

### 977 有序数组的平方，简单

1. class Solution {
2. public:
3.     vector<intsortedSquares(vector<int>& nums) {
4.         for(auto &n:nums) n*=n;
5.         sort(nums.begin(),nums.end());
6.         return nums;
7.     }
8. };

### 209 长度最小的子数组，中等

//最短，一发现符合，就缩

//如果是最长，一发现不符合，就扩

1. class Solution {
2. public:
3.     int minSubArrayLen(int target, vector<int>& nums) {
4.         int bestres = INT_MAX, l = 0, tmpres = 0;
5.         int sum=0;
6.         for (int r = 0; r < nums.size(); r++) {
7.             sum += nums[r];
8.             // 最短，一发现符合，就缩
9.             // 如果是最长，一发现不符合，就扩
10.             while (sum >= target) {
11.                 tmpres = r - l + 1;
12.                 bestres = min(tmpres, bestres);
13.                 sum -= nums[l++];
14.             }
15.         }
16.         if(bestres==INT_MAX) return 0;
17.         return bestres;
18.     }
19. };

### 59 螺旋矩阵II，中等

1. class Solution {
2. public:
3.     vector<vector<int>> generateMatrix(int n) {
4.         vector<vector<int>> res(n,vector<int>(n,0));
5.         int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
6.         for(int x=0,y=0,d=0,k=1;k<=n*n;k++){
7.             //走过了或者撞墙
8.             res[x][y]=k;
9.             int a=x+dx[d],b=y+dy[d];
10.             if(a<0||a>n-1||b<0||b>n-1||res[a][b]!=0){
11.                 d=(d+1)%4;
12.                 a=x+dx[d];
13.                 b=y+dy[d];
14.             }
15.             //更新x,y!!
16.             x=a,y=b;
17.         }
18.         return res;
19.     }
20. };

## DAY3

### 203移除链表元素，简单

Runtime error;因为缺少了一个更新当前指针的语句

1. /**
2.  * Definition for singly-linked list.
3.  * struct ListNode {
4.  *     int val;
5.  *     ListNode *next;
6.  *     ListNode() : val(0), next(nullptr) {}
7.  *     ListNode(int x) : val(x), next(nullptr) {}
8.  *     ListNode(int x, ListNode *next) : val(x), next(next) {}
9.  * };
10.  */
11. class Solution {
12. public:
13.     ListNode* removeElements(ListNode* head, int val) {
18.         //缺少一个更新指针的语句！
19.         while(p->next!=nullptr){
20.             if(p->next->val==val) p->next=p->next->next;
21.             else p=p->next;
22.         }
24.     }
25. };

### ACWING29 删除链表中重复的节点

1. /**
2.  * Definition for singly-linked list.
3.  * struct ListNode {
4.  *     int val;
5.  *     ListNode *next;
6.  *     ListNode(int x) : val(x), next(NULL) {}
7.  * };
8.  */
9. class Solution {
10. public:
13.         auto dummy= new ListNode(-1);
15.         auto p=dummy;
18.         while(q!=nullptr){
19.             while(q!=nullptr&&q->val!=t->val){
20.                 p=t;
21.                 t=q;
22.                 q=q->next;
23.             }
24.             if(q==nullptrbreak;
25.             while(q!=nullptr&&q->val==t->val){
26.                 q=q->next;
27.             }
28.             p->next=q;
29.             t=q;
30.             if(q!=nullptr)q=q->next;
31.         }
32.   return dummy->next;
33.     }
34. };

### 206反转链表，简单

1. /**
2.  * Definition for singly-linked list.
3.  * struct ListNode {
4.  *     int val;
5.  *     ListNode *next;
6.  *     ListNode() : val(0), next(nullptr) {}
7.  *     ListNode(int x) : val(x), next(nullptr) {}
8.  *     ListNode(int x, ListNode *next) : val(x), next(next) {}
9.  * };
10.  */
11. class Solution {
12. public:
16.         ListNode* pre=nullptr;
18.         //条件也重要呀，不用判它的next，手写模拟就知道了。
19.         while(cur!=nullptr){
20.             ListNode* tmp=cur->next;
21.             cur->next=pre;
22.             pre=cur;
23.             cur=tmp;
24.         }
25.         //return 的是什么？好好想想 当然是pre
26.         return pre;
27.     }
28. };

• 34
点赞
• 8
收藏
觉得还不错? 一键收藏
• 0
评论

1.余额是钱包充值的虚拟货币，按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载，可以购买VIP、付费专栏及课程。