(2)剑指Offer之二维数组查找和替换空格问题

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

一 二维数组查找

题目描述:

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

问题解析:

这一道题还是比较简单的,我们需要考虑的是如何做,效率最快。这里有一种很好理解的思路:

矩阵是有序的,从左下角来看,向上数字递减,向右数字递增,
因此从左下角开始查找,当要查找数字比左下角数字大时。右移

要查找数字比左下角数字小时,上移。这样找的速度最快。

示例代码:

    public boolean Find(int target, int [][] array) {
        //基本思路从左下角开始找,这样速度最快
       int row = array.length-1;//行
        int column = 0;//列
        //当行数大于0,当前列数小于总列数时循环条件成立
        while((row >= 0)&& (column< array[0].length)){
            if(array[row][column] > target){
                row--;
            }else if(array[row][column] < target){
               column++;
            }else{
                return true;
            }
        }
        return false;
    }

二 替换空格

题目描述:

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

问题分析:

这道题不难,我们可以通过循环判断字符串的字符是否为空格,是的话就利用append()方法添加追加“%20”,否则还是追加原字符。

或者最简单的方法就是利用: replaceAll(String regex,String replacement)方法了,一行代码就可以解决。

示例代码:

常规做法:

    public String replaceSpace(StringBuffer str) {
        StringBuffer out=new StringBuffer();
        for (int i = 0; i < str.toString().length(); i++) {
            char b=str.charAt(i);
            if(String.valueOf(b).equals(" ")){
                out.append("%20");
            }else{
                out.append(b);
            }
        }
        return out.toString();     
    }

一行代码解决:

    public String replaceSpace(StringBuffer str) {
        //return str.toString().replaceAll(" ", "%20");
        //public String replaceAll(String regex,String replacement)
        //用给定的替换替换与给定的regular expression匹配的此字符串的每个子字符串。 
        //\ 转义字符. 如果你要使用 "\" 本身, 则应该使用 "\\". String类型中的空格用“\s”表示,所以我这里猜测"\\s"就是代表空格的意思
        return str.toString().replaceAll("\\s", "%20");
    }

欢迎关注我的微信公众号(分享各种Java学习资源,面试题,以及企业级Java实战项目回复关键字免费领取):
微信公众号

目录
相关文章
|
11月前
|
前端开发 安全 Java
【Spring】Spring Boot项目创建和目录介绍
【Spring】Spring Boot项目创建和目录介绍
284 2
节流
【10月更文挑战第17天】
|
前端开发
css用法 :is()、:where()和:has()的用法
【4月更文挑战第2天】 css用法 :is()、:where()和:has()的用法
256 12
|
负载均衡 算法 网络协议
LVS、Nginx和HAProxy负载均衡器对比总结
LVS、Nginx和HAProxy负载均衡器对比总结
|
XML 存储 JavaScript
XML DOM - 访问节点
DOM 允许访问 XML 文档的每个节点, 主要通过三种方式: 1. 使用 `getElementsByTagName()` 方法; 2. 循环遍历节点树; 3. 利用节点间关系导航。`getElementsByTagName()` 返回节点列表, 类似数组结构。示例代码加载 &quot;books.xml&quot; 到 xmlDoc, 并存储结果于变量 x 中。
|
运维 JavaScript Serverless
Serverless 应用引擎产品使用之在阿里函数计算中,Php环境,配置取消禁止函数exec如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
404 4
|
SQL 负载均衡 网络协议
高性能数据访问中间件 OBProxy(四):一文讲透连接管理
引言上篇内容我讲到 OBProxy 的问题排查,将你在使用 OBProxy 时可能遇到的问题一一分析,并给出经过实践验证的解决方案。从本篇开始,我将介绍 OBProxy 在OceanBase分布式架构中的作用和原理,帮助你更透彻地了解OBProxy,实现“好用”和“用好”。同时,OBProxy 在上百家企业的持续运行,我积累了大量的工程实践经验,也将遇到的问题作为案例,伴随 OBProxy 的原理
720 110
高性能数据访问中间件 OBProxy(四):一文讲透连接管理
|
SQL 分布式计算 Java
阿里云MaxCompute-Hive UDF(Java)迁移上云实践
阿里云MaxCompute-Hive UDF(Java)迁移上云实践
|
机器学习/深度学习 人工智能 自然语言处理
这 10 本书,带你了解 ChatGPT 的底层逻辑
作为一门应用型学科,机器学习植根于数学理论,落地于代码实现。这就意味着,掌握公式推导和代码编写,方能更加深入地理解机器学习算法的内在逻辑和运行机制。 本书在对全部机器学习算法进行分类梳理的基础上,分别对监督学习单模型、监督学习集成模型、无监督学习模型、概率模型四个大类共 26 个经典算法进行了细致的公式推导和代码实现,旨在帮助机器学习的学习者和研究者完整地掌握算法细节、实现方法以及内在逻辑。
313 0
|
SQL 安全 中间件
中间件常见漏洞之IIS 2
中间件常见漏洞之IIS
456 0

热门文章

最新文章