今日学习:
数组理论基础
文章链接:https://programmercarl.com/%E6%95%B0%E7%BB%84%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html
需要两点注意的是
数组下标都是从0开始的。
数组内存空间的地址是连续的
正是因为数组的在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址。
704. 二分查找
题目链接:https://leetcode.cn/problems/binary-search/
文章讲解:https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html
视频讲解:https://www.bilibili.com/video/BV1fA4y1o715
第一想法:
看到题目时,我先想尝试运用for循环,但很快意识到太麻烦且无法判断循环次数,于是转换运用while循环完成题目
1、左闭右开
var search = function (nums, target) {
let left = 0;
let right = nums.length;
while (left < right) {
let mid = (left + right) >> 1;
if (nums[mid] === target) return mid
let isSmall = nums[mid] > target
left = isSmall ? left : mid + 1;
right = isSmall ? mid : right;
}
return -1
};
2、左闭右闭
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var search = function(nums, target) {
let left = 0;
let right = nums.length - 1;
while(left <= right){
let mid = (left + right) >> 1;
if (nums[mid] == target){
return mid
}if(nums[mid] < target){
left = mid + 1
}if(nums[mid] > target){
right = mid - 1
}
}
return -1
};
学习到 >>1
与 /2
的区别,以及? : 的简便用法
23. 移除元素
题目链接:https://leetcode.cn/problems/remove-element/
文章讲解:https://programmercarl.com/0027.%E7%A7%BB%E9%99%A4%E5%85%83%E7%B4%A0.html
视频讲解:https://www.bilibili.com/video/BV12A4y1Z7LP
第一想法
暴力求解,但是解出来超时了,于是转换思路,先看了题解
/**
* @param {number[]} nums
* @param {number} val
* @return {number}
*/
var removeElement = function (nums, val) {
let slowi = 0
for (let i = 0; i < nums.length; i++) {
if (nums[i] !== val) {
nums[slowi++]=nums[i]
}
}
return slowi
};