阿里模测

小猴子下山,沿着下山的路有一排桃树,每棵树都结了一些桃子。小猴子想摘桃子,但是有一些条件需要遵守,小猴子只能沿着下山的方向走,不能回头,每颗树最多摘一个,而且一旦摘了一棵树的桃子,就不能再摘比这棵树结的桃子少的树上的桃子。那么小猴子最多能摘到几颗桃子呢?

举例说明,比如有5棵树,分别结了10,4,5,12,8颗桃子,那么小猴子最多能摘3颗桃子,来自于结了4,5,8颗桃子的桃树。

求指导
#阿里巴巴#
全部评论
最长增长子序列
点赞 回复 分享
发布于 2017-08-21 19:44
static int pick(int[] peaches) { int length = peaches.length,maxSize = 0; int[] incSize = new int[length]; for (int i = 0; i < length; i++) incSize[i] = 1; for (int i = 1; i < length; i++) for (int j = 0; j < i; j++) if (peaches[j] <= peaches[i]) { incSize[i] = Math.max(incSize[j] + 1, incSize[i]); maxSize = Math.max(incSize[i], maxSize); } return maxSize; }
点赞 回复 分享
发布于 2017-08-21 19:58
dp呀
点赞 回复 分享
发布于 2017-08-21 19:44
求 最长上升子串的问题  动归 两个for 最后返回动归数组中最大的就是结果 已AC
点赞 回复 分享
发布于 2017-08-21 19:44
请问 阿里的 编程题 能弹出来 用自己的IDE写吗 ? 那个在线的太难用了  按tab不缩进  格式完全没法看啊 很不方便用
点赞 回复 分享
发布于 2017-08-21 19:45
import java.util.*; public class Main { /** 请完成下面这个函数,实现题目要求的功能 **/     /**      * 当然,你也可以不按照这个模板来作答,完全按照自己的想法来 ^-^      **/     static int pick(int[] peaches) {         int max = 0;         int[] maxs = new int[peaches.length];         for (int i = peaches.length - 1; i >= 0; i--) {             int maxtemp = 0;             for (int j = i + 1; j < peaches.length; j++) {                 if (peaches[j] >= peaches[i] && maxs[j] > maxtemp) {                     maxtemp = maxs[j];                 }             }             int count = maxtemp + 1;             if (count > max) {                 max = count;             }             maxs[i] = count;         }         return max;     }     public static void main(String[] args) {         Scanner in = new Scanner(System.in);         int trees = Integer.parseInt(in.nextLine().trim());         int[] peaches = new int[trees];         for (int i = 0; i < peaches.length; i++) {             peaches[i] = Integer.parseInt(in.nextLine().trim());         }         System.out.println(pick(peaches));     } }
点赞 回复 分享
发布于 2017-08-21 19:48
阿里的模拟测试还能看到通过率么?在哪里看...
点赞 回复 分享
发布于 2017-08-21 19:54
import java.util.*; public class Main { public static void main(String[] args){ Scanner in = new Scanner(System.in); while(in.hasNext()){ int trees = Integer.parseInt(in.nextLine().trim()); int[] peaches = new int[trees]; for (int i = 0; i < trees; i++) { peaches[i] = Integer.parseInt(in.nextLine()); } int[] revP = new int[trees]; for(int i = 0; i < trees; i++){ revP[i] = peaches[i]; } Arrays.sort(revP); int len1 = peaches.length; int len2 = revP.length; int[][] dp = new int[len1+1][len2+1]; for(int i = 0; i < len1; i++){ for(int j = 0; j < len2; j++){ if(peaches[i] == revP[j]){ dp[i+1][j+1] = dp[i][j] + 1; }else{ dp[i+1][j+1] = Math.max(dp[i][j+1], dp[i+1][j]) > dp[i][j] ? Math.max(dp[i][j+1],dp[i+1][j]) : dp[i][j]; } } } System.out.println(dp[len1][len2]); } in.close(); } } AC
点赞 回复 分享
发布于 2017-08-21 20:00
static int pick(int[] peaches) { int dp[]=new int[peaches.length]; for(int i=0;i<dp.length;i++){ dp[i]=0; } int maxSum=0; for(int i=0;i<peaches.length;i++){ int count=1; int temp=0; for(int j=i;j<peaches.length;j++){ if(count<dp[j]){ break; }else { if(peaches[j]>temp){ if(count>dp[j]){ dp[j]=count; if(count>maxSum){ maxSum=count; } }else { break; } count++; temp=peaches[j]; } } } } return maxSum; } 为什么只通过了40%,TT,哪位大佬看下==
点赞 回复 分享
发布于 2017-08-21 20:01
哪位大神可以把这个题目的思想给解释一下呀,文字版的,看代码看不懂是为什么啊。
点赞 回复 分享
发布于 2017-08-21 20:11
import java.util.*; public class Demo21 { /** 请完成下面这个函数,实现题目要求的功能 **/ /** * 当然,你也可以不按照这个模板来作答,完全按照自己的想法来 ^-^ **/ static int pick(int[] peaches) { int result = 0; if(peaches == null || peaches.length == 0){ return result; } int len = peaches.length; List<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>(); for(int i = 0; i < len; i++) list.add(new ArrayList<Integer>()); for(int i = 0; i < len; i++){ ArrayList<Integer> blist = list.get(i); int max = peaches[i]; blist.add(max); for(int j = i + 1; j < len; j++){ if(peaches[j] >= max){ //记录串中最大的数 max = peaches[j]; blist.add(max); } } } for(int i = 0; i < len; i++){ if(list.get(i).size() > result) result = list.get(i).size(); } return result; } public static void main(String[] args) { Scanner in = new Scanner(System.in); int trees = Integer.parseInt(in.nextLine().trim()); int[] peaches = new int[trees]; for (int i = 0; i < peaches.length; i++) { peaches[i] = Integer.parseInt(in.nextLine().trim()); } System.out.println(pick(peaches)); } }
点赞 回复 分享
发布于 2017-08-21 20:25

相关推荐

牛客963010790号:为什么还要收藏
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务