给出了由N个整数组成的非空零索引数组A.数组A的第一个覆盖前缀是最小的整数P,使得$ 0 \ leq P< N $并且数组A中出现的每个值也按顺序出现$ A [0],A [1],\ ldots,A [P] $。
例如,数组A的第一个覆盖前缀
A[0]=2 A[1]=2 A[2]=1 A[3]=0 A[4]=1
为3,因为等于A[0], A[1], A[2], A[3]
的序列2, 2, 1, 0
包含阵列A中出现的所有值。
写一个函数
int ps(int[] A);
给定零索引的非空数组A由N个整数组成,返回A的第一个覆盖前缀。假设$N <= 1,000,000$
。假设数组中的每个元素都是[0..N-1]
范围内的整数。
例如,给定数组A使A[0]=2 A[1]=2 A[2]=1 A[3]=0 A[4]=1
该函数应返回3,如上例所示。
答案 0 :(得分:1)
这是一个非常简短的解决方案。漂亮,但不会很好地扩展。
function ps($A) {
$cp = 0; // covering prefix
$unique = array_unique($A); // will preserve indexes
end($unique); // go to end of the array
$cp = key($unique); // get the key
return $cp;
}
答案 1 :(得分:1)
这是一个简单的方法:
function covering_prefix ( $A ) {
$in=array();
$li=0;
$c=count($A);
for($i=0 ;$i<$c ; $i++){
if (!isset($in[$A[$i]])){
$in[$A[$i]]='1';
$li=$i;
}
}
return $li;
}
答案 2 :(得分:0)
这是使用ruby的解决方案
def first_covering_prefix(a)
all_values = a.uniq
i = 0
a.each do |e|
all_values.delete(e)
if all_values.empty?
return i
end
i = i + 1
end
end
答案 3 :(得分:0)
这是一个83%的答案,因为使用了in_array,ronan已经提出了一个更好的解决方案
function solution($A) {
// write your code in PHP5
$in=array();
$li=0;
for ($i=0; $i < count($A); $i++) {
# code...
if (!in_array($A[$i], $in)){
$in[]=$A[$i];
$li=$i;
}
}
return $li;
}