voidmerge(vector<int>& nums1, int m, vector<int>& nums2, int n){ int len=m+n; int res[len]; int p1=0,p2=0; int cur; while(p1<m||p2<n){ if(p1==m){ cur=nums2[p2++]; } elseif(p2==n){ cur=nums1[p1++]; }elseif(nums1[p1]<nums2[p2]){ cur=nums1[p1++]; }else{ cur=nums2[p2++]; } res[p1+p2-1]=cur; } for(int i=0;i<len;i++){ nums1[i]=res[i]; } }
voidmerge(vector<int>& nums1, int m, vector<int>& nums2, int n){ int p1 = m - 1, p2 = n - 1; int tail = m + n - 1; int cur; while (p1 >= 0 || p2 >= 0) { if (p1 == -1) { cur = nums2[p2--]; } elseif (p2 == -1) { cur = nums1[p1--]; } elseif (nums1[p1] > nums2[p2]) { cur = nums1[p1--]; } else { cur = nums2[p2--]; } nums1[tail--] = cur; } }
[27] 移除元素
两个指针,一个指针去找数组的值是否等于指定值,另一个指针指向该数组最后输出的数组顺序位
1 2 3 4 5 6 7 8 9 10 11 12
intremoveElement(vector<int>& nums, int val){ int n =nums.size(); int left=0; for(int right=0;right<n;right++){ if(nums[right]!=val){ nums[left]=nums[right]; left++; } } return left; }
最优:两个指针一个指向开头,另一个指向结尾.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
intremoveElement(vector<int>& nums, int val){ int right =nums.size(); int left=0; while(left<right){ if(nums[left]==val){ nums[left]=nums[right-1]; right--; }else{ left++; } } return left; }
intminSubArrayLen(int target, vector<int>& nums){ int n=nums.size(); if(n==0){ return0; } int ans=INT_MAX; int start =0,end=0; int sum=0; while(end<n){ sum +=nums[end]; while(sum>=target){ ans=min(ans,end-start+1); sum-=nums[start]; start++; } end++; } return ans ==INT_MAX?0:ans; }