Java基础练习05--数组中最长递增子序列长度
2018-12-05 10:37
127 查看
小猴子下山,沿着下山的路有一排桃树,每棵树都结了一些桃子。小猴子想摘桃子,但是有一些条件需要遵守,小猴子只能沿着下 山的方向走,不能回头,每颗树最多摘一个,而且一旦摘了一棵树的桃子,就不能再摘比这棵树结的桃子少的树上的桃子。那么小 猴子最多能摘到几颗桃子呢?
举例说明,比如有5棵树,分别结了10,4,5,12,8颗桃子,
那么小猴子最多能摘3颗桃子,来 自于结了4,5,8颗桃子的桃树
其实,这就是给出了一个整型数组,让你求出其中最长的递增子序列长度。
代码:
[code]package cn.drc.programming.test; import java.util.Arrays; import java.util.Scanner; /** * 猴子摘桃 * @author drc */ public class MaxAmountOfPeaches { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int trees = sc.nextInt(); // 几棵树 int[] treePeaches = new int[trees]; // 树上的桃子数 for(int x=0; x<trees; x++) { // 输入桃子数 treePeaches[x] = sc.nextInt(); } sc.close(); int maxPeaches = getMaxPeaches(treePeaches); System.out.println("猴子最多可以摘" + maxPeaches + "颗桃子"); } /** * 思路: * 其实就是求一串数中的最长递增数列 * @param peaches * @return */ static int getMaxPeaches(int[] peaches) { // 用于存储子序列的长度 int[] subSeqLen = new int[peaches.length]; for (int x=0; x<peaches.length; x++) { subSeqLen[x] = 1; // 初始化最长子序列长度 for (int y=0; y<x; y++) { // 找出前x+1项最长的序列 if (peaches[x] > peaches[y] && subSeqLen[y]+1 > subSeqLen[x]) { subSeqLen[x] = subSeqLen[y] + 1; } } } Arrays.sort(subSeqLen); return subSeqLen[subSeqLen.length-1]; } }
相关文章推荐
- 一维数组中最长递增子序列的长度(DP做法)
- 数组中最长递增子序列-java
- 求数组中最长递增子序列的长度
- LIS-最长递增子序列的长度-java
- 动态规划-数组最长递增子序列长度
- 求数组中最长递增子序列的长度
- 数组中最长递增子序列的长度
- 求数组中最长递增子序列的长度
- Q:求数组中最长递增子序列的长度.
- 01动态规划基础---最长递增子序列长度
- 求数组中最长递增子序列的长度
- 求数组中最长递增子序列的长度
- 求数组中最长递增子序列的长度
- 求数组中最长递增子序列的长度
- 求最长不增子序列、最长单调递减子序列、最长不降子序列、最长单调递增子序列长度
- O(n)时间找出无序数组中最长的连续递增序列
- Java基础05-循环问题,数组
- 黑马程序员-----java基础③(数组及循环练习)
- 华为OJ_竞赛_单词博弈:最长递增子序列长度
- 最大子数组之和、最大子数组之积、最长递增子序列求法