Leetcode刷题Day1----数组
1. 数组理论基础
- 文章链接:https://programmercarl.com/%E6%95%B0%E7%BB%84%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html
2. 二分法查找 https://leetcode.cn/problems/binary-search/ (Leetcode 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
两种方法:左闭右闭 & 左闭右开
- 左闭右闭:【1,1】该数组成立
right=长度-1;
while(left<=right)
更新left=mid+1;
更新right=mid-1;
class Solution {
public int search(int[] nums, int target) {
int left=0;
int right=nums.length-1;
while(left<=right){
int mid=(left+right)/2;
if(nums[mid]>target) right=mid-1;
else if(nums[mid]<target) left=mid+1;
else return mid;
}
return -1;
}
}
- 左闭右开:
【1,1)不成立,【1,2)成立
right=长度;
while(left<right)
更新left=mid+1;因为左边是闭合的,所以更新左区间是要+1
更新right=mid;
class Solution {
public int search(int[] nums, int target) {
int left=0;
int right=nums.length;
while(left<right){
int mid=(left+right)/2;
if(nums[mid]>target) right=mid;
else if(nums[mid]<target) left=mid+1;
else return mid;
}
return -1;
}
}
相关题目:35.搜索插入位置 & 34. 在排序数组中查找元素的第一个和最后一个位置 & 69.x 的平方根
& 367.有效的完全平方数
3. 移除元素(Leetcode 27)
- 题目链接: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
两种方法:暴力循环 & 双指针
- 法一:暴力解法,两层for循环,第一层找到等于value的下标,第二层将value后面的数值依次移到从value的位置开始的数组
- 法二:双指针法,快指针来判断是否该值等于value,当不等于时,就把该值给慢指针指向的值,再让快慢指针都跑,如果等于就不赋值了,只让快指针跑。返回值是slow的位置,因为slow代表着新数组结束的点—不能用 length因为后面数组其实还有值的。
class Solution {
public int removeElement(int[] nums, int val) {
int fast=0;
int slow=0;
while(fast<nums.length){
if(nums[fast]!=val){
nums[slow]=nums[fast];
slow++;
}
fast++;
}
return slow;
}
}