(LeetCode 每日一题) 2900. 最长相邻不相等子序列 I (贪心)

题目:2900. 最长相邻不相等子序列 I

在这里插入图片描述
在这里插入图片描述

思路:上面一大段文字,其实就是在groups中找到最长的子序列,子序列满足:相邻元素都不相等。
贪心解法,在每一段连续的0或1串里选最后一个保留,时间复杂度0(n)。

C++版本:

class Solution {
public:
    vector<string> getLongestSubsequence(vector<string>& words, vector<int>& groups) {
        int n=groups.size();
        vector<string> v;
        for(int i=0;i<n;i++){
            if(i==n-1||groups[i]!=groups[i+1]){
                v.push_back(words[i]);
            }
        }
        return v;
    }
};

JAVA版本:

class Solution {
    public List<String> getLongestSubsequence(String[] words, int[] groups) {
        int n=groups.length;
        List<String> v=new ArrayList<>();
        for(int i=0;i<n;i++){
            if(i==n-1||groups[i]!=groups[i+1]){
                v.add(words[i]);
            }
        }
        return v;
    }
}

Go版本:

func getLongestSubsequence(words []string, groups []int) []string {
    n:=len(groups)
    v:=make([]string,0)
    
    for i:=0;i<n;i++ {
        if i==n-1 || groups[i]!=groups[i+1] {
            v=append(v,words[i])
        }
    }
    return v
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值