在有序二维数组快速查找元素
2018-03-18 19:03
190 查看
在有序二维数组快速查找元素
问题描述:给定int型二维数组array,array[i][j+1]>=array[i][j]和array[i+1][j]>=array[i][j]恒成立(对于任意合法的下标i,j)。输入一个int型数字target,若target在array中返回ture,否则返回false。
解题思路:
关键代码:/*************************************************/
/* 作者:codeology
/* 时间:2018-03-18
/* 说明:在有序二维数组寻找目标数
/* 变量:i,j,k,l ---> 索引下标
/* flag ---> 标记变量
/* target ---> 目标数
/* array ---> 二维数组
/*************************************************/
#include<stdio.h>
#define row 8
#define column 9
int find(int i, int j, int k, int l, int flag, int target, int array[row][column])
{
if((target < array[i][j]) || (target > array[k][l])) return 0;
int temp1, temp2;
switch(flag)
{
//自上向下搜索
case 1:
{
temp1 = i; temp2 = j;
while((i < k) && (array[i][j] < target)) i++; //按列搜索第一个不小于target元素
if(array[i][j] == target) return 1;
while((j < l) && (array[temp1][j] < target)) j++;//按行搜索第一个不小于target元素
if(array[temp1][j] == target) return 1;
if(i == k) i++; //如果这一列元素都小于target,此时不能轻易剔除i指向元素所在行
if(j == l) j++; //如果这一行元素都小于target,此时不能轻易剔除j指向元素所在列
find(temp1, temp2, i-1, j-1, -flag, target, array);
}
break;
//自下向上搜索
case -1:
{
temp1 = k; temp2 = l;
while((k > i) && (array[k][l] > target)) k--;
if(array[k][l] == target) return 1;
while((l > j) && (array[temp1][l] > target)) l--;
if(array[temp1][l] == target) return 1;
if(i == k) k--;
if(j == l) l--;
find(k+1, l+1, temp1, temp2, -flag, target, array);
}
break;
default:;
}
}
int main()
{
int array[row][column] = {
{1, 2, 3, 4, 5, 6, 7, 8, 9},
{10, 11, 12, 13, 14, 15, 16, 17, 18},
{19, 20, 21, 22, 23, 24, 25, 26, 27},
{28, 29, 30, 31, 32, 33, 34, 35, 36},
{37, 38, 39, 40, 41, 42, 43, 44, 45},
{46, 47, 48, 49, 50, 51, 52, 53, 54},
{55, 56, 57, 58, 59, 60, 61, 62, 63},
{64, 65, 66, 67, 68, 69, 70, 71, 72}
};
int target;
int flag = 1;
//scanf("%d", &target);
//对所有元素测试一遍
for(target = -7; target <= 80; target++)
{
if(find(0, 0, row - 1, column - 1, flag, target, array))
printf("%2d is ture |", target);
else
printf("%2d is false |", target);
if(target % 8 == 0 )
printf("\n");
}
return 0;
}
测试结果:
相关文章推荐
- 有序二维数组查找元素
- 判断二叉树是否平衡、求二叉树的镜像、按行列有序矩阵中快速查找元素是否存在
- 查找有序二维数组中的元素
- 有序二维数组查找元素
- 有序二维数组中查找指定元素
- 3 - 在有序二维数组中查找元素
- 在查找有序二维数组中查找元素
- 每天一道LeetCode-----在有序的二维数组中查找某个元素
- 如何进入Google,面试算法之道:在二维数组中的快速查找
- 二分搜索专题2-在有序二维数组中搜索一个元素
- 在数组中快速查找指定元素
- 1. Two Sum (快速排序;有序数组的查找: 两个指针; 哈希表)
- ] 两个有序非重数组,如果查找数组之间的重复元素 (未完成)
- 二维数组查找元素
- [面试] 算法(三) —— 有序二维数组的查找
- JQuery元素快速查找与操作
- Leetcode 240 Search a 2D Matrix II (二分法和分治法解决有序二维数组查找)
- 程序员面试金典: 9.4树与图 4.3给定一个有序整数数组,元素各不相同且按升序排列,创建一颗高度最小的二叉查找树。 ---快速解法
- 数组的查找,插入元素保证数组有序
- 清橙OJ 1082 查找第K小元素 -- 快速排序