已经找到工作,但希望再试试春招,距离春招还剩两个月,加油。
这两道题都刷过很多遍了,没什么好说的直接过。
704
本以为刷了很多次没想到还是做错了,有些小细节要注意。
这里是迭代式的,函数式的也不难。
class Solution {public int search(int[] nums, int target) {int l = 0, r = nums.length - 1;while(l <= r){int mid = (l + r) / 2;if(nums[mid] == target){return mid;}if(nums[mid] > target){r = mid - 1;//这里一开始写的是mid,由于我是取等于所以不能是mid}else if(nums[mid] < target){l = mid + 1;}}return -1;}
}
27
双指针没什么说的。
class Solution {public int removeElement(int[] nums, int val) {int len = nums.length;int i = 0, j = 0;while(j < len){if(nums[j] == val){j++;continue;}nums[i++] = nums[j++];}return i;}
}
刷一下34和35,直接刷代码随想录的时候从来没有刷过拓展题。
34
最开始的想法是通过二分找到一个答案后,往左右两边找到边缘的坐标,但发现这样在极端情况下时间复杂度是o(n),所以还是正常地通过两个二分,一个找左端点一个找右端点吧。
class Solution {public int[] searchRange(int[] nums, int target) {int r = nums.length - 1, l = 0;int ansl = -1;while(l <= r){int mid = (l + r) / 2;if(nums[mid] >= target){if(nums[mid] == target){ansl = mid;}r = mid - 1;}else{l = mid +1;}}int ansr = ansl;r = nums.length - 1;l = 0;while(l <= r){int mid = (l + r) / 2;if(nums[mid] > target){r = mid - 1;}else{if(nums[mid] == target){ansr = mid;}l = mid +1;}}return new int[]{ansl, ansr};}
}
35
class Solution {public int searchInsert(int[] nums, int target) {int l = 0, r = nums.length - 1;int ans = -1, mid = -1;while(l <= r){mid = (l + r) / 2;if(nums[mid] == target){ans = mid;break;}if(nums[mid] > target){r = mid - 1;}else{l = mid + 1;}}if(ans == -1){if(nums[mid] > target){return mid;}else{return mid + 1;}}return ans;}
}
今天是12.12做的事12.11的任务,明天要补进度了
今天的还算比较简单,加油!
男朋友帮我加了一个洛谷题,好难已经做完了明天再补充细节吧T-T
R194137083