二维数组找最大值

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。

请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

我得思路是从左上角开始,即arr[0][0],将这个整数和它相比,如果比它大,那么将这个整数和arr[1][1]比

如果还大那么继续,如果小于arr[n][n],那么去arr[n][n]这个元素的左面和上面找,如果有说明在这个数组中

没有说明不在

这个想法首先只适用于方阵,并且查找效率并不是最好

答案的解法是从左下角开始

如果整数比这个元素大说明整数在这个元素的右边,

如果整数比这个元素小说明整数在这个元素的左边。

更新元素,重复上述步骤

如果这个元素已经到边界并且出界了还没找到,那么就是没有

int Search(int* arr,int x,int y,int num)
{
  //把二维数组当做一维数组处理
    if(arr == NULL || x <= 0 || y<= 0) return -1;
    int a = x-1;
    int b = 0;
    while(a >= 0 && a < x && b >=0 && b < y)
    {
        if(arr[a*y+b] > num)
        {
            a--;
        }
        else if(arr[a*y+b] < num)
        {
            b++;
        }
        else
            return 1;
    }
    return -1;
}

int main()
{
    int arr[5][5] = {1,55,79,82,88,
                     2,56,80,83,109,
                     3,57,81,84,110,
                     4,58,90,100,120,
                     5,59,99,111,122};

    int index = 0;
    index = Search((int*)arr,5,5,89);
    printf("%d",index);
    return 0;
}

原文地址:https://www.cnblogs.com/TheQi/p/9126299.html

时间: 2024-10-08 15:33:38

二维数组找最大值的相关文章

二维数组找鞍点

二维数组找鞍点(鞍点是行最大,列最小的一个数) 一个矩阵元素的"鞍点"是指该位置上的元素值在该行上最大.在该列上最小. 本题要求编写程序,求一个给定的n阶方阵的鞍点. 输入格式: 输入第一行给出一个正整数n(1≤n≤6).随后n行,每行给出n个整数,其间以空格分隔. 输出格式: 输出在一行中按照"行下标 列下标"(下标从0开始)的格式输出鞍点的位置.如果鞍点不存在,则输出"NONE".题目保证给出的矩阵至多存在一个鞍点. 输入样例1: 4 1 7

二维数组的最大值

一.题目: 返回一个二维整数数组中最大子数组的和. 要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二:结对编程要求: 两人结对完成编程任务. 一人主要负责程序分析,代码编程. 一人负责代码复审和代码测试计划. 发表一篇博客文章讲述两人合作中的过程.体会以及如何解决冲突(附结对开发的工作照). 三.代码: #include <iostream>#include <

二维数组求最大值

设计思想:      首先要用一段代码,可以读入txt文件里的二维数组.需要将txt文件放入同一目录.       其次要用一段代码得到最大子数组的和:主要思路与求一维数组方法相差不多,不过要有更多的循环和判断汲取了先者的成果,我们得出了方法.思路如下: 1.得到子数组的最大行.列数,从第一行开始,确定最大子数组的行列范围. 2.将确定的范围,把最大子数组按照一列有几个数,按行分开成.(例如第一个组中只有一行,而第二个组中有两行,列数和数组的列数保持一致) 3,对2中得到的数组,利用一维数组求子

js 输出二维数组的最大值

function num(arr){ max=a[0][0]; for (var i = 0; i < a.length; i++) { for (var j = 0; j< a[i].length; j++) { if (max<a[i][j]) { max=a[i][j]; } } } alert(max); } var a=[[5,6,7],[15,16,8,7],[3,23,44,55,66]]; num(a);

七、二维数组

1.只有一个下标的数组称为一维数组,有两个下标的数组称为二维数组,有N个下标的数组称为n维数组. 2.二维数组定义: 类型说明符 数组名[常量表达式1][常量表达式2] = {值1,值2,...}: int a[2][3] = {{7,6,3},{2,8,5}}; 说明2行3列的数组 3.常量表达式1表示第一维下标的长度 常量表达式2表示第二维下标的长度 4.二维数组的元素也称为双下标变量 5.赋值一般与两层for循环嵌套(双循环)使用.外层循环控制行数,内层循环控制每行对应的列数. 6.二维数

取二维数组最大值

//取二维数组最大值 var test=[[1,34],[456,2,3,44,234],[4567,1,4,5,6],[34,78,23,1]]; //1. junior    function getMaxOne(arr){        var tmp=[];        for(var i=0;i<arr.length;i++){            tmp[i]=0;            for(var j=0;j<arr[i].length;j++){ if(tmp[i]&l

C语言--二维数组,字符串数组,多维数组

#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { // int a[2][3]={ // {1,2,3}, // {4,5,6} // }; // int a[2][3]={1,2,3,4,5,6}; // //打印单个元素 // printf("%d",a[1][1]); // //元素没赋全,默认为0 // int b[2][3]={{1,2,3},{4}}; // /

环形二维数组求最大子矩阵

1.设计思路 结合环一位数组的开发经验,拓展到二维.与前者主要是时间复杂度没有做处理. 2.源代码 1 //作者:王炳午.董龙洋.日期:2015.3.24. 2 #include <iostream> 3 #include<stdlib.h> 4 #include<time.h> 5 using namespace std; 6 int maxMax(int amax[]) //求最大 7 { 8 int i; 9 int sum = 0; 10 int max; 11

一维数组,二维数组,三维数组,数组与指针,结构体数组,通过改变指针类型改变访问数组的方式

 打印数组中的每个元素,打印每个元素的地址: #include <stdio.h> #include <stdlib.h> void main(void) { int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; for (int *p = a; p < a + 10;p++)  //指针类型决定4个字节 { printf("\n%p,%d", p, *p); } getchar(); } 指针数组 #inclu