题解 | #最长递增子序列#贪心+二分

最长递增子序列

http://www.nowcoder.com/practice/9cf027bf54714ad889d4f30ff0ae5481

//1.理解贪心算法使用
//2.maxLen数组的作用--找到字典序递增子序列
//3.二分查找
//Leetcode上最长递增子序列求长度+牛佬“华科不平凡”的maxLen数组恢复字典序

class Solution {
public:
    //找到第一个比value大的值
    int binarySearch(vector<int>&res,int value){
        int left=0;
        int right=res.size()-1;

        //如果没找到就返回位置0,因为这时res的值全部大于value,需要替换第一个
        int pos=0;
        while(left<=right){
            int middle=left+((right-left)>>1);

            if(res[middle]>value){
                pos=middle;
                right=middle-1;
            }
            else{
                left=middle+1;
            }   
        }
        //没找到就返回pos==0
        return pos;

    }

    vector<int> LIS(vector<int>& arr) {
        if(arr.empty()) return {};

        vector<int> res;               //存放递增子序列
        vector<int> maxLen;            //存放当前元素在子序列最后一位时子序列长度

        res.emplace_back(arr[0]);
        maxLen.emplace_back(1);

        for(int i=1;i<arr.size();i++){
            if(arr[i]>res.back()){
                res.emplace_back(arr[i]);
                maxLen.emplace_back(res.size());
            }else{
                int pos=binarySearch(res,arr[i]);
                res[pos]=arr[i];
                maxLen.emplace_back(pos+1);

            }

        }
        //从后往前更新最长递增子序列
        for(int i=arr.size()-1,j=res.size();j>0;--i){
            if(maxLen[i]==j){
                res[--j]=arr[i];
            }    
        }

        return res;

    }
}
全部评论
重新做一遍,在二分查找的时候,需要查找第一个 >= value 的下标, 不然得到的就不是严格的递增子序列。 也不知道这个判题机制咋给我过的,一脸懵逼。 建议结合 Leetcode 300题。
点赞 回复 分享
发布于 2021-05-27 16:47

相关推荐

10-09 17:17
已编辑
门头沟学院 Java
活泼的代码渣渣在泡池...:同学你好,我也是学院本,后天要面这个亚信科技,是实习,请问问题都啥样呀,我项目就做了网上的,这是第一次面试
投递多益网络等公司10个岗位
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
正在热议
更多
# 你的mentor是什么样的人? #
4626次浏览 34人参与
# 你觉得mentor喜欢什么样的实习生 #
10815次浏览 299人参与
# 智慧芽求职进展汇总 #
26174次浏览 110人参与
# 帮我看看,领导说这话什么意思? #
6782次浏览 29人参与
# 26届秋招公司红黑榜 #
13570次浏览 45人参与
# 怎么给家人解释你的工作? #
1770次浏览 18人参与
# 平安产险科技校招 #
2440次浏览 0人参与
# 没有家庭托举的我是怎么找工作的 #
12886次浏览 162人参与
# 求职低谷期你是怎么度过的 #
5504次浏览 97人参与
# 实习必须要去大厂吗? #
146931次浏览 1543人参与
# 从哪些方向判断这个offer值不值得去? #
6850次浏览 95人参与
# 同bg的你秋招战况如何? #
158918次浏览 927人参与
# 度小满求职进展汇总 #
10263次浏览 53人参与
# 校招泡的最久的公司是哪家? #
4915次浏览 23人参与
# 面试紧张时你会有什么表现? #
1824次浏览 21人参与
# 你有哪些缓解焦虑的方法? #
37218次浏览 835人参与
# 你喜欢工作还是上学 #
77639次浏览 860人参与
# 入职第一天,你准备什么时候下班 #
85538次浏览 467人参与
# 秋招想进国企该如何准备 #
97773次浏览 487人参与
# 简历无回复,你会继续海投还是优化再投? #
103640次浏览 819人参与
# 机械人的工作环境真的很差吗 #
25119次浏览 119人参与
# 独居后,你的生活是更好了还是更差了? #
28167次浏览 263人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务