在二维数组中查找一个数,二维数组是从左到右,从上到下依次递增

public class FindNum {
    public static boolean findANum(int[][] array, int target) {
        int row = array.length;//行数
        int cloumn = array[0].length;//列数
        int i = 0;
        int j = cloumn - 1;
        boolean found = false;
        while(i <= row-1 && j >= 0) {
            if(target < array[i][j]) {
                j--;
            }
            if(target > array[i][j]) {
                i++;
            }
            if(target == array[i][j]) {
                found = true;
                break;
            }
        }
        return found;
    }

    public static void main(String[] args) {
        int a[][]  = {{1,2,8,9},{2,4,9,12},{4,7,10,13}};
        System.out.println(a.length);
        System.out.println(a[0].length);
        System.out.println(findANum(a, 7));

    }

}
时间: 2024-10-30 00:12:12

在二维数组中查找一个数,二维数组是从左到右,从上到下依次递增的相关文章

输入一个有序数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字

输入一个有序数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字.如果有多对数字的和等于输入的数字,输出任意一对即可.例如输入数组1.2.4.7.11.15和数字15.由于4+11=15,因此输出4和11. 1 #include<stdio.h> 2 #include<stdlib.h> 3 4 void findTwo(int *array, int len, int sum) 5 { 6 int beg = 0; 7 int end = len-1; 8 int

14.输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。 要求时间复杂度是O(n)

待完善! 转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4259199.html 声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己也方便有类似问题的朋友,本文的思想也许有所借鉴,但源码均为本人实现,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明.谢谢. 题目: 输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字.要求时间复杂度是O(n).如果有多对数字的和等于输

输入一个已经按升序排序的数组和一个数字 ,在数组中查找两个数,使得他们的和是输入的那个数字

package shuzu; /* * 输入一个已经按升序排序的数组和一个数字 * 在数组中查找两个数,使得他们的和是输入的那个数字,要求时间复杂度为o(n) * 如果有多对数字的和等于输入的数字,输出任意一对即可. */ public class demo1 { private static void findAns(int[] data,int sum) { int size=data.length; int begin =0; int end=size-1; while(begin < s

(算法)旋转有序数组中查找某个数

题目: 假设有个有序数组在某个位置旋转,得到新的数组,即为旋转有序数组.如:(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). 现给定一个这样的数组,在数组中查找某个数.如果找到,返回下标,否则返回-1: 思路: 思路1: 考虑一个旋转有序数组的特点:前面部分是递增的,后面部分也是递增的,即先后两部分都为递增有序数组,因此可以用二分查找来做. 假设数组为A,下标从left到right,查找的数字为target,那么mid=(left+((right

【编程题目】输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。

第 14 题(数组):题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字.要求时间复杂度是 O(n).如果有多对数字的和等于输入的数字,输出任意一对即可.例如输入数组 1.2.4.7.11.15 和数字 15.由于 4+11=15,因此输出 4 和 11. 要求时间是O(n)肯定就只能扫描一遍. 又有两个数字要找,那就只能一个从头向后找 一个从后向前找 初始把大值设为最后一个数, 小值设为第一个数,如果数字和大于和,则减小大数的数值, 反之增大小

数组问题 1.行列有序二维数组中查找2.在一组数成对出现的数中有两个数只出现一次3.在移位数组中查找一个数

一.在一个二维数组中,每一行都按从左到右递增的顺序排序,每一列都按从上到下的递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路: 首先选取数组中右上角的数字.如果该数字等于要查找的的数字,查找过程结束:如果该数字大于要查找的数字,剔除这个数字所在的列:如果该数字小于要查找的数字,剔除这个数字所在的行.也就是说如果要查找的数字不在数组的右上角,则每一次都在数组的查找范围剔除一行或一列,这样每一步都可以缩小查找的范围. 实现过程如下: 运行结果如下:

在二维数组中查找一个数

在一个二维数组中,每一行都按照从左到右递增的顺序排列,每一列也按照从上到下递增的顺序排列.在这样一个序列中查找一个数 1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15 例如查找7,就从第一行的最左边查找,9大于7,则9以下的也不用再查找,就从8开始,8大于7,8以下的就不用再查找,从2开始查找,2小于7,那么这一行2左边的就不用再查找,就从4开始,4小于7,那么这一行4左边的也不用再查找,从4下面行开始查找,代码如下: bool Find(int *a, int rows

在一个按行列递增的二维数组中查找一个数是否存在

唯一要求:二维数组按行列递增 巧妙的利用二分法的特性,先跟右上角的元素相比,大于行+1,小于列-1,否则返回行列 #include<iostream> using namespace std; #define M 3 void array_bsearch(int array[][M],int value) { int i=0;//行 int j=M-1;//列 while(i<sizeof(array)/M) while(j>=0) { if(value > array[i]

输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。

两种解题步骤1:考虑乘积最小的情况: public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { ArrayList<ArrayList<Integer>> lists = new ArrayList<>(); for(int i=0;i<array.length;i++){ ArrayList<Integer> list = new ArrayList<&