秋招前的60天,把握机会

BG:2月底开始找实习,无奈算法薄弱,项目不熟。实习惨败,一转眼到六月份。准备秋招前的两个月的积累。重点强化下算法,害怕自己每天忘记刷题,于是报了卡哥的算法训练营。共计60天,希望自己加油!个人公众号:TccodeT

Day1[6.21]

1.二分查找[易]

2.移除元素[仔细看题呢]

这个题目没做好的话,大概是没有理解题目的意思,我开始就没看懂。我们只需要关注与val值不同的数并放置在数组的前K个位置,其余的数是什么无所谓

法一:双向指针

int i=0,j=n;
while(i<j){
//左指针如果为val,则把右边的数赋值给他,如果右边==val,继续,不等于就left++;很明显的覆盖操作
   if(nums[i]==val){
         nums[i]=nums[j-1];
         j--;
    }else{
         i++;
    }
}
return i;

法二:快慢指针

//这类你追我赶的样子也很巧妙的
for(int r=0;r<n;r++){
	if(nums[r]==val){
		continue;
 	}else{
		nums[l++]=nums[r];
 	}
}

Day2[6.22]

1.有序数组的平方[双指针]

2.长度最小的子数组[滑动窗口]

滑动窗口也是很棒的一种思路哟

 
class Solution {
  public int minSubArrayLen(int s, int[] nums) {
      int n = nums.length;
      if (n == 0) {
          return 0;
      }
      int ans = Integer.MAX_VALUE;
      int start = 0, end = 0;
      int sum = 0;
      //右指针先不断试探
      while (end < n) {
          sum += nums[end];
          //当满足添加时,记录结果,并不断收缩左边界直到再次不满足条件
          while (sum >= s) {
              ans = Math.min(ans, end - start + 1);
              sum -= nums[start];
              start++;
          }
          end++;
      }
      return ans == Integer.MAX_VALUE ? 0 : ans;
  }
 }

补充:我们可以再看一道题目,相信结合起来看对滑动窗口的适用时机会更加的清晰

904水果成篮:. - 力扣(LeetCode)

题目大意就是只能选取两种类型的连续数字,看最多子数组的长度有多少。

滑动窗口:窗口中有限制条件:种类,还是数组和等等,通过这个限制条件来进行收缩,并且前提是——连续

所以:滑动窗口=连续子数组/子串+限制条件

3.螺旋矩阵[固定方法]

学习的是leetcodeK神代码:. - 力扣(LeetCode),真的很清晰。

固定四个参数:top,bottom,left,right

while(true){

沿四个方向进行模拟:

  • 1​.➡️遍历完top++,表示下一次这个方向的时候降低一行[if(top>bottom)退出]

  • 2.⬇️遍历完right--,表示下一次这个方向的时候左移一行[if(right<left)退出]

  • 3.⬅️遍历完bottom--,表示下一次这个方向的时候升高一行[if(top>bottom)退出]

  • 4.⬆️遍历完left++,表示下一次这个方向的时候右移一行[if(right<left)退出]

}

后记:补充一张关于双指针的图,个人感觉非常形象,取自Leetcode某大佬[地址] 

 

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值