Day2 算法训练营

977.有序数组的平方

暴力解法

  • STL:sort函数
    • 容器的排序
      vector vec;
      sort(vec.begin(), vec.end());
    • 数组排序
      int nums[10] = {1,2,3,4};
      sort(nums, nums+3) 排前两个数
    • 时间复杂度
      快速排序,时间复杂度为O(nlogn)

双指针法

  • 定义变量
    i:指向老数组起始位置
    j:指向老数组终止位置
    k:指向新数组的终止位置
    result:定义一个新数组,用来保存结果
  • 循环逻辑
    数组是有序的,所以最大值肯定是在数组的两端产生。
    写一个循环,循环条件……
    第一次循环,比较两端i,j数据平方大小,然后指针移位
    第二次循环,同第一次循环
    得出循环条件是当i>=j时循环终止
  • 写法精进
    可以将两句话:result[k] = ***,k–;
    合并成一句话:result[k–] = **

暴力解法

双层for循环,一层循环控制子序列起始位置,一层循环控制终止位置,然后用一个值len来记录每次的符合条件的长度

第一次循环,比较nums[i]和target大小,如果大于,则
内层循环:i不变计算i到j区间的总值大小,然后和target比较,如果小于,则j往后移动一位。如果大于记录下此时的长度

滑动窗口

滑动窗口是双指针的一种

滑动窗口和暴力解法最重要的区别就是:如何移动起始位置i

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值