提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、LeetCode 704.二分查找
因为这道题目以前刷过,所以用的时间不多,用的是二分法,不停的寻找中间值,然后将中间值与目标值进行比较,再将边界值改为中间值
标题:
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1
链接:https://leetcode.cn/problems/binary-search
var search = function(nums, target) {
var left = 0;
var right = nums.length - 1;
while(right >= left){
var num = Math.floor((right - left)/2) + left;
if(nums[num] > target){
right = num - 1
}else if(nums[num] < target){
left = num + 1
}else{
return num;
}
}
return -1
};
二、LeetCode 27.移除元素
这个题目以前也刷过,但是隔的比较久,有些忘了,看到题目的第一想法是暴力解法,找到目标值,再排序,之后看了官方解法,用的是双指针法,独立没写出来,是看来示例代码后才明白的。右指针指向当前将要处理的元素,左指针指向下一个将要赋值的位置。
题目:
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
链接:https://leetcode.cn/problems/remove-element
var removeElement = function(nums, val) {
//不额外使用数组空间,则将新数组放在老数组的空间上
var left = 0;
for(var right = 0;right < nums.length;right++){
if(nums[right] !== val){
nums[left] = nums[right];
left++;
}
}
console.log(nums)
return left;
//暴力解法 发现一个就把所有的元素往前移一格
};