20240724
一、算法刷题开始跟老师了!!来源于代码随想录!!!
1.二分法
1.1 给定的数组区间为左闭右闭
int num[] int target 判断target的值是否在num中,在返回索引,不在返回-1
当时左闭右闭的时候,我们的区间判断就为:
left=0;
right=num.size-1;
middle=(left+right)/2
while(left<=right){//这里是因为比如给定的数组为int[2,2],right=2,left=2,是可以相等的
if(nums[middle]>target){//证明在middle的左边,又因为nums是左闭右闭合,可以等于middle,middle
//判断过了,所以-1
right=middle-1;
}else if(nums[middle]<target){//证明在middle的右边边,又因为是左闭右闭合,可以等于middle
//又因为middle判断过了,所以+1
left+=1;
}else{
return middle;
}
}
1.2 给定的数组区间为左闭右开
int num[] int target 判断target的值是否在num中,在返回索引,不在返回-1
当时左闭右闭的时候,我们的区间判断就为:
left=0;
right=num.size;//因为right不包含右边界,所以他不用-1
middle=(left+right)/2
while(left<right){//这里是因为比如给定的数组为int[2,2),left=2,right<2的,所以不能相等。
if(nums[middle]>target){//证明在middle的左边,又因为nums是左闭右开,之前不包含middle,
//middle没判断,所以right=middle;
right=middle;
}else if(nums[middle]<target){//证明在middle的右边边,又因为是左闭右闭合,可以等于middle
//又因为middle判断过了,所以+1
left+=1;
}else{
return middle;
}
}
2. 27题移除元素(双指针思路)
返回删除后的数组长度:
int test(int num[],int a) {
int slow=0;//定义一个慢指针,用来记录fast传入的值
for(int fast=0;fast<num.length;++fast){//定义快指针用来去寻找目标a
if(num[fast]!=a){
num[slow]=num[fast];//也可以直接num[slow++]=num[fast]
slow++;
}
}
return slow;//因为如果不等于a,进行删除操作的话,slow是不+的,所以数组的长度就为slow
}
3. 977. 有序数组的平方(双指针)
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
class Solution {
public int[] sortedSquares(int[] nums) {
int[] result = new int[nums.length];//定义一个新的数组,用来存储平方后的数组
int k=nums.length-1;//得到一个数组最大的索引
for(int i=0,j=k;i<=j;){//双指针,i,j。对于i和j的+,-是需要进行判断的,所以写在下面
if(nums[i]*nums[i]>nums[j]*nums[j]){//用来判断,第一个和最后一个哪个的平方大(因为又负数)
result[k]=nums[i]*nums[i];//将大的赋值给result[]最后一位,这样就可以得到一个从小到大的数组了
k--;
i++;
}else{
result[k]=nums[j]*nums[j];
k--;
j--;
}
}
return result;
}
}
4 长度最小的子数组(滑动窗口)
class Solution {
// 滑动窗口
public int minSubArrayLen(int s, int[] nums) {
int left = 0;
int sum = 0;
int result = Integer.MAX_VALUE;
for (int right = 0; right < nums.length; right++) {
sum += nums[right];
while (sum >= s) {
result = Math.min(result, right - left + 1);
sum -= nums[left++];
}
}
return result == Integer.MAX_VALUE ? 0 : result;
}
}