マイクロソフト100 -----タイトルアルゴリズムを入力し、その合計がちょうどデジタル入力され、その結果、配列内の2つの数値を見つけるため、デジタル配列を昇順にソートされています。要件:時間複雑度はO(N)です。デジタル入力といずれかの組のデジタル出力に等しい複数存在する場合。
アイデア:2つのポインタ、先頭にポインタ、最後のポイント、2つの数値を設定し、そして大きな場合は、左に右上のポインタ、右に左に小さな場合には、ポインタ。
int main(void)
{
int arry[] = {1, 3, 4, 6, 7, 8, 9};
int key = 11;
int len = sizeof(arry)/sizeof(arry[0]);
int i, sum;
int *head = &arry[0];
int *tail = &arry[len-1];
for(i=0; i<len/2; i++)
{
sum = *(head) + *(tail);
if(sum > key)
{
tail--;
}
else if(sum < key)
{
head++;
}
else if(key == sum)
{
printf("%d + %d\n", *(head), *(tail));
}
else
printf("该数组中没有两数之和满足条件\n");
}
return 0;
}