和为S的连续序列

和为S的连续序列

序列长度范围是2~length-2,遍历长度,并且求此长度时序列的均值,然年根据均值和序列数量展开序列

  • 注意:需要判断左边是否越界,e.g.[-1,0,1,2,3,4]
import java.util.ArrayList;
public class Solution {
    //自己发明的方法
        public ArrayList<ArrayList<Integer>> FindContinuousSequence(int sum) {
                ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
                if (sum < 2)
                        return list;
                //mid均值
                double mid = 0;
            //可能的数量是2~sum-1个
                for (int i = sum-1; i >= 2; i--) {
                    //当连续数列个数是i时,mid均值
                        mid = (double)sum / i;
                        
                    //为了保证不越界,保证不出现负数,左边必须大于0
                    //[-1,0,1,2,3,4]
                        if (mid *2 < i)
                                continue;
                    //均值是0.5倍数,且个数是偶数个,或者,均值整数且奇数个,找到了
                    //我他妈怎么想出的这方法!牛逼!
                        if ((mid % 1 == 0.5 && i % 2 == 0) || (mid % 1 == 0 && i % 2 == 1)){
                            System.out.println(mid%1);

                                list.add(help(mid, i));
                        }
                }
                return list;
        }
        //添加均值为mid的i个数
        private ArrayList<Integer> help(double mid, int i) {
                ArrayList<Integer> l = new ArrayList<Integer>();
                int c = (int) Math.ceil(mid - i / 2);
                for (int j = c; j < i+c; j++) {
                    System.out.println(j);
                        l.add(j);
                }
                return l;
        }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值