剑指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个栈实现队列 斐波那契数列 旋转数字 矩阵中的路径 机器人的运动范围 剪绳子 ...
随机推荐
- gauss消元
题意描述:有n个星球,m台望远镜.每台望远镜有一个开始时间和结束时间,但只给出了月.日的信息,没有给出年份,每台望远镜记录了它所观测的星球上发生的各类事件的次数.每类事件持续的时间是恒定的,且不会超过 ...
- struts1 Demo
每次都会忘记一些东西,反复查找原因,其实struts1很简单,可是不去巩固也很容易忘记并且犯错误.这是一个最简单的登录Demo. 1.建立web工程,引入struts1.2包 2.建package:a ...
- WebApi:WebApi的Self Host模式
不用IIS也能執行ASP.NET Web API 转载:http://blog.darkthread.net/post-2013-06-04-self-host-web-api.aspx 在某些情境, ...
- mfc_Demo
内涵图
- CSS3属性transition
CSS3 Transitions 指定过渡 语法: transition: property duration timing-function delay; 参数一: transition-p ...
- jsp与Servlet
- dedecms代码研究二
dedecms代码研究(2)从index开始现在继续,今天讲的主要是dedecms的入口代码.先打开index.PHP看看里面是什么吧.打开根目录下的index.php嗯映入眼帘的是一个if语句.检查 ...
- Linux:永久修改网卡的MAC地址
比如:搭建一个虚拟机环境之后,需要N个一样的系统,可以本地复制虚拟机来实现.但是复制之后,网卡的MAC地址一样,无法使用,这时候需要修改网卡的MAC地址,且希望重启系统之后,仍生效的,步骤如下: 1. ...
- cs11_c++_lab1
lab1.cpp #include "Point.hh" #include <iostream> #include <cmath> using namesp ...
- teamviewer现在无法捕捉屏幕,这可能是由于快速的用户切换或远程桌面会话已经断开
解决方法: 不用远程连接过去开启teamview,直接在在电脑本机上手动开启teamview就可以了 即:如果是mstsc远程过去开启,则会有这个错误提示,需要让服务器连接显示器,手动去登录 ...