ヤング図形、関数の定義デジタルを見つけるために

//ヤング図形が
二次元アレイがある。
左から右に、アレイの各行はインクリメントされ、各カラムの底部に上部が増加している。
そのような番号を見つけることは、アレイ内に存在します。
O(N)の時間複雑未満です。

配列:
。1 3 2
2 3 4
3 4 5。

1 3 4
2 4 5
4 5 6

1 2 3
4 5 6
7 8 9

【課題解決のアイデア]
アレイの各列は、左から右へ、各カラムの底部に上部がインクリメントされるとインクリメントされるからである。
最後の行に配置された定義線I、j列(すなわち、最大のデジタル行) TEMPは、最後の桁の最初の行に定義
サイズを与えるためにTEMP(NUM)与えられた値と比較します。
num>は一時、私は次の行のサイズを比較し、++場合
NUM <TEMP場合、数字はこの行で説明することができる、そして私変わらないが、jのデクリメント。
それらが等しい場合は、リターン
完全に通過した場合、戻り値0が見つかりません

#include<stdio.h>
#include<stdlib.h>
#define ROW 3
#define COL 3
int Search(int arr[ROW][COL], int num)
{
	int i = 0;
	int j = COL - 1;
	int temp = arr[i][j];
	while (1)
	{
		if ((num > temp) && (i < ROW - 1))
		{
			temp = arr[++i][j];
		}
		else if ((num<temp) && (j>0))
		{
			temp = arr[i][--j];
		}
		else if (num == temp)
		{
			return 1;
		}
		else
			return 0;
	}
}
int main()
{
	int arr[ROW][COL] = {
		{ 1, 3, 4 },
		{ 2, 4, 5 },
		{ 4, 5, 6 },
	};
	int num = 0;
	printf("请输入要查找的数字!\n");
	scanf("%d",&num);
	if (Search(arr, num) == 1)
	{
		printf("找到了!\n");
	}
	else
	{
		printf("不存在此数!\n");
	}
	system("pause");
	return 0;
}

おすすめ

転載: blog.csdn.net/weixin_44936160/article/details/91129278