.有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N); 1 2 3 2 3 4 3 4 5 [cpp] view plain copy #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> char find_num(int arr[][4],int ROW,int LINE,int n) { int row = 0; int line = LINE-1; while(row<ROW,line>=0) { if(arr[row][line]==n) return 'y'; else if(arr[row][line]<n) row++; else line--; } return 'n'; } int main() { int arr[4][4]={{1,2,3,4},{5,6,7,8},{6,7,8,9},{10,11,12,13}}; int num = 1; char ret = find_num(arr,4,4,num); if(ret=='y') { printf("在\n"); } else { printf("不在\n"); } system("pause"); return 0; } [cpp] view plain copy #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> char find_num(int arr[][4],int ROW,int LINE,int n) { int row = ROW-1; int line = 0; while(row>=0,line<LINE) { if(arr[row][line]==n) return 'y'; else if(arr[row][line]<n) line++; else row--; } return 'n'; } int main() { int arr[4][4]={{1,2,3,4},{5,6,7,8},{6,7,8,9},{10,11,12,13}}; int num = 1; char ret = find_num(arr,4,4,num); if(ret=='y') { printf("在\n"); } else { printf("不在\n"); } system("pause"); return 0; }