力扣刷题之旅:启程篇(四)

        力扣(LeetCode)是一个在线编程平台,主要用于帮助程序员提升算法和数据结构方面的能力。以下是一些力扣上的入门题目,以及它们的解题代码。   

 --点击进入刷题地址


1.寻找旋转排序数组中的最大值

题目描述:

  • 给定一个旋转排序数组,要求找到其中的最大值。可以使用双指针法来解决该问题,首先找到旋转的位置,然后从两端开始向中间遍历数组,找到符合要求的两个数。 

解题思路:

  • 该题使用双指针法,首先找到旋转的位置,然后从两端开始向中间遍历数组,找到符合要求的两个数。时间复杂度为 O(n),空间复杂度为 O(1)。 

代码示例:

def findMax(nums):  
    left, right = 0, len(nums) - 1  
    while left < right:  
        pivot = nums[left]  
        while left <= right and nums[left] <= pivot:  
            left += 1  
        while left <= right and nums[right] > pivot:  
            right -= 1  
        if left > right:  
            break  
        nums[left], nums[right] = nums[right], nums[left]  
    return nums[right]

小结:

        “寻找旋转排序数组中的最大值”考察了双指针法的应用,通过巧妙地利用旋转排序数组的特性,找到了最大值的位置。


2.反转字符串中的单词顺序 

题目描述:

  • 给定一个字符串,要求反转字符串中每个单词的顺序并返回结果。可以使用字符串的 split() 方法拆分单词,并使用列表推导式反转每个单词最后使用 join() 方法将单词列表连接成字符串。

解题思路:

  • 该题可以使用字符串的 split() 方法将字符串拆分成单词列表,然后使用列表推导式将每个单词反转,最后使用 join() 方法将单词列表连接成字符串时间复杂度为 O(n)空间复杂度为 O(n)。 

代码示例:

def reverseWords(s):  
    words = s.split()  # 将字符串按空格拆分成单词列表  
    reversed_words = [w[::-1] for w in words]  # 将每个单词反转  
    return ' '.join(reversed_words)  # 将单词列表用空格连接成字符串并返回

 小结:

        “反转字符串中的单词顺序”则涉及到字符串操作和列表推导式的使用,通过拆分、反转和连接字符串,实现了单词顺序的反转。 


3.分割回文子串 

解题思路:

  • 该题可以使用动态规划算法来解决。定义一个二维数组 dp,其中 dp[i][j] 表示 s[i...j] 是否为回文串。状态转移方程为 dp[i][j] = (s[i] == s[j]) && dp[i+1][j-1],即当前字符相等且左右两侧子串均为回文串。时间复杂度为 O(n^2),空间复杂度为 O(n^2)。具体实现可以参考代码中的注释。

代码示例:

def longestPalindrome(s):  
    start, max_len = 0, 0  
    for i in range(len(s)):  
        if i - max_len > 1:  # 如果当前位置距离最长回文子串的起始位置超过1个字符,则更新起始位置和最大长度  
            start = i - max_len - 1  
        left, right = start, i - 1  # 定义左右指针,初始化为最长回文子串的起始位置和当前位置的前一个位置  
        while left >= 0 and right < len(s) and s[left] == s[right]:  # 如果左右指针所指的字符相等,则左右指针都向内移动一位,并更新最大长度为左右指针的距离加一  
            max_len += 2  
            left -= 1  
            right += 1  
    return start, max_len // 2  # 返回最长回文子串的起始位置和长度的一半(因为子串长度是偶数)

小结:

  •         “分割回文子串”实际上在描述和代码上存在一些混淆,但其核心是考察回文串的识别和动态规划的应用。通过定义一个二维数组来记录子串的回文状态,并利用状态转移方程来求解最长回文子串。 

4.移动零

题目描述:

  • 给定一个数组 nums,编写一个函数将所有 0 的元素移动到数组的末尾,同时保持非零元素的相对顺序不变。 

需求示例:

输入: [0, 1, 0, 3, 12]
输出: [1, 3, 12, 0, 0]

代码实现:

def move_zeros_to_end(nums):  
    # 使用双指针法,将非零元素移动到数组前面  
    non_zero_idx = 0  
    for num in nums:  
        if num != 0:  
            nums[non_zero_idx] = num  
            non_zero_idx += 1  
    # 将剩余的位置填充为0  
    for i in range(non_zero_idx, len(nums)):  
        nums[i] = 0  
    return nums

小结:

        “移动零”是一个相对简单的问题,通过双指针法将非零元素移动到数组前面,并在剩余位置填充零,实现了数组的调整。 


5.旋转矩阵 

题目描述:

  • 给定一个二维数组 matrix,将其按照顺时针方向旋转 90 度并返回结果。

需求示例:

输入:
[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
输出:
[
[7, 4, 1],
[8, 5, 2],
[9, 6, 3]
]

代码实现:

def rotate_matrix(matrix):  
    n = len(matrix)  
    # 顺时针旋转90度相当于矩阵转置后再翻转每一行  
    matrix = [list(x) for x in zip(*matrix)]  # 转置矩阵  
    for i in range(n):  
        matrix[i] = matrix[i][::-1]  # 翻转每一行  
    return matrix

 


 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

acwing869. 试除法求约数870. 约数个数AcWing871. 约数之和872. 最大公约数

869. 试除法求约数 思路&#xff1a; 约数和质数的求解有着共性&#xff0c; 就是都是使用 for (int i 1; i < n/i; i) 进行计算的。这样的原因是因为约数必然也是两两一组&#xff0c; 那么我们求出小的自然也就知道另一个&#xff0c;只要再判断一下n/i和i是否相同&a…

项目安全问题及解决方法-----xss处理

XSS 问题的根源在于&#xff0c;原本是让用户传入或输入正常数据的地方&#xff0c;被黑客替换为了 JavaScript 脚本&#xff0c;页面没有经过转义直接显示了这个数据&#xff0c;然后脚本就被 执行了。更严重的是&#xff0c;脚本没有经过转义就保存到了数据库中&#xff0c;随…

ReactNative实现文本渐变

我们直接上图&#xff0c;可以看到上面文本的效果&#xff0c;使用SVG实现 1.首先还是要引入react-native-svg库 2.使用该库下面的LinearGradient和Text 好&#xff0c;话不多说&#xff0c;我们看具体代码 <Svg width{422} height{30} viewBox{0 0 422 30}><Defs&…

力扣 第 383 场周赛 解题报告 | 珂学家 | Z函数/StringHash

前言 谁言别后终无悔 寒月清宵绮梦回 深知身在情长在 前尘不共彩云飞 整体评价 T3是道模拟题&#xff0c;但是感觉题意有些晦涩&#xff0c;T4一眼Z函数&#xff0c;当然StringHash更通用些。 新年快乐, _. T1. 将单词恢复初始状态所需的最短时间 I 思路: 模拟 就是前缀和为…

构建高效直播美颜系统:美颜SDK集成与性能优化指南

如今&#xff0c;美颜技术的广泛应用成为各类直播平台的标配之一。今天&#xff0c;小编将与大家进一步讨论如何构建高效的直播美颜系统&#xff0c;重点关注美颜SDK的集成和性能优化方面。 一、美颜SDK的选择与集成 选择合适的美颜SDK是构建高效直播美颜系统的第一步。不同的…

速过计算机二级python——第六讲:文件操作

第六讲:文件操作 文件夹创建文件夹移动文件夹复制文件夹删除文件夹文件操作文件读取文件写入文件文件夹 创建文件夹 定义创建文件夹函数:chmk_path()定义一个函数 chmk_path(),这个函数的功能是创建文件夹。 首先需要导入操作系统接口模块——os 模块,这个模块中包含某些函…

基于单片机控制的智能门锁设计

摘要&#xff1a;阐述基于STC15F2K60S2单片机控制的智能门锁设计&#xff0c;包括CPU控制单元模块、液晶显示LCD、 Wi-Fi模块&#xff0c;实现远程控制开门&#xff0c;密码开门的智能化功能。 关键词&#xff1a;控制技术&#xff0c;单片机&#xff0c;智能门锁&#xff0c;…

cesium-测量高度垂直距离

cesium做垂直测量 完整代码 <template><div id"cesiumContainer" style"height: 100vh;"></div><div id"toolbar" style"position: fixed;top:20px;left:220px;"><el-breadcrumb><el-breadcrumb-i…

WebChat——一个开源的聊天应用

Web Chat 是开源的聊天系统&#xff0c;支持一键免费部署私人Chat网页的应用程序。 开源地址&#xff1a;https://github.com/loks666/webchat 目录树 TOC &#x1f44b;&#x1f3fb; 开始使用 & 交流&#x1f6f3; 开箱即用 A 使用 Docker 部署B 使用 Docker-compose…

C++ 之LeetCode刷题记录(二十八)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 开始cpp刷题之旅。 目标&#xff1a;执行用时击败90%以上使用 C 的用户。 144. 二叉树的前序遍历 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍…

JAVA Web 学习(五)Nginx、RPC、JWT

十二、反向代理服务器——Nginx 支持热部署&#xff0c;几乎可以做到 7 * 24 小时不间断运行&#xff0c;即使运行几个月也不需要重新启动&#xff0c;还能在不间断服务的情况下对软件版本进行热更新。性能是 Nginx 最重要的考量&#xff0c;其占用内存少、并发能力强、能支持…

docker下nacos(1.2.0)的持久化

一、创建数据库 运行以下代码自动创建数据库和表 CREATE DATABASE IF NOT EXISTS nacos_config /*!40100 DEFAULT CHARACTER SET utf8 */; USE nacos_config;SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;-- ---------------------------- -- Table structure for config_…

【LeetCode】刷题总结 - 15. 三数之和

15. 三数之和 | LeetCode 思路 首先对 nums 进行排序&#xff0c;然后设置三个指针&#xff1a;left、mid、right&#xff1a; left 从最左边开始&#xff0c;依次向后遍历每次固定住 left 后&#xff0c;就化为一个 2sum 问题&#xff1a; mid left 1&#xff0c;right …

go-redis hash slot 之旅

搭建redis 集群 创建一个网桥 docker network create -d bridge --subnet192.168.148.0/24 --gateway192.168.148.1 -o parenteno1 redis-net通过docker 文件创建redis 集群&#xff0c; 这里注意要不要使用redis 7以上的版本&#xff0c;不然会出问题 version: "3&quo…

详解spring6.0新特性汇总

spring6新特性汇总 part1 spring6.0新特性 spring6.0 2022年11月。新一代框架带jdk17&jakarta ee9 https://www.graalvm.org/ part2 AOP&事务 1.AOP:面向切面编程 通过预编译方式和运行期动态 代理实现程序功能的统一维护的一种技术。 使用场景&#xff1a; 权…

vivado 手动设置自下而上的流量并导入网表、创建较低级别的网表

手动设置自下而上的流量并导入网表 要手动运行自下而上的流&#xff0c;请将较低级别的网表或第三方网表实例化为黑色盒子&#xff0c;Vivado工具在合成完成后将黑盒子融入完整的设计中。这个以下部分描述了该过程。 重要&#xff01;Vivado合成不合成或优化加密或非加密合成…

信任与创新 | 回顾通付盾的2023!

-END- 数信云&#xff0c;基于区块链与人工智能的数据安全应用与服务平台

ReactNative实现弧形拖动条

我们直接看效果 先看下面的使用代码 <CircularSlider5step{2}min{0}max{100}radius{100}value{30}onComplete{(changeValue: number) > this.handleEmailSbp(changeValue)}onChange{(changeValue: number) > this.handleEmailDpd(changeValue)}contentContainerStyle{…

【自动化测试】----Java的单元测试工具Junit5

目录 支持Java的最低版本为8在pom.xml添加依赖Junit提供的注解功能 断言 Assertion类提供的一些方法测试用例执行顺序 &#xff08;为了预防测试用例执行顺序错误&#xff09;参数化 &#xff08;假设登陆操作&#xff0c;用户名和密码很多&#xff0c;尽可能通过一个测试用例…

springboot+vue实现excel导出

后端 导入pom依赖 <dependency>x<groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><version>4.2.0</version> </dependency> Entity实体类 这里以User为例&#xff0c;可按照自己实际…