二维数组中的查找&替换空格

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

【整体思路】

    例如下面的二维数组就是每行、每列都递增排序。如果在这个数组中查找7,则返回true;如果查找5,由于数组不含有该数字,则返回false。

1   2   8   9

2   4   9  12

4   7  10  13

6   8  11  15

    首先,我们选取右上角的数字9,由于9大于7,并且9还是第四列的第一个(也是最小的)数字,因此7不可能出现在9所在的列。于是我们把这一列从需要考虑的区域内剔除,之后只需要分析剩下的三列(如图a)。

    在剩下的矩阵中,位于右上角的数字是8。同样8大于7,因此8所在的列我们也可以剔除,接下来只分析剩下的两列即可(如图b所示)。

    在由剩余的两列组成的数组中,数字2位于数组的右上角,2小于7,所以要查找的7可能在2的右边,也有可能在2的下边。因为之前已经将2右边的列都剔除了,也就是说7不可能出现在2的右边,因此7只有可能出现在2的下边。于是把2所在的行剔除,只分析剩下的三行两列数字(如图c所示)。

    在剩下的数字中,数字4位于右上角,和前面一样,我们把数字4所在的行也剔除,最后剩下两行两列数字(如图d所示)

    在剩下的两行两列数字中,位于右上角的刚好就是我们要查找的数字7,于是查找结束。

    总结:

    从二维数组的右上角开始,将数组元素和target值进行比较,有三种情况:①若数组元素>target值,把数组的最右边一列去掉,因为由于所给数组的特性target不可能出现在右列;②若数组元素<target值,把数组的最上边一行去掉,因为由于所谓数组的特性target值不可能出现在上方。③若数组元素=target值,返回true。

    判断的前提是:row < rows && col >= 0。

    所以需要几个变量进行存储:①二维数组的行数:int rows = array.length;②二维数组的列数:int cols = array[0].length;;③当前元素所在行int row = 0;④当前元素所在列:int col = cols-1;

【代码】

public class Solution {

    public boolean Find(int target, int [][] array) {

        int rows = array.length;   //表示行数

         int cols = array[0].length;   //表示列数

         int row = 0; 

         int col = cols-1; 

         while(row=0){

            if(array[row][col] > target){

                col --;

            }else if(array[row][col] < target){

                //else if中的判断别忘掉写

                row ++;

            }else{

                return true;

             }

        }

         return false;

    }

}

2. 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

【整体思路】

①定义一个长度可变的StringBuffer用于存储新串

②遍历原字符串。若空格, StringBuffer中增加"%20",否则,StringBuffer增加原字符串中的第[i]个字符。

③将StringBuffer转换成字符串,返回。

【代码】

import java.util.*;

public class Solution {

    public String replaceSpace(StringBuffer str) {

    StringBuffer newstr = new StringBuffer();

        for(int i=0;i<str.length();i++){

            if(str.charAt(i)==' '){

                newstr.append("%20");

            }else{

                newstr.append(str.charAt(i));

            }

        }

        return newstr.toString();

    }

}

优:时间复杂度O(n),且不用考虑内存覆盖

缺:这种方法空间复杂度不好,因为定义了新的内存区域

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容