Java算法小程序(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;

}

}

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

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));

}

}

时间: 2024-10-29 19:09:48

Java算法小程序(2)的相关文章

Java算法小程序(1)

1.在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. a)        常规程序,直接遍历二维数组 public class Solution { public boolean Find(int [][] array,int target) { int flag = 0; for(int i = 0; i < array.length; i++){ int[] arr2 = a

福利贴——爬取美女图片的Java爬虫小程序代码

自己做的一个Java爬虫小程序 废话不多说,先上图. 文件夹命名是用标签缩写,如果大家看得不顺眼可以等下载完成后手动改一下,比如像有强迫症的我一样... 这是挂了一个晚上下载的总大小,不过还有很多因为一些问题没有遍历下载到,而且会产生很多空文件,最下面我附带了一个递归删除空文件夹的小程序代码. 接下来是文件夹内部~ 图片存放位置默认为d:\picture,可在程序中更改,main函数的开头就是,有注释.爬取的网站为http://www.mmonly.cc/,大家有更好的资源网站可以私我. 爬虫源

一个Java恶搞小程序

运用Java程序控制某个应用程序的运行(以网易云音乐为例),步骤如下 1.建立bat文件分别是start.bat(控制程序的运行)和kill.bat(控制程序的结束): start.bat 的内容如下,功能是运行程序: cmd /c start F:\\00网易云音乐\\CloudMusic\\cloudmusic.exe exit 具体情况可以视具体情况改写你的应用的安装路径即可 kill.bat的内容如下,功能是结束程序进程: taskkill /f /im "cloudmusic.exe&

Java微信小程序开发_00_资源帖

1.微信小程序开发:http://blog.csdn.net/column/details/13721.html?&page=1 2.微信小程序栏目:http://blog.csdn.net/column/details/14653.html?&page=2 3.

Java GUI小程序--画板

画板 一个可以绘画的简单绘图软件 本文用两个类来实现画板的基本功能 (源代码在文章最后面) 画板制作分两个部分: (一)界面布局 (二)实现功能 小知识: setBounds(x,y,width,height); x:组件在容器X轴上的起点 y:组件在容器Y轴上的起点 width:组件的长度 height:组件的 下面就是一个按钮的简单布局 下面就来开始制作这个画板把 一.界面布局 1.定义所有按钮,把按钮全部放置到面板中 package gary; import javax.swing.JBu

No.21 Java猜拳小程序

猜拳小游戏 import java.util.*; //导入包public class game { public static void main (String[]args){ Scanner in = new Scanner(System.in); //导入 Scanner System.out.println("-----------------猜拳游戏-------------------"); System.out.println("请出拳 (1.剪刀 2.石头

Java网页小程序——Java Applet

Java Applet是编译过的Java程序,可以在所以支持Java的浏览器中运行. 1.Applet的使用 import java.applet.Applet; import java.awt.Graphics; public class AppletDemo extends Applet { @Override public void paint(Graphics g) { g.drawString("Hello Applet!", 5, 30);//绘制文本 g.drawArc(

Java抽奖小程序

package com.test; import java.awt.Color; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Random; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import

java经典小程序

以下答案源于java菜鸟学堂(144648357)群共享第一题 Java code package com.supersoft.exercise; /** * @author JamesLiu * * [程序1] * 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一 * 对兔子,假如兔子都不死,问每个月的兔子总数为多少? * 1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... */ import java.util.Sca