剑指 Offer 57 - II

第一次做滑动窗口,看的题解做的,其实本质还是双指针;
思想就是下面的图,主要还是里面有一点细节,比如循环终止条件、数组添加元素、集合转化为数组
在这里插入图片描述

public int[][] findContinuousSequence(int target) {
        /** 定义一个集合用来存放结果数组*/
        ArrayList<int[]> list = new ArrayList<>();

        /** 定义两个指针,从头开始,因为题目要求是至少包含两个数,就一个是1,一个是2*/
        int left = 1;
        int right = 2;
        int sum = 3;


        /** 两个指针的元素相加,如果小于target,就将右指针向后移,如果大于target,就将左指针向后移*/
        /** 如果相加后相等,就将两个指针中间(包括两个指针)的元素存入数组中,再将数组存入集合中
         * 之后不要忘了将左指针向后移动*/
        /** 跳出循环的条件为left不等于right*/
        while(left < right){
            if(sum < target){
                right++;
                sum = sum + right;
            }else if (sum > target){
                sum = sum - left;
                left++;
            }else if (sum == target){
                int[] arr = new int[right - left + 1];
                for (int i = left; i <= right; i++){
                    arr[i-left] = i;
                }
                list.add(arr);

                sum = sum - left;
                left++;
            }
        }

        int[][] ints = list.toArray(new int[0][]);
        return ints;
    }
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值