【LeetCode】剑指 Offer <二刷>(2)

news2024/11/25 7:51:39

目录

题目:剑指 Offer 04. 二维数组中的查找 - 力扣(LeetCode)

题目的接口:

解题思路:

代码:

过啦!!!

题目:剑指 Offer 05. 替换空格 - 力扣(LeetCode)

题目的接口:

解题思路:

代码:

过啦!!!

写在最后:


题目:剑指 Offer 04. 二维数组中的查找 - 力扣(LeetCode)

题目的接口:

func findNumberIn2DArray(matrix [][]int, target int) bool {

}

解题思路:

这道题一上来呢,作为暴力选手还是能一下想到暴力解法的,就是直接暴力枚举全部值查找即可,不过这道题非常的经典,所以我也直接能够想到他的优化解法,

至于我是怎么想到的,做的题多自然就能想到了,比较简单,根据题目的特性,可以从右上角或者左下角开始查找,我这里选择的右上角,然后如果当前位置比 target 小就往左查找如果当前位置比 target 大就往下查找,这样就优化成了 O(N) 的算法

代码:

func findNumberIn2DArray(matrix [][]int, target int) bool {
    i, j := len(matrix) - 1, 0
    for i >= 0 && j < len(matrix[0]) {
        if target < matrix[i][j] {
            i--
        } else if target > matrix[i][j] {
            j++
        } else {
            return true
        }
    }
    return false
}

过啦!!!

题目:剑指 Offer 05. 替换空格 - 力扣(LeetCode)

题目的接口:

func replaceSpace(s string) string {

}

解题思路:

这道题看完我能想到两个解法,一个是直接把空格替换成 %20 这样做的话时间复杂度很大,效率很低,很明显不适合,所以我就能想到第二种优化时间的方法,

方法二是再创建一个字符串,将就字符串追加到新字符串上,如果遇到空格就追加 %20,这个也是最容易想到的优化办法,但是空间复杂度会有所消耗,这里是代码:

func replaceSpace(s string) string {
    var arr string
    for _, c := range s {
        if c == ' ' {
            arr += "%20"
        } else {
            arr += string(c)
        }
    }
    return arr 
}

那有没有更好的算法呢?实际上是有的,这里我参考的是代码随想录发到 LeetCode 题解区的解法,用的是一个双指针的解法,具体操作如下:1)遍历原数组,根据需要的空间定量扩大原数组;2)从后往前遍历,一个指针指向原数组尾,另一个指向新的尾,遇到空格就追加 %20

代码:

func replaceSpace(s string) string {
    // 遍历原数组,并定量扩容
    b := []byte(s)
    length := len(b)
    spaceCount := 0
    for _, v := range b {
        if v == ' ' {
            spaceCount++
        }
    }
    reSize := spaceCount * 2
    tmp := make([]byte, reSize)
    b = append(b, tmp...)
   
    // 根据要求追加内容
    i := length - 1
    j := len(b) - 1
    for i >= 0 {
        if b[i] != ' ' {
            b[j] = b[i]
            i--
            j--
        } else {
            b[j] = '0'
            b[j - 1] = '2'
            b[j - 2] = '%'
            i--
            j -= 3
        }
    }
    return string(b)
}

过啦!!!

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/977533.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ROS 05】ROS常用组件

在ROS中内置一些比较实用的工具&#xff0c;通过这些工具可以方便快捷的实现某个功能或调试程序&#xff0c;从而提高开发效率&#xff0c;本章主要介绍ROS中内置的如下组件: TF坐标变换&#xff0c;实现不同类型的坐标系之间的转换&#xff1b;rosbag 用于录制ROS节点的执行过…

基于springboot实现了后台定时统计数据报表并将数据生成excel文件作为附件,然后通过邮件发送通知的功能

概述 本例子基于springboot实现了后台定时统计数据报表并将数据生成excel文件作为附件&#xff0c;然后通过邮件发送通知的功能。 详细 一、准备工作 1、首先注册两个邮箱&#xff0c;一个发送邮箱&#xff0c;一个接收邮箱。 2、发送邮箱开启IMAP/SMTP/POP3服务&#xff0c…

服务器间 ssh 免密登录

1、在所有服务器生产密钥文件 ssh-keygen -t rsa一直空格就可以 2、查看所有节点的公钥文件 cat /home/bigdata/.ssh/id_rsa.pub3、将所有节点的公钥文件写入到authorized_keys文件中 4、将authorized_keys文件分发给其他节点并修改权限 #注意查看authorized_keys文件的权…

131.【MySQL_基础篇】

MySQL_基础篇 (一)、MySQL 介绍1.MySQL三大阶段(1).基础篇(2).进阶篇(3).运维篇 2.MySQL 概念3.数据模型(1).关系型数据库(RDBMS) 4.数据库三大范式 (二)、SQL 编程语言1.SQL通用语法2.SQL 四大分类3.DDL (数据定义语言)(1).数据库操作 ->(增删改查)(2).表操作 -> (增删改…

整数拆分【动态规划】

整数拆分 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 class Solution {public int integerBreak(int n) {int[] dp new int[n 1];//正整数&#x…

day 48|● 583. 两个字符串的删除操作 ● 72. 编辑距离

583. 两个字符串的删除操作 dp的含义&#xff1a;指0开头&#xff0c;i- 1和j - 1为结尾的两个序列的删除最小数 递推公式方面&#xff1a; 初始化方面&#xff1a;前面0行和0列的初值要赋好 func minDistance(word1 string, word2 string) int {dp : make([][]int, len(wor…

工具教程【甜心转译】-双语字幕、中文语音生成,打破信息差

甜心转译是一款AI加持的音/视频生成双语字幕、中文语音的软件。帮助人们更容易的获取外语信息、不管是学习、还是娱乐&#xff0c;快人一步。 主要功能 字幕生成&#xff1a;只需几个简单的步骤&#xff0c;轻松生成字幕。字幕翻译&#xff1a;只需一键&#xff0c;就可以将字…

JavaScript代码中字符串如何换行?

在工作中&#xff0c;代码提交之前可能会有一些语法检查的限制&#xff0c;限制我们的单行代码长度。 对于一些逻辑代码&#xff0c;有多种换行方式。这里主要记录一下对于字符串过长情况的处理方式。 对于字符串&#xff0c;除了使用 进行字符串拼接之外&#xff0c;也可以…

算法通关村第12关【青铜】| 字符串转换问题

1.转换成小写字母 思路&#xff1a;ASCll码中&#xff0c;a-z&#xff1a;97-122 A-Z&#xff1a;65-90 小写转大写-32&#xff0c;大写转小写32 class Solution {public String toLowerCase(String s) {int len s.length();StringBuilder str new StringBuilder();for(int…

windos设置环境变量--java环境变量

1.右键此电脑---属性 2.点高级系统设置 3.点环境变量 4.点新建--自定义变量名 5.找到安装路径&#xff0c;并且找到bin目录下的启动程序 验证&#xff1a;winR 输入cmd

Elasticsearch 全文搜索引擎 ---- IK分词器

原理&#xff1a;分词的原理&#xff1a;二叉树 首先讲一下为什么要出这个文章&#xff0c;前面我们讲过分词方法&#xff1a;中文分词搜索 pscws&#xff08;感兴趣的同学可以去爬楼看一下&#xff09;&#xff0c;那为什么要讲IK分词&#xff1f;最主要的原因是&…

uniapp 手机 真机测试 ​ 云打包 要是没申请 可以使用云打包 然后采用 测试权限即可​

uniapp 手机 真机测试 打开手机 找到手机的 版本号 点击 知道提示 &#xff08;启动开发者模式&#xff09; 然后 在进行usb的连接打开 运行uniapp 到手机基台 手机确认 即可 四&#xff0c; 云打包 要是没申请 可以使用云打包 然后采用 测试权限即可

SpringMVC <url-pattern/>解读

1. < url-pattern/>的值 (1).使用拓展名的方式&#xff0c;语法*.xxx&#xff0c;xxx是自定义的拓展名&#xff0c;常用的方式*.do&#xff0c;*.action,不能使用*.jsp. (2).使用斜杠 "/"当项目中使用了 / &#xff0c;他会替代tomcat中的default。导致所有的…

OpenCV(二十一):椒盐噪声和高斯噪声的产生

目录 1.图像噪声介绍 2.椒盐噪声的产生 3.高斯噪声的产生 1.图像噪声介绍 噪声介绍 图像噪声是指在图像中存在的不期望的、随机的像素值变化&#xff0c;这些变化来源于多种因素。噪声可能导致图像细节模糊、失真或难以分辨。 以下是几种常见的图像噪声类型&#xff1a; 1…

Go语言中的数组、切片和映射解析

目录 数组数组的声明数组循环 切片切片声明切片元素循环 映射Map的声明及初始化Map的遍历 数组 数组存放的是固定长度、相同类型的数据&#xff0c;而且这些存放的元素是连续的。 数组的声明 例如声明一个整形数组&#xff1a; array : [3]int{1, 2, 3}在类型名前加 [] 中括…

MySQL之MHA高可用配置及故障切换

目录 一、MHA概念 1、MHA的组成 2、MHA的特点 3、主从复制有多少种复制方法 二、搭建MySqlMHA部署 1&#xff0e;Master、Slave1、Slave2 节点上安装 mysql 2&#xff0e;修改 Master、Slave1、Slave2 节点的 Mysql主配置文件/etc/my.cnf 3. 配置 mysql 一主两从 4、安…

【计算机网络】 ARP协议和DNS协议

文章目录 数据包在传输过程中的变化过程单播组播和广播ARP协议ARP代理免费ARP路由数据转发过程DNS协议 数据包在传输过程中的变化过程 在说ARP和DNS之前&#xff0c;我们需要知道数据包在传输过程的变化过程 从图片中可以看到&#xff0c;发送方的原数据最开始是在应用层&…

SystemVerilog 第5章 面向对象编程基础

5.1概述 对结构化编程语言,例如 Verilog和C语言来讲,它们的数据结构和使用这些数据结构的代码之间存在很大的沟壑。数据声明、数据类型与操作这些数据的算法经常放在不同的文件里,因此造成了对程序理解的困难。 Verilog程序员的境遇比C程序员更加棘手,因为Ⅴ erilog语言…

《服务端开发技术、方法与实用解决方案》——AIC松鼠活动第八期

AI 时代&#xff0c;程序员无需焦虑 ChatGPT 横空出世后&#xff0c;“AI 即将取代程序员” 的观点一度引发热议&#xff0c;至今尚未完全冷却。作为一名服务端开发工程师&#xff0c;同时也是 ChatGPT 的“忠实”用户&#xff0c;经过将近一年的使用&#xff0c;今天抽空写一篇…

智慧园区用水用电信息管理系统:实现高效节能的现代化园区管理

随着科技的不断发展&#xff0c;各类产业园区在我国经济社会发展中发挥着越来越重要的作用。为了提高园区的运营效率、降低能源消耗、实现绿色可持续发展&#xff0c;智慧园区用水用电信息管理系统应运而生。本文将从系统背景、功能特点、应用优势等方面进行详细介绍。 一、系统…