题目一

输入一个递增的数组和一个数字,在数组中查找2个数字,是他们的和正好为S,如果有多对的和为S,则输出任意一对即可。

题解

关键信息是数组有序。初始化i,j指向第一个和第二个数,与S比较,若小了,--j,若大了,++i。舍弃掉的元素表示它再也不能和别的数相加等于目标数了,充分利用了有序性。时间复杂度O(n)。

代码

import java.util.ArrayList;

public class Main {
public static void main(String args[]) {
int[] arr= {1,2,4,7,11,15};
int sum=15;
ArrayList<Integer> ansList=findNumbersWithSum(arr,sum);
if(ansList!=null) {
System.out.println(ansList);
}
else {
System.out.println("none");
} } public static ArrayList<Integer> findNumbersWithSum(int [] array,int sum) {
if(array.length<2) {
return null;
}
int i=0;
int j=array.length-1;
while(i<j) {
if(array[i]+array[j]==sum) {
break;
}
else if(array[i]+array[j]<sum) {
++i;
}
else {
--j;
}
}
if(i!=j) {
ArrayList<Integer> list=new ArrayList<>();
list.add(array[i]);
list.add(array[j]);
return list;
}
else {
return null;
}
}
}

题目二

输入一个正数s,打印出所有和为s的连续正数序列(至少包含2个数。

题解

  • 利用题目一的思路,只不过注意本题是连续个数>=2个数即可。初始化num1=1,num2=2,num1代表较小的数。和目标和比较,若大了++num2,等于在和上+了num2;若小了++num1,等于在和上-了num1。
  • 注意终止条件是num1<(1+s)/2。
  • 自己算的时间复杂度应该是O(n^2)。

代码

import java.util.ArrayList;

public class Main {
public static void main(String args[]) {
int sum=15;
ArrayList<ArrayList<Integer>> list=findContinuousSequence(sum);
if(list!=null) {
for(ArrayList<Integer> seq:list) {
for(int num:seq) {
System.out.print(num);
}
System.out.println("\n");
}
}
else {
System.out.print("null");
}
} public static ArrayList<ArrayList<Integer>> findContinuousSequence(int sum) {
if(sum<3) {
return null;
} int i=1;
int j=2;
int s=i+j;
ArrayList<ArrayList<Integer>> sequenceList=new ArrayList<>();
while(i<(1+sum)/2) {//
if(s==sum) {
sequenceList.add(getAnsList(i,j));
++j;
s+=j;
}
else if(s<sum) {
++j;
s+=j;
}
else {
s-=i;//注意顺序
++i;//
}
}
return sequenceList;
} public static ArrayList<Integer> getAnsList(int i,int j){
ArrayList<Integer> list=new ArrayList<>();
for(int num=i;num<=j;++num) {
list.add(num);
}
return list;
}
}

[剑指Offer]57-和为s的数字的更多相关文章

  1. 剑指 Offer 57 - II. 和为s的连续正数序列 + 双指针 + 数论

    剑指 Offer 57 - II. 和为s的连续正数序列 Offer_57_2 题目描述 方法一:暴力枚举 package com.walegarrett.offer; /** * @Author W ...

  2. 剑指 Offer 57. 和为s的两个数字 + 二分法 + 双指针

    剑指 Offer 57. 和为s的两个数字 Offer_57 题目详情 使用二分法 package com.walegarrett.offer; /** * @Author WaleGarrett * ...

  3. 力扣 - 剑指 Offer 57. 和为s的两个数字

    题目 剑指 Offer 57. 和为s的两个数字 思路1(哈希表) 这题首先想到的是使用两个for遍历,查找是哪两个相加等于target,但是时间复杂度确实\(O(N^2)\),时间复杂度太高,因此我 ...

  4. 力扣 - 剑指 Offer 57 - II. 和为s的连续正数序列

    题目 剑指 Offer 57 - II. 和为s的连续正数序列 思路1(双指针/滑动窗口) 所谓滑动窗口,就是需要我们从一个序列中找到某些连续的子序列,我们可以使用两个for循环来遍历查找,但是未免效 ...

  5. 剑指Offer:旋转数组的最小数字【11】

    剑指Offer:旋转数组的最小数字[11] 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4 ...

  6. 剑指Offer(三十七):数字在排序数组中出现的次数

    剑指Offer(三十七):数字在排序数组中出现的次数 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.n ...

  7. ⛅剑指 Offer 11. 旋转数组的最小数字

    20207.22 LeetCode 剑指 Offer 11. 旋转数组的最小数字 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小 ...

  8. [剑指 Offer 11. 旋转数组的最小数字]

    [剑指 Offer 11. 旋转数组的最小数字] 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如,数组 [3,4,5, ...

  9. 剑指 Offer 03. 数组中重复的数字

    剑指 Offer 03. 数组中重复的数字 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知 ...

  10. 菜鸟刷题路:剑指 Offer 03. 数组中重复的数字

    剑指 Offer 03. 数组中重复的数字 哈希表/set class Solution { public int findRepeatNumber(int[] nums) { HashSet< ...

随机推荐

  1. Spark基础学习精髓——第一篇

    Spark基础学习精髓 1 Spark与大数据 1.1 大数据基础 1.1.1 大数据特点 存储空间大 数据量大 计算量大 1.1.2 大数据开发通用步骤及其对应的技术 大数据采集->大数据预处 ...

  2. JavaScript学习系列博客_32_JavaScript 包装类

    包装类 - 在JS中为我们提供了三个包装类: String() Boolean() Number() - 通过这三个包装类可以创建基本数据类型的对象 例子: var num = new Number( ...

  3. oracle 将数据库的表复制到另一个数据库表内

    将数据库A中的表sys_role复制到数据库B中在数据库b中的SQL工作表写如下代码: 第一步:建立链接 CREATE database link A //数据库名称CONNECT to text  ...

  4. nova start 虚机的代码流程分析

    nova start 虚机的代码流程分析,以ocata版本为分析基础1.nova api服务接受用户下发的 nova start启动虚机请求其对应的http restfull api接口为post / ...

  5. 也谈基于Web的含工作流项目的一般开发流程

    项目包含的通用模块代码等我有时间一并剥离贡献出来(基于WebSocket的通知引擎,工作流整合模块,自定义表单,基于RBAC权限设计),最近太忙了,Web项目有一段时间没碰,有点生疏的感觉,主要在忙G ...

  6. akka-grpc - 应用案例

    上期说道:http/2还属于一种不算普及的技术协议,可能目前只适合用于内部系统集成,现在开始大面积介入可能为时尚早.不过有些项目需求不等人,需要使用这项技术,所以研究了一下akka-grpc,写了一篇 ...

  7. 使用Arcgis时,在sde空间库常用的相关函数

    一.Oracle库中配置好sde空间库常见的场景 1.在sde库中创建表:community 创建表:community 字段:id(INTEGER), shape(ST_GEOMETRY) 2.往s ...

  8. AQI分析

    A Q I  分 析 1.背景信息 AOI( Air Quality Index),指空气质量指数,用来衡量空气清洁或污染的程度.值越小,表示空气质量越好.近年来,因为环境问题,空气质量也越来越受到人 ...

  9. Pytest的装饰器——parametrize中ids里包含中文,用例标题显示异常如何解决?

    在使用pytest做测试的过程中,经常会用到pytest.mark.parametrize来对批量生成测试用例,比如 @pytest.mark.parametrize( ['a', 'b', 'exp ...

  10. android MVVM(1)用LiveData关联VM 与 V

    1.官方文档 MVVM 官方文档: https://developer.android.com/jetpack/docs/guide ViewModel 文档: https://developer.a ...