zoukankan      html  css  js  c++  java
  • 有序二维数组的查找

    问题描述:在一个二维数组上,每一行都按照从左到右递增的顺序排列,每一列都按照从上到下递增的顺序排列。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

    示例:

      1  2  8  9

      2  4  9  12

      4  7  10  13

      6  8  11  15

     

    查找9时,打印查到了;

    查找5时,打印未查到。

     

     

    分析:

    首先选取数组中右上角的数字。如果该数字等于要查找的数字,查到了,列数递减,继续循环;如果该数字大于要查找的数字,剔除这个数字所在;如果该数字小于要查找的数字,剔除这个数字所在的

     

     

     

    - (void)viewDidLoad {

        [super viewDidLoad];

        // Do any additional setup after loading the view, typically from a nib.

        

        NSArray *array=@[@[@1,@2,@8,@9],@[@2,@4,@9,@12],@[@4,@7,@10,@13],@[@6,@8,@11,@15]];

        /*

         打印原数组

         */

        NSString *oldArrayStr = @" ";

        for (int row=0; row<array.count; row++) {

            NSArray *oneArray = array[row];

            for (int column=0; column<oneArray.count; column++) {

                oldArrayStr = [oldArrayStr stringByAppendingString:@"  "];

                NSNumber *currentNumber = oneArray[column];

                oldArrayStr = [oldArrayStr stringByAppendingString:currentNumber.description];

            }

            oldArrayStr = [oldArrayStr stringByAppendingString:@" "];

     

        }

        NSLog(@"%@",oldArrayStr);

        /*

         调用查找函数

         */

        BOOL found = [self findNumber:5 withArray:array rows:4 columns:4];

        NSLog(@"found %@",found?@"查到了":@"未查到");

        

    }

     

    -(BOOL)findNumber:(NSInteger)number withArray:(NSArray *)array rows:(NSInteger)rows columns:(NSInteger)columns {

        BOOL found = NO;

        NSInteger row=0;

        NSInteger column = columns - 1;

        while (row<rows && column >= 0) {

            NSArray *oneArray = array[row];

            NSNumber *currentNumber = oneArray[column];

            if (currentNumber.integerValue == number) {

                found = YES;

                NSLog(@"row %ld column %ld",row,column);

    //            break;

                //删除列

                column = column - 1;

            } else if (currentNumber.integerValue > number) {

                //删除列

                column = column - 1;

            } else {

                //删除行

                row = row + 1;

            }

        }

        

        return found;

    }

     

    调用函数查找5,运行:

    2018-12-18 13:43:43.706342+0800 GCDDemo[75603:17623605] 

      1  2  8  9

      2  4  9  12

      4  7  10  13

      6  8  11  15

    2018-12-18 13:43:43.706539+0800 GCDDemo[75603:17623605] found 未查到

     

     

    调用函数查找9,运行:

    2018-12-18 13:54:26.986167+0800 GCDDemo[75764:17629506] 

      1  2  8  9

      2  4  9  12

      4  7  10  13

      6  8  11  15

    2018-12-18 13:54:26.986270+0800 GCDDemo[75764:17629506] row 0 column 3

    2018-12-18 13:54:26.986342+0800 GCDDemo[75764:17629506] row 1 column 2

    2018-12-18 13:54:26.986421+0800 GCDDemo[75764:17629506] found 查到了

  • 相关阅读:
    TreeMap Red-Black tree
    Java实现生产者消费者问题与读者写者问题
    一个对象占用多大内存
    MySQL索引背后的数据结构及算法原理
    Java并发编程与技术内幕:线程池深入理解
    Java Spring 中你不知道的注入方式
    面试中的排序算法总结
    JAVA反射
    StringBuilder与StringBuffer的区别
    Java多线程总结【转】
  • 原文地址:https://www.cnblogs.com/huangzs/p/10136702.html
Copyright © 2011-2022 走看看