[剑指Offer]41 和为S的两个数字 VS 和为S的连续正数序列 Leetcode T1 Two Sum Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that each input would have exactly one solution, and you may not use the s…
剑指Offer 面试题45:圆圈中最后剩下的数字(约瑟夫环问题) 原书题目:0, 1, - , n-1 这n个数字排成一个圈圈,从数字0开始每次从圆圏里删除第m个数字.求出这个圈圈里剩下的最后一个数字. 牛客网改编:孩子们的游戏(圆圈中最后剩下的数) 提交网址: http://www.nowcoder.com/practice/f78a359491e64a50bce2d89cff857eb6?tpId=13&tqId=11199 参与人数:1699  时间限制:1秒 空间限制:32768K 本题…
剑指Offer - 九度1352 - 和为S的两个数字2014-02-05 18:15 题目描述: 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输入: 每个测试案例包括两行: 第一行包含一个整数n和k,n表示数组中的元素个数,k表示两数之和.其中1 <= n <= 10^6,k为int 第二行包含n个整数,每个数组均为int类型. 输出: 对应每个测试案例,输出两个数,小的先输出.如果找不到,则输出“-1 -…
[面试题041]和为s的两个数字VS和为s的连续正数序列 题目一:     输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,输出任意一对即可.   思路一:     现在数组中固定一个数字,再依次判断数组中其他的n-1个数字与它的和是不是等于s, ——时间复杂度O(n)   思路二:     在数组中选择两个数字,如果他们的和等于s那么就找到了,     如果小于s呢,显然我们希望和更大一些,由于数组有序,可以考虑较小数字的后面的数字.因为…
题目: 输出所有和为S的连续正数序列.序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序 思路: small代表序列最小数字,large代表序列最大数字.初始化small为1,large为2. 如果序列当前和curSum大于要找的数s,则small往前移:如果序列当前和小于s,则large往前移.当然每次要更新curSum. 注意的是当curSum等于s时,要更新large 注意:有循环的,要注意循环内的各个分支,不要出现死循环.(连续两题了) 代码: class Solution {…
PS:在前几天的面试中,被问到了这个题.然而当时只能用最低效的方法来解. 问题描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2.如果不存在则输出0. 思路1: 低效的做法:直接用哈稀表来存储<key, value>,并找出出现次数value大于等于一半的那个key. 代码: import java.util.Map; import java.uti…
一 题目:旋转数组中的最小数字 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1. 这道题最直观的解法并不难,从头到尾遍历数组一次,我们就能找出最小的元素.这种思路的时间复杂度显然是O(n).但是这个思路没有利用输入的旋转数组的特性,肯定达不到面试官的要求. 我们注意到旋转之后的数组实际上可以划分为两个排序的子数组,而且前面的子数组…
一.题目 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 二.思路 数列满足递增,设两个头尾两个指针i和j,若ai + aj > sum,aj肯定不是答案之一(前面已得出 i 前面的数已是不可能),j --: 若ai + aj < sum,ai肯定不是答案之一(前面已得出 j 后面的数已是不可能),i ++: 若ai + aj == sum,就是答案(相差越远乘积越小). 三.代码 /*数列满足递增,设两个头尾两…
两种方法都类似于快排的变形. #include <iostream> #include <string> using namespace std; bool FindNumbersWithSum(int data[],int length,int sum,int *num1,int *num2) { bool found=false; ||num1==NULL||num2==NULL) { return found; } ; ; while(ahead>behind) { l…
  题目描述:   输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的.   输出描述:   对应每个测试案例,输出两个数,小的先输出.   解题思路:   对于本题,比上一题简单一些.看到题目,我们的第一感觉是暴力解法,即先在数组中固定一个数字,然后依次判断数组中其他数字与它的和是不是等于S.这显然复杂度为O(n^2).   进一步分析,类似于上一题的思路,我们可以使用双指针解法.我们定义两个指针low和high,lo…