杨氏矩阵 中查找一个数字是否存在,时间复杂度小于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;}
相关文章推荐
- 2. 有一个二维数组.----杨氏矩阵 。数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N);
- 有一个二维数组.----杨氏矩阵 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N);
- 有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N)
- //杨氏矩阵 有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N);
- 有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N);
- 有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N);
- 杨氏矩阵中查找一个数-时间复杂度小于O(N)
- 一个数组中,存在两个只出现一次的数字,其余的数字均出现两次。要求在时间复杂度o(n),空间复杂度为o(1)的情况下找出这两个数字
- 查找矩阵中是否存在一个数
- 输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字 时间复杂度O(NlogN)
- 输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字 时间复杂度O(NlogN) 空间复杂度O(1)
- 一个数组中除了两个数字之外,其余数字均出现了两次,如{1,2,3,4,5,3,2,1}.查找出这两个只出现一次的数字。要求时间复杂度为O(n),空间复杂度为O(1)。
- 杨氏矩阵 有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。
- 写一个函数,判断单链表是否存在环,要求时间复杂度为O(n)
- 输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。 时间复杂度O(N) 空间复杂度O(N)
- 【练习】输入一个已经按升序排序过的数组和一个数字sum,在数组中查找两个数,使得它们 的和正好是输入的那个数字sum,要求时间复杂度为O(n)
- 【c语言】二维数组中的查找,杨氏矩阵在一个二维数组中,每行都依照从左到右的递增的顺序排序,输入这种一个数组和一个数,推断数组中是否包括这个数
- 题目:输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。 要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。 例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,
- 【c语言】二维数组中的查找,杨氏矩阵在一个二维数组中,每行都按照从左到右的递增的顺序排序,输入这样的一个数组和一个数,判断数组中是否包含这个数
- 判断一个整数数组中是否有重复数字出现的O(n)时间复杂度算法