入力配列の0の総数を数えるアルゴリズムの実行時間を改善しようとしています。入力配列は長さnを持ち、ソート順に並べられた0と1から構成されています。これまで0と1を含むソートされた配列からのゼロの数を数えるためのアルゴリズム。
マイアルゴリズムされています。しかし、実行時間がO(n)は
public int zeroCount(int[] a){
if(a[0]==1)
return 0;
int length =a.length;
if(a[length-1]==0)
return length;
int count=0;
for(int i=0;i<length&&a[i]==0;i++){
count++;
}
return count;
}
:
Algorithm : zeroCount(A)
Input : An sorted array A containing 0s and 1s
Output : total number of 0s in A
if A[0]=1 then
return 0;
len <— A.length
if A[len-1]=0 then
return len
count <— 0
i <—0
for i<len do
if A[i]==0 then
count++
i++
return count
のJava実装がされています。このアルゴリズムの実行時間を改善するための提案があれば歓迎されます。
バイナリ検索を適用します。 – DVT
ソートされています。 0/1の遷移がどこにあるかをバイナリ検索します。 –
これは単なる練習ですが、最初にソートされた配列に0と1を格納するのはなぜですか?私はそれを行うためのユースケースを想像することはできません。 –