查找矩阵中是否存在一个数

题目意思:给定一个NxN的数字矩阵,每一行从左到右增加,每一列从上到下增加。查找其中是否存在一个数key。



算法思路:

  • 起始从右上角开始查找,a[i][j]初试值为a[0][n-1],循环下列
  • while( i < n && j >= 0)
    • 如果key < a[i][j],往左走,j–,
    • 如果key > a[i][j],则往下走,执行i++
    • 如果key == a[i][j],表示找到了

代码:

bool findNumber(vector <vector<int> > &a,int key){
    int m = a.size();
    bool flag = false;
    int i = 0,j = m-1;
    while(j >= 0 && i < m){
        cout<<i<<"-"<<j<<endl;
        if(key > a[i][j]){
            i++;
        } else if(key < a[i][j]){
            j--;
        } else{
            flag = true;
            break;
        }
    }
    return flag;
}
时间: 2024-08-26 18:31:13

查找矩阵中是否存在一个数的相关文章

用最小的内存和二分法查找数组中是否存在这个数

package Test; public class Test { //用最小的内存查找数组中是否存在这个数 public static void main(String[] args) { int [] arr = {12,2,3,4,5,6,7,8,90,76,43}; byte[] byt = new byte[100]; for (int i = 0; i < arr.length; i++) { byt[arr[i]] = 1; } int n = 13; if(byt[n] == 1

R语言-找出向量或矩阵中的最大10个数

一.向量 最大10的数的索引(位置),可先按降序排序,得到索引号,然后将前10个取出即可. 建议方法: order(x,decreasing=TRUE)[1:10] 过程详解: 1.测试数据x > x [1] 0.00 0.00 0.00 0.00 0.00 0.00 0.06 0.09 0.20 0.09 0.08 0.14 0.14 0.23 [15] 0.08 0.06 0.12 0.20 0.14 0.11 0.20 0.14 0.17 0.15 0.18 0.15 0.20 0.12

python列表--查找集合中重复元素的个数

方法一: >>> mylist = [1,2,2,2,2,3,3,3,4,4,4,4] >>> myset = set(mylist) >>> for item in myset: print("the %d has found %d" %(item,mylist.count(item))) the 1 has found 1 the 2 has found 4 the 3 has found 3 the 4 has found 4

【c语言】二维数组中的查找,杨氏矩阵在一个二维数组中,每行都依照从左到右的递增的顺序排序,输入这种一个数组和一个数,推断数组中是否包括这个数

// 二维数组中的查找,杨氏矩阵在一个二维数组中.每行都依照从左到右的递增的顺序排序. // 每列都依照从上到下递增的顺序排序.请完毕一个函数,输入这种一个数组和一个数.推断数组中是否包括这个数 #include <stdio.h> #define col 4 #define rol 4 int yang(int(*p)[col], int num) { int i = 0; int j = col - 1; while (j+1) { int *q = &(p[i][j]); if

杨氏矩阵中的查找

杨氏矩阵 杨氏矩阵中,每行元素是递增的,每列元素也是递增的.即a[i][j]<a[i+1][j]且a[i][j]<a[i][j+1].要在这样的矩阵中查找某个数值元素的位置,复杂度可以达到o(m+n),其中n为矩阵行长度,m为矩阵列长度. 开始我想的是每一行使用二分查找,时间复杂度为O(n * logm) 看到网上使用的定位法,时间复杂度为O(n + m) 首先定位到第一行最后一个元素,如果要查找的数等于这个元素,直接返回true.如果array[i][j]>num,向前寻找,如果arr

杨氏矩阵中查找元素

在杨氏矩阵中查找一个元素是否存在 杨氏矩阵即每一行均以递增顺序排列,每列从上到下也为递增顺序 方法一:数组 #include<stdio.h> #include<stdlib.h> #define COLS 3 #define ROWS 3 //要查找只要在找到右上角的元素和输入元素进行比较.如果右上角元素大,即可排除其他行,若小 //,则可排除本行,继续循环,用输入元素和右上角的元素进行比较 int find(int arr[][COLS], int rows, int cols

(每日算法)LeetCode --- Word Search(矩阵中查找单词)

在矩阵中查找给定的单词是否出现,可以向上.向下.向左和向右查找.不能在一个字母上重复查找. Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically n

LintCode-排序矩阵中的从小到大第k个数

在一个排序矩阵中找从小到大的第 k 个整数. 排序矩阵的定义为:每一行递增,每一列也递增. 您在真实的面试中是否遇到过这个题? Yes 样例 给出 k = 4 和一个排序矩阵: [ [1 ,5 ,7], [3 ,7 ,8], [4 ,8 ,9], ] 返回 5. 挑战 使用O(k log n)的方法,n为矩阵的宽度和高度中的最大值. 标签 Expand 相关题目 Expand 分析:一般这种题都是用一个最大/最小堆,每次取出其中最大/最小的一个,然后把和这个数相关的(比它大/小)数压入堆中,知道

JAVA基础(数组)数组排序和查找数组中是否还有某一个数

数组排序和数组中含有某一个数 import java.util.Arrays;class Demo4 { public static void main(String[] args) { //数组中的使用工具:Arrays int[] arr = {1,2,4,5}; //查找数组中是否还有某一个数 int num = 3; //有 : 对应索引位置 int result = Arrays.binarySearch(arr,num); System.out.println(result); //