剑指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个栈实现队列 斐波那契数列 旋转数字 矩阵中的路径 机器人的运动范围 剪绳子 ...
随机推荐
- 使用集成的ADT bundle来搭建android开发环境
android开发环境的搭建 本文使用集成的ADT bundle来搭建android开发环境,所谓bundle就是谷歌搭建好的一个eclipse+sdk集成环境.需要下载的软件列表如下: 1.ADT ...
- SilverlightOA源代码(可用于企业级Silverlight项目的二次开发,长年有效)
Silverlight OA系统简介 系统功能简介 l 程序界面介绍: 左侧为主菜单,主菜单可以展开和收起,主菜单下面的所有模块都可以在数据库中扩展增加,模块的权限和用户角色挂钩,可以在数据库中创建多 ...
- Visual Tracker Benchmark
直接的方法: 首先将代码先拷到benchmark_v1.0/tackers/这个文件夹下,你会发现里面已有好几个算法的代码文件夹了. 这边注意了,我就是这样的,没有注意把代码拷贝进去之后要自己写一个调 ...
- bzoj2518: [Shoi2010]滚动的正四面体
Description 正四面体总共有4个面,每个面都是一个正三角形.现在把它的一个面标记上字母A,如图 3中所示,A标记在底面上: 于是,这个正四面体的滚动过程就可以用一个只包含“L”“R”“B”的 ...
- RMAN_学习笔记3_RMAN Catalog恢复目录
2014-12-23 Created By BaoXinjian
- HDU 4135 Co-prime(容斥原理)
Co-prime 第一发容斥,感觉挺有意思的 →_→ [题目链接]Co-prime [题目类型]容斥 &题意: 求(a,b)区间内,与n互质的数的个数. \(a,b\leq 10^{15}\) ...
- sql 下,float和numeric
搜了下两者的区别,答案其实很明显: numeric支持最长38位长度的数字,只有在你要的数字的长度超过38位时才推荐使用float 原因是,float在保存和提取,以及数学计算等方面,会产生于期待记过 ...
- gerrit集成gitweb:Error injecting constructor, java.io.IOException: Permission denied
使用gerrit账户在centos上安装gerrit,然后集成gitweb,gerrit服务启动失败,查看日志,报错信息如下: [-- ::,] ERROR com.google.gerrit.pgm ...
- 9. Sort List && Insertion Sort List (链表排序总结)
Sort List Sort a linked list in O(n log n) time using constant space complexity. H ...
- 解决activity加上Theme.Translucent.NoTitleBar 页面跳转显示桌面
自定义style 继承Theme.Translucent.NoTitleBar <style name="My.Translucent" parent=" ...