前言
- 今天是第一天,马马虎虎用java完成了任务。
- 先看题,再听b站的课,最后自己敲,敲不出来再看的实体书。
- 之前自己不注意和遗漏的东西,在群里都有看到提问和回复,自己也能看懂一二了,不过可能是因为DAY01基础,继续加油keep on吧。
- 周末用Python再过一下
- 拓展题明天(23.08.10)学下, 35.搜索插入位置 和 34. 在排序数组中查找元素的第一个和最后一个位置
- 目前的博客比较简陋,下一篇争取再优化,先看下DAY02的题目
- 给周末排的任务较重,学习时间需要调整,花在琐事的时间有些过长了
704. 二分查找
题目链接
1)左闭右闭
// //左闭右闭
class Solution {
public int search(int[] nums, int target) {
int left = 0, right = nums.length - 1;
if(nums[left] > target || nums[right] < target){
return -1;
}
while(left <= right){
int mid = left + (right - left)/2;//一开始写在循环外了,后来发现群友也有人一样操作;“/2”也可以写成>>1
if(nums[mid] == target){//放在最前面??
return mid;
}else if(nums[mid] < target){
left = mid + 1;
}else{
right = mid - 1;
}
}
return -1;
}
}
2)左闭右开
//左闭右开
class Solution{
// System.out.println("======左闭右开======");
public int search(int[] nums, int target){
int left = 0;
int right = nums.length;
if(nums[left] > target || nums[right - 1] < target){
return -1;
}
while(left < right){
// int mid = left + (right - left) >> 2;//应该是 >> 1;
// int mid = left + (right - left) >> 1;//应该加括号
int mid = left + ((right - left) >> 1);
if(nums[mid] == target){
return mid;
}else if(nums[mid] > target){
right = mid;
}else{
left = mid + 1;
}
}
return -1;
}
}
27. 移除元素
题目链接
1)暴力循环
//暴力循环
class Solution {
public int removeElement(int[] nums, int val) {
int size = nums.length;
for(int i = 0; i < size; i++){
if(nums[i] == val){
//一开始写的是for(int j = i; j < size; j++),脑子始终转不过来
for(int j = i + 1; j < size; j++){
nums[j - 1] = nums[j];
}
size--;
i--;//配合上面的注释,不仅错,而且时间超出了限制
}
}
return size;
}
}
2)双指针
//快慢指针
class Solution {
public int removeElement(int[] nums, int val) {
int slow = 0;
for(int fast = 0; fast < nums.length; fast++){
if(nums[fast] != val){
nums[slow] = nums[fast];
slow++;//慢指针往后移一格
}
}
return slow;//slow数组中的数目是slow-1,在for循环最后还自增了一次
}
}