您的位置:首页 > 其它

杨氏矩阵 中查找一个数字是否存在,时间复杂度小于O(N)

2017-11-05 21:58 369 查看
#include<stdio.h>int FIND_NUMBER(int arr[3][3],int key){int i = 0,j = 2;//使数据从对角线的左上开始比较。while(i<3 && j>=0){if(key>arr[i][j])//如果key大于arr[i][j],则向下移动。{i=i+1;}else{if(key<arr[i][j])如果小于则向左移动。{j=j-1;}else{return arr[i][j];break;}}}return -1;}int main(){int i = 0,j = 0,key = 0,ret = 0;int arr[3][3]={0};for(i=0;i<3;i++){for(j=0;j<3;j++){arr[i][j]=i*3+j+1;printf("%d ",arr[i][j]);}printf("\n");}printf("please input a number: ");scanf("%d",&key);ret=FIND_NUMBER(arr,key);if(ret==-1){printf("oh,no\n");}else{printf("finded\n");}return 0;}
//方法2
#include<stdio.h>int FIND_NUMBER(int arr[3][3],int key){int i = 0,j = 0;从右上对角线开始for(i=0;i<3;i++){if(arr[i][i]==key){return arr[i][i];}if(key<arr[i][i])如果不小于,则进入for循环。{if(arr[i][i-1]==key){return arr[i][i-1];}else{if(arr[i-1][i]==key)return arr[i-1][i];}}}return -1;}int main(){int i = 0,j = 0,key = 0,ret = 0;int arr[3][3]={0};for(i=0;i<3;i++){for(j=0;j<3;j++){arr[i][j]=i*3+j+1;printf("%d ",arr[i][j]);}printf("\n");}printf("please input a number: ");scanf("%d",&key);ret=FIND_NUMBER(arr,key);if(ret==-1){printf("oh,no\n");}else{printf("finded\n");}return 0;}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐