package leetcode;

import edu.princeton.cs.algs4.Cycle;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.function.Consumer;

public class FirstDay {

public static void main(String[] args) {
int[][] i = findContinuousSequence(15);
Arrays.stream(i).forEach(new Consumer<int[]>() {
@Override
public void accept(int[] ints) {
Arrays.stream(ints).forEach(i->System.out.println(i));
System.out.println("______________");
}
});
}

/**
* 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。
* 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
*/
public static int[][] findContinuousSequence(int target) {
List<int[]> result = new ArrayList<>();
if (target == 0 || target == 1 || target == 2) {
return new int[0][0];
}
CycleQueun cq = new CycleQueun();
int mid =target/2+1;
for (int i = mid; i >0 ; i--) {
int m = cq.addQ(i);
if(m == target){
int[] resu= cq.getQ();
result.add(resu);
}
if(m>target){
int sum = cq.removeQ();
if(m == target){
int[] resu= cq.getQ();
result.add(resu);
}
}
}
int[][] results = new int[result.size()][];
for (int i = 0; i <result.size() ; i++) {
results[i]=result.get(i);
}
return revse(results);
}
public static int[][] revse(int[][] objs){
for (int i = 0 ,j = objs.length-1; i<j; i++,j--) {
int[] Oi = objs[i];
int[] Oj = objs[j];
objs[i] = Oj;
objs[j] = Oi;
}
return objs;
}
static class CycleQueun{
private int sum;
private List<Integer> q = new LinkedList<>();
public int addQ(int a){
sum += a;
q.add(a);
return sum;
}
public int removeQ(){
int i = q.get(0);
sum -= i;
q.remove(0);
return sum;
}
public int[] getQ(){
int[] result = new int[q.size()];
for (int i = 0; i <q.size() ; i++) {
result[i]=q.get(i);
}
for (int i = 0 ,j = result.length-1; i<j; i++,j--) {
int Oi = result[i];
int Oj = result[j];
result[i] = Oj;
result[j] = Oi;
}
return result;
}
}
}

//优化版本
class Solution {
    public int[][] findContinuousSequence(int target) {
        List<int[]> result = new ArrayList<>();
        int mid = target/2+1;
        int i =1, j =1;
        int sum = 0;
        while(j<=mid){
            sum = (i+j)*(j-i+1)/2;
            if(sum == target){
                int[] res = new int[j-i+1];
                for (int k = 0; k <= j-i; k++) {
                    res[k] = i+k;
                }
                i++;j++;
                result.add(res);
            }
            if(sum < target){
                j++;
            }
            if(sum>target){
                i++;
            }
        }
        int[][] results = new int[result.size()][];
        for (int z= 0; z <result.size() ; z++) {
            results[z]=result.get(z);
        }
        return results;
    }
}

输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)的更多相关文章

  1. 算法:输入一个链表,输出该链表中倒数第k个结点。

    算法:输入一个链表,输出该链表中倒数第k个结点.<剑指offer> 思路加到注释里面了: 1:两个if判断是否返回值为空,首个为空,没有第k个值: 2:for循环找到倒数第k个值,返回为a ...

  2. 编写一个C语言函数,要求输入一个url,输出该url是首页、目录页或者其他url

    编写一个C语言函数,要求输入一个url,输出该url是首页.目录页或者其他url 首页.目录页或者其他url 如下形式叫做首页: militia.info/ www.apcnc.com.cn/ htt ...

  3. 【剑指offer】输入一个链表,输出该链表中倒数第k个结点。

    一.题目: 输入一个链表,输出该链表中倒数第k个结点. 二.思路: 用两个指针p1和p2,p2先跑k步,然后p1和p2同时跑,p2跑到头p1所在的位置就是倒数第k个节点.很简单吧?简单你也想不到,想到 ...

  4. 剑指offer11:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。(进制转换,补码反码)

    1. 题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 2. 思路和方法 使用移位(<<)和 “| & !”操作来实现.1的二进制是:前面都是0,最后一位 ...

  5. 剑指offer14:输入一个链表,输出该链表中倒数第k个结点。

    1. 题目描述 输入一个链表,输出该链表中倒数第k个结点. 2. 思路和方法 可以用两个指针,一个指针遍历到第k个结点的时候,第二个指针再走到第一个节点,然后两个指针的距离始终保持k-1.这样,当第一 ...

  6. 剑指Offer-14:输入一个链表,输出该链表中倒数第k个结点。

    题目描述: 输入一个链表,输出该链表中倒数第k个结点.例如有一个链表有六个节点1,2,3,4,5,6.则它的倒数第二个节点为5 节点定义如下: public class ListNode { int ...

  7. Java基础周测题,输入一个整数,输出所有能整除该整数的结果:

    需求说明: 输入一个整数,输出所有能整除该整数的结果: 实现代码: package demo; import java.util.Scanner; public class test1 { publi ...

  8. [java]输入一个算术表达式输出结果

    动手有益. 输入一个表达式,没有括号,数字小于0-9之间,输出计算结果,所有的中间结果化为整形.例如:  输入:3+8×2/9-2  输出:2 /** * input a calculate stri ...

  9. python输入一个字符串,输出翻转后的字符串(翻转字符串)

    题目:输出一个字符串,输出翻转后的字符串.例如:输入字符串a123,输出321a. 方法一:使用列表的reverse方法 string=input('请输入一个字符串:') lst=list(stri ...

随机推荐

  1. C语言中 EXIT_FAILURE和EXIT_SUCCESS

    1.C语言中 宏EXIT_FAILURE和EXIT_SUCCESS定义在头文件stdlib.h中,是一个符号常量,定义如下: #define EXIT_FAILURE 1 #define EXIT_S ...

  2. 【GDKOI2014】JZOJ2020年8月13日提高组T4 内存分配

    [GDKOI2014]JZOJ2020年8月13日提高组T4 内存分配 题目 Description Input Output 输出m行,每行一个整数,代表输入中每次程序变化后系统所需要的空闲内存单位 ...

  3. MongoDB 分片集群配置

    本文测试环境为 CentOS 7 和 MongoDB 最新版 (4.0.12) 使用 root 操作 (实际操作中使用非 root 账户启动报错) 零.服务器分配 服务器 102 服务器 103 服务 ...

  4. SpringCloud 源码系列(3)—— 注册中心 Eureka(下)

    十一.Eureka Server 集群 在实际的生产环境中,可能有几十个或者几百个的微服务实例,Eureka Server 承担了非常高的负载,而且为了保证注册中心高可用,一般都要部署成集群的,下面就 ...

  5. 老猿学5G:融合计费场景的离线计费会话的Nchf_OfflineOnlyCharging_Create创建操作

    ☞ ░ 前往老猿Python博文目录 ░ 一.Nchf_OfflineOnlyCharging_Create消息交互流程 Nchf_OfflineOnlyCharging_Create服务化操作请求是 ...

  6. 第3.6节 Python字符串基础知识

    一. 引言 前面第二章已经接单介绍了字符串,本来计划讲完列表解析和字典解析再来精讲字符串的内容,但发现要讲列表解析和字典解析需要介绍迭代器和生成器,这个概念比较复杂,老猿还需要复习和验证一下才能完全掌 ...

  7. 第14.9节 Python中使用urllib.request+BeautifulSoup获取url访问的基本信息

    利用urllib.request读取url文档的内容并使用BeautifulSoup解析后,可以通过一些基本的BeautifulSoup对象输出html文档的基本信息.以博文<第14.6节 使用 ...

  8. Jemter环境搭建

    Jemter环境搭建 步骤一:安装Jmeter 1.下载Jmeter,官网地址:http://jmeter.apache.org/download_jmeter.cgi 2.解压Jmeter安装包,J ...

  9. LeetCode初级算法之数组:350 两个数组的交集 II

    两个数组的交集 II 题目地址:https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/ 给定两个数组,编写一个函数来计算它们的交 ...

  10. https中间人攻击

    攻击过程: 服务器向客户端发送公钥. 攻击者截获公钥,保留在自己手上. 然后攻击者自己生成一个[伪造的]公钥,发给客户端. 客户端收到伪造的公钥后,生成加密hash值发给服务器. 攻击者获得加密has ...