アルゴリズム問題:配列から昇順、二つの数字のために見て、2つの数字が入力の数に等しいです。

マイクロソフト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;
}
公開された50元の記事 ウォンの賞賛5 ビュー1533

おすすめ

転載: blog.csdn.net/qq_42483691/article/details/104565570