题目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的连续正序列)的更多相关文章

  1. 剑指offer-第六章面试中的各项能力(扑克牌中的顺子)

    //扑克牌的顺子 //题目:在一个扑克牌中随机的抽5张牌,看是不是顺子.大小王为0,A为1,J为11,Q为12,K为13.其他数字为自己本身. //思路:大小王可以代表任意一个数字,因此我们在看是不是 ...

  2. 剑指offer-第六章面试中的各项能力(二叉树的深度)

    题目:1:输入一个二叉树,求二叉树的深度.从根节点开始最长的路径. 思路:我们可以考虑用递归,求最长的路径实际上就是求根节点的左右子树中较长的一个然后再加上1. 题目2:输入一颗二叉树的根节点,判断该 ...

  3. 剑指offer-第六章面试中的各项能力(圆圈中剩下的最后数字)

    import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util ...

  4. 剑指offer-第六章面试中的各项能力(n个骰子的点数)

    题目:把n个骰子扔到地上,骰子之和为S,输入n,打印s所有可能的值出现的概率. 思路:由于骰子的点数为1~6,因此n个骰子之和的大小为n~6n之间.故可以定义一个数组来存放这6n-n+1个数出现的次数 ...

  5. 剑指offer-第六章面试中的各项能力(数组中只出现一次的数字)

    题目:输入一个数组,该数组中有两个只出现一次的数字,其他的数字都出现两次,输出出只出现一次的数字. 思路:首先,我们可以将这个数组分成两份,一份里面放一个只出现一次的数字.那么我们该怎么分呢?将整个数 ...

  6. 剑指offer-第六章面试中的各项能力(数字在排序数组中出现的次数)

    题目:统计一个数字在排序数组中出现的次数. 思路:采用二分查找,找到该数字在数组中第一次出现的位置,然后再找到组后一个出现的位置.两者做减法运算再加1.时间复杂度为O(logn) Java代码: // ...

  7. 剑指offer-第六章面试中的各项能力之总结

  8. 剑指offer-第六章面试中的各项能力(不用加减乘除做加法)

    //不用加减乘除四则运算,来做加法 //题目:两个数做加法. //思路:用二进制的位运算的思路.第一步:首先两数相加考虑进位.可以用异或. //第二步:两个数相加只考虑进位,并将最后的结果左移.第三步 ...

  9. 剑指offer-第六章面试中的各项能力(翻转单词的顺序VS左旋转字符串)

    //题目1:翻转单词顺序例如“Hello world!”翻转后为world! Hello. //思路:首先翻转整个字符串,然后再分别翻转每个单词. //题目2:左旋转字符串,是将字符串的前面几个(n) ...

随机推荐

  1. CSS流体(自适应)布局下宽度分离原则

    CSS流体(自适应)布局下宽度分离原则 这篇文章发布于 2011年02月28日,星期一,00:48,归类于 css相关. 阅读 73990 次, 今日 5 次 by zhangxinxu from h ...

  2. MySQL数据库表分区功能详解

    1.什么是表分区? mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可以通过my.cnf中的datadir来查看),一张表主要对应着三个文件,一个是frm存放表 ...

  3. 《React-Native系列》3、RN与native交互之Callback、Promise

    接着上一篇<React-Native系列>RN与native交互与数据传递,我们接下来研究另外的两种RN与Native交互的机制 一.Callback机制 首先Calllback是异步的, ...

  4. [算法] 将单链表的每K个节点之间逆序

    题目 给定一个单链表的头结点,实现一个调整单链表的函数,使得每K个节点之间逆序,如果最后不够K个节点一组,则不调整最后几个节点. 解答 使用栈结构 import java.util.Stack; pu ...

  5. Spring_使用 JdbcTemplate和JdbcDaoSupport-代码

    applicationContext.xml <?xml version="1.0" encoding="UTF-8"?><beans xml ...

  6. 低版本C++ string的万能转换,从long string 之间的转换来看看

    string 转 long 那必须是万年atoi(),不过得配合c_str()使用! [plain] view plain copy #include <string> #include  ...

  7. NumPy排序、搜索和计数函数

    NumPy - 排序.搜索和计数函数 NumPy中提供了各种排序相关功能. 这些排序函数实现不同的排序算法,每个排序算法的特征在于执行速度,最坏情况性能,所需的工作空间和算法的稳定性. 下表显示了三种 ...

  8. 【转】XGBoost 与 Boosted Tree

    XGBoost 与 Boosted Tree http://www.52cs.org/?p=429 作者:陈天奇,毕业于上海交通大学ACM班,现就读于华盛顿大学,从事大规模机器学习研究. 注解:tru ...

  9. BZOJ 3698 XWW的难题:有上下界的最大流

    传送门 题意 给你一个 $ n*n $ 的正实数矩阵 $ A $ ,满足XWW性. 称一个 $ n*n $ 的矩阵满足XWW性当且仅当: $ A[n][n] = 0 $ 矩阵中每行的最后一个元素等于该 ...

  10. jquery的50个免费插件

    说不定什么时候用到呢 http://www.admin10000.com/document/4711.html