代码随想录算法训练营第二天|Leetcode977有序数组的平方、Leetcode209长度最小的子数组

题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/

思路: 双指针法:创建一个新数组,从后接收,nums中较大的平方数

代码:

class Solution977_1 {
    public int[] sortedSquares977_1(int[] nums) {
        int left_index = 0;//左边人所在位置
        int right_index = nums.length-1;//右边人所在位置
        int[] result = new int[nums.length];//我会创建一个和nums一样的数组
        //由于两边的人手中一定有最大的数(平方后)并且我要的是升序,所以我站在最后的位置等待
        int index = nums.length-1;
        //如果只有一个人,接收完这个人的平方数,回家
        if(right_index == 0){
            result[right_index] = nums[right_index]*nums[right_index];
            return result;
        }
        //两个人以上,那我就从后往前走,走到家(-1),接他们中较大的平方
        while(index != -1){
            //先看看这两人平方后是多少
            int left_num = nums[left_index]*nums[left_index];
            int right_num = nums[right_index]*nums[right_index];
            //左边的人更大
            if(left_num >= right_num){
                result[index--] = left_num;//那就要左边这人的喽,然后我往家的方向走--
                left_index ++;//给完我就往中间走(左向中走++)
            }else{
                result[index--] = right_num;//那就要右边这人的喽,然后我往家的方向走--
                right_index --;//给完我就往中间走(右向中走--)
            }
        }
        return result;
    }
}

题目链接:https://leetcode.cn/problems/minimum-size-subarray-sum/

思路:

代码:滑动数组

class Solution209 {
    public int minSubArrayLen209(int target, int[] nums) {
        int left = 0;//车尾
        int sum = 0;//车上人数
        int result = nums.length+1;//随便设个车厢不可能的数
        //right车头
        for (int right = 0; right < nums.length; right++) {
            sum += nums[right];//计算当前车厢人数
            while (sum >= target) {//一旦超过target
                //更新最小车箱数
                result = Math.min(result, right - left + 1);
                //车尾-1,向前进
                sum -= nums[left++];
            }
        }
        return result == nums.length+1 ? 0 : result;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值