2011-04-03 60 views
0

給出了一個由N個整數組成的非空零索引數組A.數組A的第一個覆蓋前綴是最小的整數P,使得$ 0 \ leq P < N $並且使得在數組A中出現的每個值也以序列$ A [0],A [1],\ ldots,A [P] $。找到第一個覆蓋數組前綴的PHP代碼

例如,陣列的第一覆蓋前綴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,如在上述實施例中說明。

+2

作業?到目前爲止你做了什麼?你有什麼問題嗎? – 2011-04-03 18:28:32

+0

遍歷數組,找到最大值。哇,那不難,是嗎? – NikiC 2011-04-03 18:30:06

+1

至於一切,答案是'42'。 – 2011-04-03 19:01:55

回答

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

這裏有一個簡單的方法:

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; 
} 
+1

只是解決這個問題:'返回$ li;'它是100%回答 – 2014-04-11 17:55:27

0

下面是使用紅寶石

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 
+0

問題標記爲php:/ – 2013-08-24 06:23:50

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; 
}