牛客网 | 叠罗汉I && II

来源:互联网 发布:精英主义知乎 编辑:程序博客网 时间:2024/05/01 09:07


题目描述

叠罗汉是一个著名的游戏,游戏中一个人要站在另一个人的肩膀上。为了使叠成的罗汉更稳固,我们应该让上面的人比下面的人更轻一点。已知参加游戏的每个人的体重,请编写代码计算通过选择参与游戏的人,我们多能叠多少个人。注意这里的人都是先后到的,意味着参加游戏的人的先后顺序与原序列中的顺序应该一致。

给定一个int数组men,代表依次来的每个人的身高。同时给定总人数n,请返回做多能叠的人数。保证n小于等于500。

测试样例:
[1,6,2,5,3,4],6
返回:4
思路:最长递增子序列


import java.util.*;public class Stack {    public int getHeight(int[] men, int n) {        // write code here        int max = 1;        int[] f = new int[n];        f[0] = 1;        for (int i = 0; i < n; i++) {            f[i]=1;            for (int j = 0; j < i; j++) {                if(men[i]>men[j])                    f[i] = Math.max(f[i],f[j]+1);            }            max = Math.max(f[i],max);        }        return max;    }}


题目描述

叠罗汉是一个著名的游戏,游戏中一个人要站在另一个人的肩膀上。为了使叠成的罗汉更稳固,我们应该让上面的人比下面的人更轻一点。现在一个马戏团要表演这个节目,为了视觉效果,我们还要求下面的人的身高比上面的人高。请编写一个算法,计算最多能叠多少人,注意这里所有演员都同时出现。

给定一个二维int的数组actors,每个元素有两个值,分别代表一个演员的身高和体重。同时给定演员总数n,请返回最多能叠的人数。保证总人数小于等于500。

测试样例:
[[1,2],[3,4],[5,6],[7,8]],4
返回:4
思路: 控制一个变量递增序列,求剩下另一个变量的最长递增子序列

import java.util.*;public class Stack {    public class P    {        int w;        int l;        public P (int x,int y)        {            this.l = x;            this.w = y;        }    }    public int getHeight(int[][] actors, int n) {        // write code here        ArrayList<P> ps = new ArrayList<>();        for (int i = 0; i < n; i++) {            ps.add(new P(actors[i][0],actors[i][1]));        }                Collections.sort(ps, new Comparator<P>() {            @Override            public int compare(P lhs, P rhs) {                return lhs.l-rhs.l;            }        });        int max = 1;        int[] f = new int[n];        f[0] = 1;        for (int i = 0; i < n; i++) {            f[i]=1;            for (int j = 0; j < i; j++) {                if(ps.get(i).w>ps.get(j).w)                    f[i] = Math.max(f[i],f[j]+1);            }            max = Math.max(f[i],max);        }        return max;                    }}


0 0
原创粉丝点击