题解 | #递减种子序列#

递减种子序列

https://www.nowcoder.com/practice/708a3a8603274fc7b5732c5e73617203

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param seeds int整型一维数组
     * @return int整型
     */
    public int lengthOfLIS (int[] seeds) {
        // write code here
        int[] arr = new int[seeds.length];
        for (int i = 0; i < seeds.length; i++) {
            arr[i] = 1;
        }
        int result = 1;
        for (int i = 1; i < seeds.length; i++) {
            for (int j = i - 1; j >= 0; j--) {
                if (seeds[i] < seeds[j]) {
                    arr[i] = Math.max(arr[i], arr[j] + 1);
                }
            }
            result = Math.max(result, arr[i]);
        }
        return result;

    }
}

本题考察的知识点主要是动态规范,所用编程语言为java.动态规范的核心在于状态转移方程的建立。

我觉得最差情况就是非递减序列,此情况结果为1,此为数组边界条件,状态转移方程可以从如下代码可以看出

for (int i = 1; i < seeds.length; i++) {

for (int j = i - 1; j >= 0; j--) {

if (seeds[i] < seeds[j]) {

arr[i] = Math.max(arr[i], arr[j] + 1);

}

}

}

最后答案为arr数组中的最大值,arr数组中每个值都是原序列在该位置的最长递减子序列长度。

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-07 13:15
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-09 16:15
我应届生,去年10月份开始在这家公司实习,到今年10月份正好一年想(实习+试用期),在想要不要提前9月份就离职,这样好找工作些,但又差一个月满一年,又怕10月份国庆回来离职,容易错过了下半年的金九银十,到年底容易gap到年后
小破站_程序员YT:说这家公司不好吧,你干了快一年 说这家公司好吧,你刚毕业就想跑路说你不懂行情吧,你怕错过金九银十说 你懂行情吧,校招阶段在实习,毕业社招想换工作 哥们,我该怎么劝你留下来呢
应届生,你找到工作了吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务