• 4. 二维数组中的查找


      题目中有些特殊的地方,一定是用来结题的地方。查找类的问题多往有序性上靠,在一个有序的集合内查找要和二分查找类比,大于往左,小于向右。这一题我开始只想到了从一开始往右或者往下,思维定式,看一个数组总是想着按顺序从左往右or从上向下。

      写的时候也出现了一点意外,我居然在每次循环的时候重置了循环终止的条件,这不就是死循环了吗……所以提交的时候提醒我检查是否循环出现了错误,看来出错的不只我一个。

    ublic class Solution {
        public boolean Find(int target, int [][] array) {
             int len = array[0].length;
            int hi = array.length;
            int i = 0;
            int j = hi-1;
      
    
            while (i<=len-1 && j>=0){
           i = 0;
           j = h1-i;
    if(target>array[i][j]){ //如果target比该位置上的数大,就往下走 i += 1; }else if (target<array[i][j]){ j -= 1; }else if(target == array[i][j]) { return true; } } return false; } }

      

      正确答案很是简介,大了往下走,小了往左走。很想电视里猜一个物品价格的方式。一开始我在数组的下标也犯错了,长度不是下标!!!!长度不是下标!!!!!

      不过这种模式也很常见,如果在一个循环里能够解决某个问题就返回true,如果在循环里没有解决,在循环外面返回的内容就是false。

    ublic class Solution {
        public boolean Find(int target, int [][] array) {
             int len = array[0].length;
            int hi = array.length;
            int i = 0;
            int j = hi-1;
      
    
            while (i<=len-1 && j>=0){
                if(target>array[i][j]){
                    //如果target比该位置上的数大,就往下走
                    i += 1;
               
                }else if (target<array[i][j]){
                    j -= 1;
                   
                }else if(target == array[i][j])  {
                    return true;
                }
            }
    
            return false;
        }
    }
  • 相关阅读:
    关于题目中的内存限制
    手动实现最小堆和最大堆(优先队列)
    线性筛素数(欧拉筛)+前缀和优化
    并查集
    快速排序

    字典按中文姓名排序
    oc程序代码
    学生字典计算年龄差 随机50个数
    nsset
  • 原文地址:https://www.cnblogs.com/AshOfTime/p/10394798.html
Copyright © 2020-2023  润新知