6.把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。

a)使用ArrayList来存放元素

 public class Solution {

              public static int minNumberArray(int[] array) {

             int min = array[0];

             for(int i = 0; i < array.length; i++){

                if(min > array[i]){

                   min = array[i];

                }

             }

             return min;

          }

          public ArrayList minNumberInRotateArray(int [] array) {

                 ArrayList list = new ArrayList();

             int minNum = minNumberArray(array);

             int i;

             for(i=0; i < array.length; i++){

                if(minNum == array[i]){

                   break;

                }

             }

             //把最小数和最小数之后的元素放入list

             for(int j = i; j < array.length; j++){

                    list.add(array[j]);

             }

             //把最小数前面的元素放入list

             for(int k = 0;k < i; k++){

                    list.add(array[k]);

             }

             return list;

          }

}

b) 使用数组来存放旋转后的数组

public class Solution {

        public static int minNumberArray(int[] array) {

               int min = array[0];

               for(int i = 0; i < array.length; i++){

                   if(min > array[i]){

                       min = array[i];

                   }

               }

               return min;

           }

           public int[] minNumberInRotateArray(int [] array) {

                 int[] arr = new int[array.length];

               int minNum = minNumberArray(array);

               int i;

               for(i=0; i < array.length; i++){

                   if(minNum == array[i]){

                       break;

                   }

               }

               int l = 0;

               //把最小数和最小数之后的元素放入list

               for(int j = i; j < array.length; j++,l++){

                    arr[l] = array[j];

               }

               //把最小数前面的元素放入list

               for(int k = 0;k < i; k++,l++){

                    arr[l] = array[k];

               }

               return arr;

           }

       public static void main(String[] args) {

              Solution s = new Solution();

              int[] arr1 = new int[]{3,4,5,1,2};

              int[] arr2 = s.minNumberInRotateArray(arr1);

              for(int i = 0; i < arr2.length; i++){

                     System.out.print(arr2[i]);

              }

       }

}

7.大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39。

a)题目中提示n的值小于等于39,所以我们可以定义一个长度为39的数组,这样就不会超出大小。还有使用数组存放斐波拉契数比使用方法递归的时间效率高很多。程序中没有判断输入的数字是否大于39,这个很简单。

public class Solution {

              public int Fibonacci(int n) {

                     int flag;

                     int[] arr = new int[39];

                     arr[0] = 1;

                     arr[1] = 1;

                     if(n<=0){

                            flag = 0;

                     }else if(n == 1){

                            flag = 1;

                     }else{

                            for(int i = 2; i < n; i++){

                                   arr[i] = arr[i-1] + arr[i-2];

                            }

                            flag = arr[n-1];

                     }

                     return flag;

              }

              public static void main(String[] args) {

                     Solution s = new Solution();

                     System.out.println(s.Fibonacci(20));

              }

}

b)还有一种方法就是使用递归,这一方法的代码十分简单,但是时间有点长,通过不了网上在线编译器的测试。

public class Solution {

       public int Fibonacci(int n) {

              int flag;

              if(n<=0){

                     flag = 0;

              }else if(n == 1){

                     flag = 1;

              }else{

                     flag = Fibonacci(n-1)+Fibonacci(n-2);

              }

              return flag;

       }

       public static void main(String[] args) {

              Solution s = new Solution();

              System.out.println(s.Fibonacci(20));

       }

}

8.一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

a)这是一个斐波拉契数列问题

观察可以得出,当n等于1时为1,n等于2时为2,n等于3时为3,n等于4时为5,可以观察出当n大于2时,结果等于n-1的结果加上n-2的结果,所以直接可以使用递归来实现。

public class Solution {

       public int JumpFloor(int target) {

        if(target <= 0){

            return -1;

        } else if(target == 1){

            return 1;

        } else if(target == 2){

            return 2;

        } else{

            return (JumpFloor(target-1)+JumpFloor(target-2));

        }

    }

       public static void main(String[] args) {

              Solution s = new Solution();

              System.out.println(s.JumpFloor(3));

       }

}

9.一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

a)这一题的解题步骤和上一体类似,也是斐波拉契数列。

public class Solution {

              public int JumpFloor(int target) {

             if(target <= 0){

                return -1;

             } else if(target == 1){

                return 1;

             } else if(target == 2){

                return 2;

             } else{

                return (JumpFloor(target-1)+JumpFloor(target-2));

             }

          }

              public static void main(String[] args) {

                     Solution s = new Solution();

                     System.out.println(s.JumpFloor(3));

              }

}

10.我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

a)这题和前面两题类似,下面直接给出代码

 public class Solution {

              public int RectCover(int target) {

             if(target <= 0){

                return 0;

             } else if(target == 1){

                return 1;

             } else if(target == 2){

                return 2;

             } else{

                return RectCover(target-1)+RectCover(target-2);

             }

          }

              public static void main(String[] args) {

                     Solution s = new Solution();

                     System.out.println(s.RectCover(4));

              }

}

Java--剑指offer(2)的更多相关文章

  1. 剑指Offer:面试题15——链表中倒数第k个结点(java实现)

    问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ...

  2. 剑指offer编程题Java实现——面试题5从头到尾打印链表

    题目描述* 剑指offer面试题5:从尾到头打印链表 输入一个链表的头结点,从尾到头打印出每个结点的值 解决方案一:首先遍历链表的节点后打印,典型的"后进先出",可以使用栈来实现这 ...

  3. 剑指offer面试题-Java版-持续更新

    最近在用Java刷剑指offer(第二版)的面试题.书中原题的代码采用C++编写,有些题的初衷是为了考察C++的指针.模板等特性,这些题使用Java编写有些不合适.但多数题还是考察通用的算法.数据结构 ...

  4. 《剑指offer》全部题目-含Java实现

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

  5. 剑指Offer——Java实现栈和队列的互模拟操作

    剑指Offer--Java实现栈和队列的互模拟操作 栈模拟队列   题目:JAVA实现用两个栈来实现一个队列,完成队列的Push和Pop操作.队列中的元素为int类型.   思路:其实就是把队列正常入 ...

  6. 剑指Offer——知识点储备-故障检测、性能调优与Java类加载机制

    剑指Offer--知识点储备-故障检测.性能调优与Java类加载机制 故障检测.性能调优 用什么工具可以查出内存泄露 (1)MerroyAnalyzer:一个功能丰富的java堆转储文件分析工具,可以 ...

  7. 剑指Offer——知识点储备-Java基础

    剑指Offer--知识点储备-Java基础 网址来源: http://www.nowcoder.com/discuss/5949?type=0&order=0&pos=4&pa ...

  8. 剑指offer面试题5 从头到尾打印链表(java)

    注:(1)这里体现了java数据结构与C语言的不同之处 (2)栈的操作直接利用stack进行 package com.xsf.SordForOffer; import java.util.Stack; ...

  9. 剑指offer面试题4 替换空格(java)

    注:利用java中stringBuilder,append,length方法很方便的解决字符串问题 /* * 剑指offer 替换空格 * xsf * */ /*开始替换空格的函数,length为原数 ...

  10. 剑指offer面试题6 重建二叉树(java)

    注:(1)java中树的构建 (2)构建子树时可以直接利用Arrays.copyOfRange(preorder, from, to),这个方法是左开右闭的 package com.xsf.SordF ...

随机推荐

  1. 编译Ansj之Solr插件

    Ansj是一个比较优秀的中文分词组件,具体情况就不在本文介绍了.ansj作者在其官方代码中,提供了对lucene接口的支持.如果用在Solr下,还需要简单的扩展一下. 1.基于maven管理 ansj ...

  2. 单机搭建Android开发环境(二)

    前文介绍了如何优化SSD和内存,以发挥开发主机的最佳性能,同时提到在SSD上创建虚拟机.为什么不装双系统呢?双系统性能应该会更好!采用Windows+虚拟机的方式,主要是考虑到安卓开发和日常办公两方面 ...

  3. NOIP2000乘积最大[序列DP]

    题目描述 今年是国际数学联盟确定的“2000――世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得 ...

  4. [AIR] as3 之条件编译多平台妙用

    http://bbs.9ria.com/thread-418864-1-1.html 一直希望as3 可以支持条件编译,即满足A时编译函数1,满足B时则编译函数2. 最佳百度了之后,发现原来是可以实现 ...

  5. window.execScript的兼容性写法

    把探嗅浏览器的操作提前到代码加载的时候,在代码加载的时候就立刻进行一次判断,以便让globalEval返回一个包裹了正确逻辑的函数 var globalEval = (function(){ var ...

  6. CentOS 6.4 下安装vsftpd

    概述: vsftpd是Linux下比较著名的FTP服务器,搭建FTP服务器当然首选这个. 本文介绍了在CentOS 6.4下安装vsftpd.配置虚拟用户登录FTP的过程. 正文: 一:安装vsftp ...

  7. iTextSharp带中文转换出来的PDF文档显示乱码

    刚才有写一个小练习<Html代码保存为Pdf文件>http://www.cnblogs.com/insus/p/4323224.html.马上有网友说,当截取块有中文时,保存的pdf文件将 ...

  8. 通用权限管理系统多语言开发接口 - java,php 调用接口程序,多业务子系统集成

    1:公司里有多个业务系统,需要进行统一重构,有PHP的.有Java的.有.NET的,甚至还有delphi的. 2:公司里有多个数据库系统,有mysql的.有sqlserver的.还有oracel的,甚 ...

  9. 1003. Emergency

    As an emergency rescue team leader of a city, you are given a special map of your country. The map s ...

  10. tkinter 类继承的三种方式

    tkinter class继承有三种方式. 提醒注意这几种继承的运行方式 一.继承 object 1.铺tk.Frame给parent: 说明: self.rootframe = tk.Frame(p ...