剑指offer题目41-50
面试题41:和为S的连续正整数序列
import java.util.ArrayList;
public class Solution {
public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {
ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
int start = 1;
int end = 2;
int mid = (1 + sum)/2;
int curSum = start + end;
while(start < mid){
if(curSum == sum){
ArrayList<Integer> list = makeList(start,end);
res.add(list);
}
while(curSum > sum && start < mid){
curSum -= start;
start++;
if(curSum == sum){
ArrayList<Integer> list = makeList(start,end);
res.add(list);
}
}
end ++;
curSum += end;
}
return res;
}
public ArrayList<Integer> makeList(int start , int end){
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i=start;i<=end;i++){
list.add(i);
}
return list;
}
}
面试题41:递增序列中乘积最小的和为S的两个数
import java.util.ArrayList;
import java.util.HashMap;
public class Solution {
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
ArrayList<Integer> res = new ArrayList<Integer>();
if(array == null && array.length <2 ) return res;
int first = 0;
int second = array.length-1;
int len = array.length;
int mul = Integer.MAX_VALUE;
int retFirst = 0;
int retSecond = 0 ;
HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
for(int i=0;i<array.length;i++){
map.put(array[i],i);
}
while(first<second && first<len-1 && second<len){
if(map.get(sum - array[first])!=null && map.get(sum - array[first])>first){
second = map.get(sum - array[first]);
int tmpMul = array[first] * array[second];
if(tmpMul < mul){
mul = tmpMul;
retFirst = array[first];
retSecond = array[second];
}
}
first++;
}
if(retFirst>0 && retSecond>0){
res.add(retFirst);
res.add(retSecond);
}
return res;
}
}
面试题42:左旋转字符串
public class Solution {
public String LeftRotateString(String str,int n) {
if(str == null || n>str.length()) return "";
char[] arr = str.toCharArray();
reverse(arr,0,n-1);
reverse(arr,n,arr.length-1);
reverse(arr,0,arr.length-1);
StringBuilder strBuilder = new StringBuilder();
for(int i=0;i<arr.length;i++){
strBuilder.append(arr[i]);
}
return strBuilder.toString();
}
public void reverse(char[] arr,int start,int end){
while(start < end){
char tmp = arr[end];
arr[end--] = arr[start];
arr[start++] = tmp;
}
}
}
面试题42:翻转单词序列
public class Solution {
public String ReverseSentence(String str) {
if (str == null || str.length() == 0 || str.trim().equals("")) {
return str;
}
char[] arr = str.toCharArray();
reverse(arr,0,arr.length-1);
int start = 0,end=0;
for(int i=0;i<arr.length;i++){
if(arr[i] != ' '){
arr[end++] = arr[i];
}else if(i>0 && arr[i-1] != ' '){
reverse(arr,start,end-1);
arr[end++] = ' ';
start = end;
}
}
reverse(arr,start,end-1);
return new String(arr,0,end>0&&arr[end-1]==' ' ? end-1:end);
}
public void reverse(char[] arr,int start,int end){
while(start < end){
char tmp = arr[end];
arr[end--] = arr[start];
arr[start++] = tmp;
}
}
}
面试题44:扑克牌的顺子
import java.util.Arrays;
public class Solution {
public boolean isContinuous(int [] numbers) {
if(numbers.length==0) return false;
if(numbers.length==1) return true;
Arrays.sort(numbers);
int i=0;
int zeroCnt = 0;
while(numbers[i] == 0){
zeroCnt++;
i++;
}
int notConCnt = 0;
while(i<numbers.length){
if(i>0 && numbers[i] == numbers[i-1]) return false;
if(i>0 && numbers[i] != numbers[i-1] && numbers[i-1]!=0){
notConCnt += (numbers[i] - numbers[i-1] - 1);
}
i++;
}
if(zeroCnt >= notConCnt || notConCnt == 0) return true;
else return false;
}
}
面试题45:约瑟夫环
public class Solution {
public int LastRemaining_Solution(int n, int m) {
if(n==0) return -1;
int i=0,r=0;
for(i=2;i<=n;i++){
r = (r + m)%i;
}
return r;
}
}
面试题46:不用循环和判断语句求从1到n的和
public class Solution {
public int Sum_Solution(int n) {
int res = n;
boolean ans = (n>0) && ((res = Sum_Solution(n-1) + res)>0) ;
return res;
}
}
面试题47:不用加减乘除做加法
public class Solution {
public int Add(int num1,int num2) {
int sum ,carry;
do{
sum = num1 ^ num2;
carry = (num1 & num2)<<1;
num1 = sum;
num2 = carry;
}while(num2 != 0);
return num1;
}
}
面试题49:把字符串转成整数
public class Solution {
public int StrToInt(String str) {
if(str==null || str.length() == 0) return 0;
char[] arr = str.toCharArray();
boolean sign = true;
int i=0;
int res = 0;
while(arr[i] == ' '){i++;}
if(arr[i] == '+') {sign = true;i++;}
else if(arr[i] == '-'){sign = false;i++;}
for(;i<arr.length;i++){
if(arr[i]<'0' || arr[i]>'9'){return 0;}
int digit = arr[i] - '0';
if(sign == true && (Integer.MAX_VALUE - digit) / 10 < res){
return Integer.MAX_VALUE;
}else if(sign==false &&(Integer.MIN_VALUE + digit)/10>res){
return Integer.MIN_VALUE;
}
res =res*10 + (sign==true ? digit:-digit);
}
return res;
}
}
剑指offer题目41-50的更多相关文章
- 【剑指Offer】剑指offer题目汇总
本文为<剑指Offer>刷题笔记的总结篇,花了两个多月的时间,将牛客网上<剑指Offer>的66道题刷了一遍,以博客的形式整理了一遍,这66道题属于相对基础的算法题目,对于 ...
- 代码题 — 剑指offer题目、总结
剑指offer题目总结: https://www.cnblogs.com/dingxiaoqiang/category/1117681.html 版权归作者所有,任何形式转载请联系作者.作者:马孔多 ...
- 剑指offer题目系列三(链表相关题目)
本篇延续上一篇剑指offer题目系列二,介绍<剑指offer>第二版中的四个题目:O(1)时间内删除链表结点.链表中倒数第k个结点.反转链表.合并两个排序的链表.同样,这些题目并非严格按照 ...
- 再来五道剑指offer题目
再来五道剑指offer题目 6.旋转数组的最小数字 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4, ...
- 剑指 Offer 题目汇总索引
剑指 Offer 总目录:(共50道大题) 1. 赋值运算符函数(或应说复制拷贝函数问题) 2. 实现 Singleton 模式 (C#) 3.二维数组中的查找 4.替换空格 ...
- 剑指offer题目java实现
Problem2:实现Singleton模式 题目描述:设计一个类,我们只能生成该类的一个实例 package Problem2; public class SingletonClass { /* * ...
- 牛客网上的剑指offer题目
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 题目:请实现一个函数,将一 ...
- 剑指offer题目系列二
本篇延续上一篇,介绍<剑指offer>第二版中的四个题目:从尾到头打印链表.用两个栈实现队列.旋转数组的最小数字.二进制中1的个数. 5.从尾到头打印链表 题目:输入一个链表的头结点,从尾 ...
- 剑指offer题目系列一
本篇介绍<剑指offer>第二版中的四个题目:找出数组中重复的数字.二维数组中的查找.替换字符串中的空格.计算斐波那契数列第n项. 这些题目并非严格按照书中的顺序展示的,而是按自己学习的顺 ...
- 剑指offer题目解答合集(C++版)
数组中重复的数字 二维数组中查找 字符串 替换空格 二叉树的编码和解码 从尾到头打印链表 重建二叉树 二叉树的下一个节点 2个栈实现队列 斐波那契数列 旋转数字 矩阵中的路径 机器人的运动范围 剪绳子 ...
随机推荐
- Asp.net中WebForm 与 MVC的架构区别
ASP.NET Webform 后台代码(behind code) 这种behind code 模式有5个问题,我们用MVC的设计思想来分别解决这些问题 1.基于视图的方案来解决基于行为的需求 从上图 ...
- Hadoop学习11--Ha集群配置启动
理论知识: http://www.tuicool.com/articles/jameeqm 这篇文章讲的非常详细了: http://www.tuicool.com/articles/jameeqm 以 ...
- Datagridview 添加checkbox列,并判断Datagridview 中的checkbox列是否被选中
Solution1://In Fill DataGridViewEvent : DataGridViewCheckBoxColumn ChCol = new DataGridViewCheckBoxC ...
- 动态布局--动态修改RelativeLayout宽高的方法
本文实例讲述了Android编程动态修改RelativeLayout宽高的方法.分享给大家供大家参考,具体如下: 我们经常会动态修改RelativeLayout的宽高,这样的代码,比较简单,就是修改R ...
- union select
union select 联合查询 ,即合并(取交集,结果中没有重复行)前后两个查询:前提是前后查询视图必须拥有相同数量的列,列也必需拥有相同的数据类型. union all select 则取的是两 ...
- 通过DOM节点操作来获取表单信息
这是之前突发奇想地用dom节点的关系来操作表单的故事.. 事情的经过是这样的,大概就是一个平台注册后有留言功能,管理员登录之后可以对这些留言进行回复.这个页面呢,就是通过foreach获取到数据库里的 ...
- Flex帮助文档ASDoc
首先,我们一般会对类文件的类和成员以及成员函数做一些解析性说明.那么这个解析性说明应该怎么写呢?如果想给指定的类.成员属性.成员函数加上注释,可以在这些声明的顶部按照下面的格式属性注释: (在flas ...
- PaintCode调研
1. 背景 PaintCode是一款面向iOS和Mac应用开发者及设计师的矢量图形可视化开发工具.它可以让设计师把设计好的psd文件直接导入该工具,然后生成用Quartz 2D 产生的object ...
- ubuntu 12.04 设置代理
一. Ubuntu 12.04 apt-get 代理设置 由于公司通过代理上网,firefox的代理设置很容易就搞定了,但是通过apt-get安装软件还是不行,于是,查阅了很多资料,最多的方法就是网上 ...
- Android自学笔记:环境配置
Info: 自学Android之旅第二篇,初步学习会有疏漏,以后我会不断修改补全,直到完美. 2014-10-09:初版 2014-11-12: 重新配置了一台电脑,更新在学习robotium过程中, ...