Java--剑指offer(2)
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)的更多相关文章
- 剑指Offer:面试题15——链表中倒数第k个结点(java实现)
问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ...
- 剑指offer编程题Java实现——面试题5从头到尾打印链表
题目描述* 剑指offer面试题5:从尾到头打印链表 输入一个链表的头结点,从尾到头打印出每个结点的值 解决方案一:首先遍历链表的节点后打印,典型的"后进先出",可以使用栈来实现这 ...
- 剑指offer面试题-Java版-持续更新
最近在用Java刷剑指offer(第二版)的面试题.书中原题的代码采用C++编写,有些题的初衷是为了考察C++的指针.模板等特性,这些题使用Java编写有些不合适.但多数题还是考察通用的算法.数据结构 ...
- 《剑指offer》全部题目-含Java实现
1.二维数组中的查找 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. publi ...
- 剑指Offer——Java实现栈和队列的互模拟操作
剑指Offer--Java实现栈和队列的互模拟操作 栈模拟队列 题目:JAVA实现用两个栈来实现一个队列,完成队列的Push和Pop操作.队列中的元素为int类型. 思路:其实就是把队列正常入 ...
- 剑指Offer——知识点储备-故障检测、性能调优与Java类加载机制
剑指Offer--知识点储备-故障检测.性能调优与Java类加载机制 故障检测.性能调优 用什么工具可以查出内存泄露 (1)MerroyAnalyzer:一个功能丰富的java堆转储文件分析工具,可以 ...
- 剑指Offer——知识点储备-Java基础
剑指Offer--知识点储备-Java基础 网址来源: http://www.nowcoder.com/discuss/5949?type=0&order=0&pos=4&pa ...
- 剑指offer面试题5 从头到尾打印链表(java)
注:(1)这里体现了java数据结构与C语言的不同之处 (2)栈的操作直接利用stack进行 package com.xsf.SordForOffer; import java.util.Stack; ...
- 剑指offer面试题4 替换空格(java)
注:利用java中stringBuilder,append,length方法很方便的解决字符串问题 /* * 剑指offer 替换空格 * xsf * */ /*开始替换空格的函数,length为原数 ...
- 剑指offer面试题6 重建二叉树(java)
注:(1)java中树的构建 (2)构建子树时可以直接利用Arrays.copyOfRange(preorder, from, to),这个方法是左开右闭的 package com.xsf.SordF ...
随机推荐
- 一次Mutex死锁的原因探究
1.现象 最近项目中调出一个bug,某些时候程序会卡死不动,用windbg进行加载后用 ~*kb 命令列出所有的线程栈调用,发现有多个线程调用 WaitForMultipleObjects 在等 ...
- 《硝烟中的Scrum和XP》:作者主导Scrum过程的实战经验,四星推荐
本书作者是开发团队Leader,本书记录了他带领团队实施Scurm过程中的经验教训.全书短小精悍,言简意赅. 以下是书中一些观点信息的摘抄: 1:Nokia总结出的迭代开发的基本要求:1.1:迭代要有 ...
- 【CSS】使用CSS选择器(第二部分)
1. 使用结构性伪类选择器 使用结构性伪类选择器能够根据元素在文档中的位置选择元素.这类选择器都有一个冒号字符前缀(:),例如 :empty .它们可以单独使用,也可以跟其他选择器组合使用,如: p: ...
- 创建MyOffice项目
创建查看评分窗体(FrmLOOK),添加定义成员数组,将员工数据绑定到FrmLOOK窗体的ListView控件上 public ListViewItem lv; private void Form1_ ...
- Unity3D所使用的第三方工具
前言 最近在研究Unity3D的结构和原理.关于Unity3D怎么用之类的教程在网上一找一大堆,想看教程之类的就不用看这篇文章了.我想做的是从使用Unity3D所看到的表象(表),摸透其设计原则和组织 ...
- jsp前三章测试
(选择一项) A: B: C: D: 正确答案是 B ,B/S架构并不是C/S架构的替代品,有些程序例如大型的网络游戏一般使用的是C/S架构. (选择多项) A: B: C: D: 正确答案是 A,C ...
- 事件--c#
以上是事件的几个操作. 事件由五个组件构成: 具体作用如下: 事件声明: event 委托类型 事件名:例子: public event EventHandler Elapsed; 还可同时声明几个 ...
- GT考试(bzoj 1009)
Description 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字.他的不吉利数学A1A2...Am(0< ...
- APMServ 支持.htaccess伪静态
假如你的APMServ安装在X盘APMServ5.2.6目录的话请按以下步骤做. X:\APMServ5.2.6\Apache\conf\httpd.conf 文件找到你所在的虚拟目录修改以下这个地 ...
- 添加Distributor失败
上周做了一个case,客户无法为SQL Server instance配置remote distributor. 下面分享一下排查问题的过程,希望对您排查类似的问题所有帮助. 客户的环境中的SQL S ...