题目: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
}