每天一个算法之二维数组查找整数
2016-10-16 12:50
183 查看
/*
* 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
* 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
*
* 思路:每一行,下面的比上面的大,每一列右边的比左边的大。
* 从左下角开始,如果目标比开始位置的数小,则行坐标上移-1,如果比开始的位置大,列坐标右移+1
*
* 如果是正方形,最多循环n+m次,算法的时间复杂度为线性o(max(n,m))
*/
public
classmetrixfind {
publicstaticbooleanFind(int[][]array,inttarget)
{
/*二维数组的行数和列数*/
int rowCount = array.length;
int colCount = array[0].length;
int i, j;//i指定行的变化,j指定列的变化
//循环
for (i = rowCount - 1, j = 0; i >= 0&& j<colCount;)
{
if (target == array[i][j])
returntrue;
if (target<array[i][j])
{
i--;
continue;
}
if (target>array[i][j])
{
j++;
continue;
}
}
return
false;
}
publicstaticvoidmain(String args[]){
int[][] array={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
System.out.println(Find(array,0));
}
}
* 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
* 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
*
* 思路:每一行,下面的比上面的大,每一列右边的比左边的大。
* 从左下角开始,如果目标比开始位置的数小,则行坐标上移-1,如果比开始的位置大,列坐标右移+1
*
* 如果是正方形,最多循环n+m次,算法的时间复杂度为线性o(max(n,m))
*/
public
classmetrixfind {
publicstaticbooleanFind(int[][]array,inttarget)
{
/*二维数组的行数和列数*/
int rowCount = array.length;
int colCount = array[0].length;
int i, j;//i指定行的变化,j指定列的变化
//循环
for (i = rowCount - 1, j = 0; i >= 0&& j<colCount;)
{
if (target == array[i][j])
returntrue;
if (target<array[i][j])
{
i--;
continue;
}
if (target>array[i][j])
{
j++;
continue;
}
}
return
false;
}
publicstaticvoidmain(String args[]){
int[][] array={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
System.out.println(Find(array,0));
}
}
相关文章推荐
- 每天学习一算法系列(9) (输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果)
- 每天学习一算法系列(14) (输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字)
- 每天学习一算法系列(4) (输入一个整形数组,数组里有正数也有负数,数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和)
- 【每天一道算法题】给定一个存放整数的数组,要求数组左边为奇数,右边为偶数
- c语言经典算法——查找一个整数数组中第二大数
- c语言经典算法——查找一个整数数组中第二大数
- 对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。 给定一个整数数组A及它的大小n,同时给定要查找的元素val,请返回它在数组中的位置(从0开始),若不存在该元素,返回-1。若该元素出现多次,请返回第一次出现的位置。
- 每天学习一算法系列(4) (输入一个整形数组,数组里有正数也有负数,数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和)
- 每天一道算法题(二):给定数组Arr和一个整数aim,请返回哪两个位置的数可以加出aim来。
- 设定二维整数数组B[0..m-1,0..n-1]的数据在行,列方向上都按从小到大的顺序排序,且整形变量x中的数据在B中存在。设计一个算法,找出一对满足B[i][j]=x的I,j值,要求比较次数不超过m
- 整数型的有序递增数组循环右移x位后,查找指定整数 算法
- 每天一道算法题7 查找链表中倒数第k个结点 ; 输入一个单向链表。如果该链表的结点数为奇数,输出中间的结点;如果链表结点数为偶数,输出中间两个结点前面的一个
- 1查找一个整数数组中第二大的数、2分解质因数
- 每天学习一算法系列(26)(输入一个整数,求该整数的二进制表达中有多少个1)
- 每天学习一算法系列(32)(求一个矩阵中最大的二维矩阵(元素和最大))
- 算法题27 在一个int数组里查找这样的数,它大于等于左侧所有数,小于等于右侧所有数。
- 初始化一个有10个整数的数组,在数组中查找并输出最大值和最小值。
- JS算法:一个长度为n的数组存了1-n这n个整数,打乱顺序后去掉了其中三个,求去掉的三个数。
- [小算法] 使用递归将一个整数逆序放入一数组中
- 每天一道算法题8 在排序数组中查找和为给定值的两个数字