剑指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个栈实现队列 斐波那契数列 旋转数字 矩阵中的路径 机器人的运动范围 剪绳子 ...
随机推荐
- Python Mysql 篇
Python 操作 Mysql 模块的安装 linux: yum install MySQL-python window: http://files.cnblogs.com/files/wupeiqi ...
- SELECT INTO FROM 与 INSERT INTO SELECT区别鉴赏
.INSERT INTO SELECT语句 语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Tabl ...
- webpack +vue开发(2)
我们的loader方式其实可以写成inline的方式 loaders:[ { test:/\.js$/, loader:"babel", exclude:/node_modules ...
- Codeforces Round #226 (Div. 2) B
B. Bear and Strings time limit per test 1 second memory limit per test 256 megabytes input standard ...
- Ubuntu解压命令大全
tar 解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)———————————————.gz解压1:gunz ...
- [js]识别浏览器及版本
var userAgent = navigator.userAgent.toLowerCase();window.jQuery.browser = { version: (userAgent.m ...
- 【EF学习笔记08】----------加载关联表的数据 显式加载
显式加载 讲解之前,先来看一下我们的数据库结构:班级表 学生表 加载从表集合类型 //显示加载 Console.WriteLine("=========查询集合===========&quo ...
- Oracle 查询系统所有用户信息
1.查看所有用户:select * from dba_users; select * from all_users; select * from user_users; 2.查看用户或角色系统 ...
- DataSanp的控制老大-DSServer
DSServer作用:管理DataSnap服务器生命周期.(启动,停止) 一.方法: 1.BroadcastMessage 向所以客户端发送消息,客户端必须已注册通道. 2.BroadcastObje ...
- mongodb账号安全操作
安装服务 mongod --install --serviceName mongodb --storageEngine=mmapv1 --dbpath i:\mongodb\data --journa ...