这里有一些可以完成这项任务的东西:首先我创建一个向量index,其中index[k] 等于要走的索引数量(从k 开始),直到一个人至少拥有所有元素一次,如果情况并非如此,则它等于Inf。
# determining the unique elements of v
uniqueVals <- unique(v)
index <- numeric(length(v))
# helper function
myFun <- function(k){
helper <- vapply(seq(k, length(v)),
function(s) length(setdiff(uniqueVals, v[k:s])),
numeric(1))
return (ifelse(min(helper) == 0, which.min(helper)-1, Inf))
}
# indices in seq1 must be infinity as there are not enough values left
seq1 <- which(length(v) - seq_along(v) < length(uniqueVals))
index[seq1] <- Inf
# for the other indices we now use our helper function
index[seq(1, min(seq1)-1)] <- vapply(seq(1, min(seq1)-1), myFun, numeric(1))
# applying the above
startIndex <- which.min(index)
endIndex <- index[startIndex] + startIndex
v[startIndex:endIndex]
# yielding
[1] 2 3 4 1 1 5
其中v = c(1, 4, 2, 2, 3, 4, 1, 1, 5, 2, 2) 和任何给定的k myFun 将返回最小的数字n 使得v[k:n] 包含v 的每个元素。