个人记录:
很久没打卡了,学校考试和找实习的事情太多.
这是一个新的系列,主要是做算法训练和补充技术上的学习。
系列:
对于算法则不再粘贴思路,每道题以java和python的形式实现,但不粘贴python代码,每日做的题目保证自我思考,数量不限。
增加每日内容的总结(包含八股或新知识)
算法
Java代码:
class Solution {
//本题意思是求出长度和结果集
public int removeElement(int[] nums, int val) {
int len = nums.length;
int slow = 0;
for(int fast = 0; fast<len;fast++){
if(nums[fast]!=val){
nums[slow++] = nums[fast];
}
}
return slow;
}
}
class Solution {
public int search(int[] nums, int target) {
int len = nums.length;
int left = 0,right = len-1;
//题目已经说明有序
while(left<=right){
//防溢出
int mid = left+(right-left) / 2;
//mid小于target表示目标值可能在右边
if(nums[mid]<target){
left = mid + 1;
}else if(nums[mid]>target){
right = mid-1;
}else{
return mid;
}
}
return -1;
}
}
class Solution {
//双指针,关键点在于,某负数平方后可能会大于某正数平方
public int[] sortedSquares(int[] nums) {
int len = nums.length;
int left = 0,right = len-1;
int[] res = new int[len];
int index = 0;
for(int i = len-1;i>=0;i--){
if(nums[left]*nums[left] <= nums[right]*nums[right]){
res[i] = nums[right]*nums[right];
right--;
}else{
res[i] = nums[left]*nums[left];
left++;
}
}
return res;
}
}
class Solution {
//滑动窗口
public int minSubArrayLen(int target, int[] nums) {
int res = Integer.MAX_VALUE;
int len = nums.length;
int left = 0;
int sum = 0;
for(int right = 0;right<len;right++){
sum += nums[right];
while(sum >= target){
//计算长度
res = Math.min(res,right-left+1);
sum -= nums[left++];
}
}
return res==Integer.MAX_VALUE ? 0 : res;
}
}
今日记录:
明天期末考,今天没有新知识的补充