算法笔记 DAY2

1.Leetcode 977 . 有序数组的平方

双指针法
按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求按非递减顺序排序。
vector sortedSquares(vector& nums)
  1.return为vector
  2.暴力方法很容易想到但是时间复杂度为O(n+logn)
  3.思考题目 数组是有序的 如果是无序的 这就是中等题
    考虑最大值在两端 不在中间 因此可以考虑是否可以使用双指针
    本题的难度并不是双指针的用法 而是判断什么时候可以用双指针
  4.总结
    在排序时,数组是有序的,极值在两端时,可以考虑双指针。

  1. Leetcode 209 .长度最小的子数组 中等
    给定一个含有 n 个正整数的数组和一个正整数 target 。
    找出该数组中满足其总和大于等于 target 的长度最小的 子数组
    子数组
    [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0

  1.看到数组 一般会考虑到几种常见的解法 双指针(滑动窗口也是双指针的一种) 哈希
排序 分治 动态规划
    一般看上去比较难的题目会优先考虑到动态规划
    此题可以使用dp或双指针解 本次使用双指针
  2.这题的难点在于怎么更新子串的长度,每次满足子串的大小>=target时,更新子串的长度,并且取最短的子串长度。
    子串长度不难想,快指针往后推,慢指针指向开始的索引,满足条件时,记录下子串的长度。

 		subLength = (j - i +1);

    之后思考怎么更新子串的最短长度。于此同时 慢指针向后推进查看是否满足条件,满足条件时,更新子串长度。

		result = result < subLength ? result:subLength;

  3.在更新子串长度时,需要和比记录的长度大的比较才行,如果开始result=0时,则结果一直为0,所以result取最大值。

		int result = INT32_MAX;

  4.总结
    画图思考滑动窗口,或者说指针是怎么移动的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值