剑指offer-第六章面试中的各项能力(和为S的两个数字VS和为S的连续正序列)
题目1:输入一个排序数组和一个值S,输出数组中两个数的和为S的任意一对数。
思路:分别用两个指针指向数组的头start和尾end。如果两个数字之和等于S输出。如果打于,则end--,再次相加。因此循环条件就是start<end.
题目2:输入正整数S,打印出所有和为S的的正整数序列。例如:15的正整数序列为:{1,2,3,4,5},{3,4,5,6},{7,8}
思路:首先我们确定的是,这个整数序列必须至少有两个数字。可以定义一个头指针start=1,尾指针 end=2。start是要小于
(S+1)/2,如果start和end的和小于s,那么添加一个end++,如果添加后等于s,打印出来。如果start加上end大于s.
那么去掉当前的start,start++.
java代码:
//题目1:输入一个排序数组和一个值S,输出数组中两个数的和为S的任意一对数。
//题目2:输入正整数S,打印出所有和为S的的正整数序列。例如:15的正整数序列为:{1,2,3,4,5},{3,4,5,6},{7,8}
//2的思路:首先我们确定的是,这个整数序列必须至少有两个数字。可以定义一个头指针start=1,尾指针 end=2。start是要小于
//(S+1)/2,如果start和end的和小于s,那么添加一个end++,如果添加后等于s,打印出来。如果start加上end大于s.
//那么去掉当前的start,start++. public class SumEqualsS {
public void sumEqualsS(int[] a,int s){
if(a==null||a.length<2)
return;
int start=0;//指向数组的头,只向后移
int end=a.length-1;//指向数组的尾部,只向前移
while(start<end){
if(a[start]+a[end]==s){
System.out.println(a[start]+" "+a[end]);
break;
}
if(a[start]+a[end]>s)
end--;
else
start++;
}
}
public void printAllSequence(int s){
if(s<3)
return;
int start=1;//指向序列的开始
int end=2;//指向序列的结束
int middle=(s+1)/2;//小的数字不能超过的中值。
int sum=start+end;
while(start<middle){
if(sum==s)
printS(start,end);
if(sum>s&&start<middle){
sum-=start;
start++;
}
else{
end++;
sum+=end;
}
}
}
public void printS(int start, int end) {
for(int i=start;i<=end;i++)
System.out.print(i+" ");
System.out.println(); }
public static void main(String[] args){
int[] a={1,3,4,5,6,7,9};
int s=9;
SumEqualsS ss=new SumEqualsS();
ss.sumEqualsS(a, s);
ss.printAllSequence(15); }
}
剑指offer-第六章面试中的各项能力(和为S的两个数字VS和为S的连续正序列)的更多相关文章
- 剑指offer-第六章面试中的各项能力(扑克牌中的顺子)
//扑克牌的顺子 //题目:在一个扑克牌中随机的抽5张牌,看是不是顺子.大小王为0,A为1,J为11,Q为12,K为13.其他数字为自己本身. //思路:大小王可以代表任意一个数字,因此我们在看是不是 ...
- 剑指offer-第六章面试中的各项能力(二叉树的深度)
题目:1:输入一个二叉树,求二叉树的深度.从根节点开始最长的路径. 思路:我们可以考虑用递归,求最长的路径实际上就是求根节点的左右子树中较长的一个然后再加上1. 题目2:输入一颗二叉树的根节点,判断该 ...
- 剑指offer-第六章面试中的各项能力(圆圈中剩下的最后数字)
import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util ...
- 剑指offer-第六章面试中的各项能力(n个骰子的点数)
题目:把n个骰子扔到地上,骰子之和为S,输入n,打印s所有可能的值出现的概率. 思路:由于骰子的点数为1~6,因此n个骰子之和的大小为n~6n之间.故可以定义一个数组来存放这6n-n+1个数出现的次数 ...
- 剑指offer-第六章面试中的各项能力(数组中只出现一次的数字)
题目:输入一个数组,该数组中有两个只出现一次的数字,其他的数字都出现两次,输出出只出现一次的数字. 思路:首先,我们可以将这个数组分成两份,一份里面放一个只出现一次的数字.那么我们该怎么分呢?将整个数 ...
- 剑指offer-第六章面试中的各项能力(数字在排序数组中出现的次数)
题目:统计一个数字在排序数组中出现的次数. 思路:采用二分查找,找到该数字在数组中第一次出现的位置,然后再找到组后一个出现的位置.两者做减法运算再加1.时间复杂度为O(logn) Java代码: // ...
- 剑指offer-第六章面试中的各项能力之总结
- 剑指offer-第六章面试中的各项能力(不用加减乘除做加法)
//不用加减乘除四则运算,来做加法 //题目:两个数做加法. //思路:用二进制的位运算的思路.第一步:首先两数相加考虑进位.可以用异或. //第二步:两个数相加只考虑进位,并将最后的结果左移.第三步 ...
- 剑指offer-第六章面试中的各项能力(翻转单词的顺序VS左旋转字符串)
//题目1:翻转单词顺序例如“Hello world!”翻转后为world! Hello. //思路:首先翻转整个字符串,然后再分别翻转每个单词. //题目2:左旋转字符串,是将字符串的前面几个(n) ...
随机推荐
- 验证环境中的program为什么必须是automatic
最近在项目中,发现验证环境中的顶层的program(一般将program作为验证环境的入口),都是automatic的. 其实Program默认是static的,那么为什么需要把验证环境做成autom ...
- 详解Linux系统中的文件名和文件种类以及文件权限
Linux文件种类与副文件名 一直强调一个概念,那就是:任何装置在Linux底下都是文件, 不仅如此,连资料沟通的介面也有专属的文件在负责-所以,你会瞭解到,Linux的文件种类真的很多- 除了前面提 ...
- ES6中Json、String、Map、Object之间的转换
/** *字符串转json * */ static stringToJson(data){ return JSON.parse(data); } /** *json转字符串 */ static jso ...
- ()IT 职场经验)一位10年Java工作经验的架构师的经验分享,感觉很受用。
阿里巴巴技术大牛黄勇的经验分享,感觉很受用. 关于IT 职场经验 1. 把技术当成工具 技术这东西,其实一点都不神秘,它只不过是一个工具,用这个工具可以帮助我们解决实际问题,就这么简单. 我们每天在面 ...
- quartz(2) -- 入门案例
第一步:添加jar,maven配置 <!-- quartz --> <dependency> <groupId>org.quartz-scheduler</g ...
- thinkPHP中怎么使用阿里云的sdk
使用阿里云官方给的方法总会报错 Class 'Home\Controller\DefaultProfile' not found 这样是因为namespace的原因,将aliyun sdk 放在con ...
- GPL,BSD,Apache,MIT开源许可协议
在linux环境下学习的多了,这些开源协议也听的见的越来越多,感觉有必要仔细了解一下. 1. BSD 先说BSD是因为它的自由度相对来说是比较大的.BSD全称Berkeley Software Dis ...
- java 类的加载、连接和初始化
JVM和类 调用Java命令运行Java程序时,该命令将会启动一条Java虚拟机进程,不管该Java程序启动了多少条线程,创建了多少个变量,它们都处于该Java虚拟机进程里,共享该JVM进程的内存区. ...
- ECS vs. Kubernetes 类似而又不同
C2Container Service (ECS)和Kubernetes (K8s) 都解决了同样的问题:跨越主机集群管理容器.ECS和Kubernetes之间的斗争让我想起了vi和Emacs之间的编 ...
- Entity Framework 6 Code First 系列:无需修改实体和配置-在MySql中使用和SqlServer一致的并发控制
无需修改实体和配置,在MySql中使用和SqlServer一致的并发控制.修改RowVersion类型不可取,修改为Timestamp更不可行.Sql Server的RowVersion生成一串唯一的 ...