面试题41:和为S的连续正整数序列

  1. import java.util.ArrayList;
  2. public class Solution {
  3. public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {
  4. ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
  5. int start = 1;
  6. int end = 2;
  7. int mid = (1 + sum)/2;
  8. int curSum = start + end;
  9. while(start < mid){
  10. if(curSum == sum){
  11. ArrayList<Integer> list = makeList(start,end);
  12. res.add(list);
  13. }
  14. while(curSum > sum && start < mid){
  15. curSum -= start;
  16. start++;
  17. if(curSum == sum){
  18. ArrayList<Integer> list = makeList(start,end);
  19. res.add(list);
  20. }
  21. }
  22. end ++;
  23. curSum += end;
  24. }
  25. return res;
  26. }
  27. public ArrayList<Integer> makeList(int start , int end){
  28. ArrayList<Integer> list = new ArrayList<Integer>();
  29. for(int i=start;i<=end;i++){
  30. list.add(i);
  31. }
  32. return list;
  33. }
  34. }

面试题41:递增序列中乘积最小的和为S的两个数

  1. import java.util.ArrayList;
  2. import java.util.HashMap;
  3. public class Solution {
  4. public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
  5. ArrayList<Integer> res = new ArrayList<Integer>();
  6. if(array == null && array.length <2 ) return res;
  7. int first = 0;
  8. int second = array.length-1;
  9. int len = array.length;
  10. int mul = Integer.MAX_VALUE;
  11. int retFirst = 0;
  12. int retSecond = 0 ;
  13. HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
  14. for(int i=0;i<array.length;i++){
  15. map.put(array[i],i);
  16. }
  17. while(first<second && first<len-1 && second<len){
  18. if(map.get(sum - array[first])!=null && map.get(sum - array[first])>first){
  19. second = map.get(sum - array[first]);
  20. int tmpMul = array[first] * array[second];
  21. if(tmpMul < mul){
  22. mul = tmpMul;
  23. retFirst = array[first];
  24. retSecond = array[second];
  25. }
  26. }
  27. first++;
  28. }
  29. if(retFirst>0 && retSecond>0){
  30. res.add(retFirst);
  31. res.add(retSecond);
  32. }
  33. return res;
  34. }
  35. }

面试题42:左旋转字符串

  1. public class Solution {
  2. public String LeftRotateString(String str,int n) {
  3. if(str == null || n>str.length()) return "";
  4. char[] arr = str.toCharArray();
  5. reverse(arr,0,n-1);
  6. reverse(arr,n,arr.length-1);
  7. reverse(arr,0,arr.length-1);
  8. StringBuilder strBuilder = new StringBuilder();
  9. for(int i=0;i<arr.length;i++){
  10. strBuilder.append(arr[i]);
  11. }
  12. return strBuilder.toString();
  13. }
  14. public void reverse(char[] arr,int start,int end){
  15. while(start < end){
  16. char tmp = arr[end];
  17. arr[end--] = arr[start];
  18. arr[start++] = tmp;
  19. }
  20. }
  21. }

面试题42:翻转单词序列

  1. public class Solution {
  2. public String ReverseSentence(String str) {
  3. if (str == null || str.length() == 0 || str.trim().equals("")) {
  4. return str;
  5. }
  6. char[] arr = str.toCharArray();
  7. reverse(arr,0,arr.length-1);
  8. int start = 0,end=0;
  9. for(int i=0;i<arr.length;i++){
  10. if(arr[i] != ' '){
  11. arr[end++] = arr[i];
  12. }else if(i>0 && arr[i-1] != ' '){
  13. reverse(arr,start,end-1);
  14. arr[end++] = ' ';
  15. start = end;
  16. }
  17. }
  18. reverse(arr,start,end-1);
  19. return new String(arr,0,end>0&&arr[end-1]==' ' ? end-1:end);
  20. }
  21. public void reverse(char[] arr,int start,int end){
  22. while(start < end){
  23. char tmp = arr[end];
  24. arr[end--] = arr[start];
  25. arr[start++] = tmp;
  26. }
  27. }
  28. }

面试题44:扑克牌的顺子

  1. import java.util.Arrays;
  2. public class Solution {
  3. public boolean isContinuous(int [] numbers) {
  4. if(numbers.length==0) return false;
  5. if(numbers.length==1) return true;
  6. Arrays.sort(numbers);
  7. int i=0;
  8. int zeroCnt = 0;
  9. while(numbers[i] == 0){
  10. zeroCnt++;
  11. i++;
  12. }
  13. int notConCnt = 0;
  14. while(i<numbers.length){
  15. if(i>0 && numbers[i] == numbers[i-1]) return false;
  16. if(i>0 && numbers[i] != numbers[i-1] && numbers[i-1]!=0){
  17. notConCnt += (numbers[i] - numbers[i-1] - 1);
  18. }
  19. i++;
  20. }
  21. if(zeroCnt >= notConCnt || notConCnt == 0) return true;
  22. else return false;
  23. }
  24. }

面试题45:约瑟夫环

  1. public class Solution {
  2. public int LastRemaining_Solution(int n, int m) {
  3. if(n==0) return -1;
  4. int i=0,r=0;
  5. for(i=2;i<=n;i++){
  6. r = (r + m)%i;
  7. }
  8. return r;
  9. }
  10. }

面试题46:不用循环和判断语句求从1到n的和

  1. public class Solution {
  2. public int Sum_Solution(int n) {
  3. int res = n;
  4. boolean ans = (n>0) && ((res = Sum_Solution(n-1) + res)>0) ;
  5. return res;
  6. }
  7. }

面试题47:不用加减乘除做加法

  1. public class Solution {
  2. public int Add(int num1,int num2) {
  3. int sum ,carry;
  4. do{
  5. sum = num1 ^ num2;
  6. carry = (num1 & num2)<<1;
  7. num1 = sum;
  8. num2 = carry;
  9. }while(num2 != 0);
  10. return num1;
  11. }
  12. }

面试题49:把字符串转成整数

  1. public class Solution {
  2. public int StrToInt(String str) {
  3. if(str==null || str.length() == 0) return 0;
  4. char[] arr = str.toCharArray();
  5. boolean sign = true;
  6. int i=0;
  7. int res = 0;
  8. while(arr[i] == ' '){i++;}
  9. if(arr[i] == '+') {sign = true;i++;}
  10. else if(arr[i] == '-'){sign = false;i++;}
  11. for(;i<arr.length;i++){
  12. if(arr[i]<'0' || arr[i]>'9'){return 0;}
  13. int digit = arr[i] - '0';
  14. if(sign == true && (Integer.MAX_VALUE - digit) / 10 < res){
  15. return Integer.MAX_VALUE;
  16. }else if(sign==false &&(Integer.MIN_VALUE + digit)/10>res){
  17. return Integer.MIN_VALUE;
  18. }
  19. res =res*10 + (sign==true ? digit:-digit);
  20. }
  21. return res;
  22. }
  23. }

剑指offer题目41-50的更多相关文章

  1. 【剑指Offer】剑指offer题目汇总

      本文为<剑指Offer>刷题笔记的总结篇,花了两个多月的时间,将牛客网上<剑指Offer>的66道题刷了一遍,以博客的形式整理了一遍,这66道题属于相对基础的算法题目,对于 ...

  2. 代码题 — 剑指offer题目、总结

    剑指offer题目总结:  https://www.cnblogs.com/dingxiaoqiang/category/1117681.html 版权归作者所有,任何形式转载请联系作者.作者:马孔多 ...

  3. 剑指offer题目系列三(链表相关题目)

    本篇延续上一篇剑指offer题目系列二,介绍<剑指offer>第二版中的四个题目:O(1)时间内删除链表结点.链表中倒数第k个结点.反转链表.合并两个排序的链表.同样,这些题目并非严格按照 ...

  4. 再来五道剑指offer题目

    再来五道剑指offer题目 6.旋转数组的最小数字 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4, ...

  5. 剑指 Offer 题目汇总索引

    剑指 Offer 总目录:(共50道大题) 1. 赋值运算符函数(或应说复制拷贝函数问题) 2. 实现 Singleton 模式 (C#) 3.二维数组中的查找 4.替换空格              ...

  6. 剑指offer题目java实现

    Problem2:实现Singleton模式 题目描述:设计一个类,我们只能生成该类的一个实例 package Problem2; public class SingletonClass { /* * ...

  7. 牛客网上的剑指offer题目

    题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 题目:请实现一个函数,将一 ...

  8. 剑指offer题目系列二

    本篇延续上一篇,介绍<剑指offer>第二版中的四个题目:从尾到头打印链表.用两个栈实现队列.旋转数组的最小数字.二进制中1的个数. 5.从尾到头打印链表 题目:输入一个链表的头结点,从尾 ...

  9. 剑指offer题目系列一

    本篇介绍<剑指offer>第二版中的四个题目:找出数组中重复的数字.二维数组中的查找.替换字符串中的空格.计算斐波那契数列第n项. 这些题目并非严格按照书中的顺序展示的,而是按自己学习的顺 ...

  10. 剑指offer题目解答合集(C++版)

    数组中重复的数字 二维数组中查找 字符串 替换空格 二叉树的编码和解码 从尾到头打印链表 重建二叉树 二叉树的下一个节点 2个栈实现队列 斐波那契数列 旋转数字 矩阵中的路径 机器人的运动范围 剪绳子 ...

随机推荐

  1. android学习笔记53——自动朗读TTS

    自动朗读TTS android提供了自动朗读功能--其指的是支持可以对指定文本内容进行朗读,从而发出声音: 同时android的自动朗读支持还允许把文本对应的音频录制成音频文件,方便后续播放. 这种自 ...

  2. 【转】CSS深入理解流体特性和BFC特性下多栏自适应布局

    这篇文章发布于 2015年02月12日,星期四,23:36,归类于 css相关. 阅读 30873 次, 今日 63 次 by zhangxinxu from http://www.zhangxinx ...

  3. AngularJS 中利用 Interceptors 来统一处理 HTTP 的错误(reproduce)

    原文:http://chensd.com/2016-03/Angular-Handle-Global-Http-Error-with-Interceptors.html?utm_source=tuic ...

  4. 自制公众平台Web Api(微信)

    最近一段时间感觉没什么东西可以分享给大家,又由于手上项目比较赶,不太更新博客了,今天趁着生病闲下来的时间分享一些项目中的东西给大家. 公众平台 提起公众平台当下最流行的莫过于腾讯的微信了,当然还有易信 ...

  5. X-Cart 学习笔记(一)了解和安装X-Cart

    目录 X-Cart 学习笔记(一)了解和安装X-Cart X-Cart 学习笔记(二)X-Cart框架1 X-Cart 学习笔记(三)X-Cart框架2 X-Cart 学习笔记(四)常见操作 一.了解 ...

  6. 六、通过插件如何创建自己的MEL command

    1. MAYA API支持不同类型的plugin (1)Command Plugin——扩充MEL命令 (2)Tool Commands——通过鼠标输出 (3)DG plugin——对场景添加新的操作 ...

  7. node socket.io web

    soket.io & web http://socket.io/get-started/chat/ 新建一個文件夾 soketWeb ; 在sokertWeb 文件夾內新建一個 package ...

  8. 安装和使用memcached

    引用:http://www.czhphp.com/archives/252 如何将 memcached 融入到您的环境中? 在开始安装和使用 using memcached 之前,我们需要了解如何将 ...

  9. VMware 中windows server 之DHCP 搭建与测试

    感悟: 由于打算将windows server 的服务器搭建维护从头重新学习总结一下,遇到搭建dhcp服务的时候,在虚拟机中一直测试不成功,耽误我好几星期了,一点也不夸张,心情和积极性也大大受到打击. ...

  10. MySQL备份学习

    备份分类 物理和逻辑备份 物理备份直接拷贝数据库目录和文件,适合数据量大.重要且需要在出现问题时快速恢复的数据库 逻辑备份保存信息包括逻辑数据库结构(数据库表的创建脚本)和内容(插入语句或者分隔符平面 ...