【数据结构与算法】解题20240312

在这里插入图片描述


这里写目录标题

  • 一、字符串转换整数 (atoi)
  • 二、1. 两数之和
  • 三、128. 最长连续序列
  • 四、73. 矩阵置零

一、字符串转换整数 (atoi)

请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。

函数 myAtoi(string s) 的算法如下:

读入字符串并丢弃无用的前导空格
检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。
读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。
将前面步骤读入的这些数字转换为整数(即,“123” -> 123, “0032” -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。
如果整数数超过 32 位有符号整数范围 [−231, 231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被固定为 −231 ,大于 231 − 1 的整数应该被固定为 231 − 1 。
返回整数作为最终结果。
注意:

本题中的空白字符只包括空格字符 ’ ’ 。
除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。

示例 1:

输入:s = “42”
输出:42
解释:加粗的字符串为已经读入的字符,插入符号是当前读取的字符。
第 1 步:“42”(当前没有读入字符,因为没有前导空格)
^
第 2 步:“42”(当前没有读入字符,因为这里不存在 ‘-’ 或者 ‘+’)
^
第 3 步:“42”(读入 “42”)
^
解析得到整数 42 。
由于 “42” 在范围 [-231, 231 - 1] 内,最终结果为 42 。
示例 2:

输入:s = " -42"
输出:-42
解释:
第 1 步:" -42"(读入前导空格,但忽视掉)
^
第 2 步:" -42"(读入 ‘-’ 字符,所以结果应该是负数)
^
第 3 步:" -42"(读入 “42”)
^
解析得到整数 -42 。
由于 “-42” 在范围 [-231, 231 - 1] 内,最终结果为 -42 。
示例 3:

输入:s = “4193 with words”
输出:4193
解释:
第 1 步:“4193 with words”(当前没有读入字符,因为没有前导空格)
^
第 2 步:“4193 with words”(当前没有读入字符,因为这里不存在 ‘-’ 或者 ‘+’)
^
第 3 步:“4193 with words”(读入 “4193”;由于下一个字符不是一个数字,所以读入停止)
^
解析得到整数 4193 。
由于 “4193” 在范围 [-231, 231 - 1] 内,最终结果为 4193 。

class S8:
    def func(self, s):
        i = 0
        n = len(s)
        while i < n and s[i] == ' ':
            i += 1
        if i == n or n == 0:  # 如果找不到字符串,返回0
            return 0
        # 判断正负数
        flag = 1
        if s[i] == '-':
            flag = -1
        # 判断符号位,如果存在符号位,i向后移动1位
        if s[i] in ('-', '+'):
            i += 1

        ans = 0
        i_min = -2 ** 31
        i_max = 2 ** 31 - 1
        # 当s[i]大于等于'0' and  小于等于'9'
        while i < n and '0' <= s[i] <= '9':
            ans = int(s[i]) + ans * 10
            i += 1
            if ans > i_max:
                break

        ans = flag * ans

        if ans > i_max:
            return i_max
        elif ans < i_min:
            return i_min
        else:
            return ans


r = S8()
s = "42"
print(r.func(s))

二、1. 两数之和

简单
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。

示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:
输入:nums = [3,2,4], target = 6
输出:[1,2]

示例 3:
输入:nums = [3,3], target = 6
输出:[0,1]

def func3(nums,target):
    n=len(nums)
    for i in range(n):
        value=target-nums[i]
        if value in nums:
            j=nums.index(value)
            if i==j:
                continue
            else:
                return [i,j]
        else:
            continue

nums = [2, 7, 11, 15]
target = 9
res=func3(nums,target)
print(res)

三、128. 最长连续序列

中等
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
请你设计并实现时间复杂度为 O(n) 的算法解决此问题。

示例 1:
输入:nums = [100,4,200,1,3,2]
输出:4
解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。

示例 2:
输入:nums = [0,3,7,2,5,8,4,6,0,1]
输出:9

class S128:
    def func(self, nums):
        ret = 0  # 初始值
        nums_set = set(nums)
        for num in nums_set:
            if (num - 1) not in nums_set:  # 如果当前值是一个连续序列的起点,统计这个连续序列的长度
                seq_len = 1  # 连续序列 的长度初始为1
                while (num + 1) in nums_set:  # 如果下一个值在集合中,连续序列的长度+1
                    seq_len += 1
                    num += 1  # num+1后继续遍历
                ret = max(ret, seq_len)  # 判断最大值
        return ret


r = S128()
nums = [100, 4, 200, 1, 3, 2]
print(r.func(nums))

四、73. 矩阵置零

给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。
在这里插入图片描述
思路:
用两个标记数组分别记录每一行和每一列是否出现0
首先遍历该数组一次,如果某个元素为0,那么就将该元素所在的行和列
所对应的标记数组置为true,最后我们再次遍历数组,用标记数组更新原数组即可。

class S73:
    def func(self,nums11):
        m,n=len(nums11),len(nums11[0])
        row,col=[False]*m,[False]*n

        for i in range(m):
            for j in range(n):
                if nums11[i][j]==0:
                    row[i]=col[j]=True

        for i in range(m):
            for j in range(n):
                if row[i] or col[j]:
                    nums11[i][j]=0

        return nums11
r=S73()
nums11 = [[1,1,1],[1,0,1],[1,1,1]]
print(r.func(nums11))

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

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

相关文章

前端之用HTML做一个汇款单

例子 代码 里面注释是我我对运用到的知识的理解 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>工商银行电子汇款单</title> </head> <body><h3>工商银行电子汇款单</…

docker学习进阶篇

一、dockerfile解析 官方文档&#xff1a; Dockerfile reference | Docker Docs 1.1、dockfile是什么&#xff1f; dockerfile是用来构建docker镜像的文本文件&#xff0c;由一条条构建镜像所需的指令和参数构成的脚本。 之前我们介绍过通过具体容器反射构建镜像(docker comm…

柚见第十一期(前端页面开发)

创建队伍 便于控制样式,在外面套一层div 创建假数据模拟后端传来数据 //假数据模拟 const initFormData { "name": "", "description": "", "expireTime": "", "maxNum": 0, "passwor…

基础小白快速Python---------时间日期

在Python中&#xff0c;time 模块提供了基本的时间相关功能。以下是一些常用的函数和方法&#xff1a; 1. time.time(): 返回自纪元&#xff08;1970年1月1日&#xff09;以来的秒数。 import time# 获取当前时间戳 current_time time.time() print(current_time) # 输出例如…

C++ 之LeetCode刷题记录(三十九)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 开始cpp刷题之旅。 目标&#xff1a;执行用时击败90%以上使用 C 的用户。 22. 括号生成 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用…

Node.js与Webpack笔记(二)

上一篇&#xff1a;Node.js与Webpack笔记&#xff08;一&#xff09;-CSDN博客 目录 Webpack模块打包工具 1.Webpack简介以及体验 2.Webpack的作用 4.体验Webpack 如果运行package.json里的自定义命令&#xff1f; Webpack 默认入口和出口&#xff1f; 入门使用 5.Webp…

centos7.9安装nacos

centos7.9安装nacos2.3.1 在centos x86_64环境安装nacos2.31环境准备 jdk1.8 、 mysql、 nacos 在window11环境安装nacos2.31 在centos x86_64环境安装nacos2.31 环境准备 jdk1.8 、 mysql、 nacos Nacos 依赖 Java 环境来运行。我们通过下载编译后压缩包方式安装。 重点踩坑…

Java微服务 第二十一章 Java多线程安全与锁

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 往期热门专栏回顾 专栏…

​​力矩电机的建模、仿真与选择

1 力矩电机建模 图1中 e i ( t ) {e_i}\left( t \right) ei​(t)为电机输入电压&#xff0c; L a {L_a} La​为电枢电感&#xff0c; R a {R_a} Ra​为电枢电阻&#xff0c; e m ( t ) {e_m}\left( t \right) em​(t)为电机工作时产生的反电动势&#xff0c; i a ( t ) {i_a}\l…

python爬虫(6)之处理数组

1、拆分数组 1、spilt&#xff08;&#xff09;函数 此函数的用处是将数组均分成几个数组 演示如下&#xff1a; import numpy as np ac np.array([1,2,8,9,3,5,5,8]) ac1 np.split(ac,2) ac2 np.split(ac,[3,6]) print(ac1,ac2) 结果如下&#xff1a; 其中若是一个数…

[java——基础] 双亲委派机制

目录 核心思想&#xff1a; 双亲委派机制的好处&#xff1a; 三种类加载器 解析源代码 双亲委派思想面试总结&#xff1a; 核心思想&#xff1a; 向上搜索&#xff0c;向下加载。 双亲委派机制的好处&#xff1a; 防止Java核心类被篡改&#xff0c;防止类的重复加载。 三…

力扣--动态规划/深度优先算法/回溯算法93.复原IP地址

这题主要用了动态规划和回溯算法。 动态规划数组初始化&#xff08;DP数组&#xff09;: 首先&#xff0c;创建一个二维数组dp&#xff0c;用于记录字符串中哪些部分是合法的IP地址。对字符串进行遍历&#xff0c;同时考虑每个可能的IP地址部分&#xff08;每部分由1到3个字符组…

基于深度学习的鱼类分类检测系统(含UI界面、yolov8、Python代码、数据集)

项目介绍 项目中所用到的算法模型和数据集等信息如下&#xff1a; 算法模型&#xff1a;     yolov8 yolov8主要包含以下几种创新&#xff1a;         1. 可以任意更换主干结构&#xff0c;支持几百种网络主干。 数据集&#xff1a;     网上下载的数据集&#x…

算法刷题day28

目录 引言一、截断数组二、双端队列三、日期统计 引言 这几道题是周赛里的几道题目&#xff0c;第一道题目我没用这种方法&#xff0c;但还是做出来了&#xff0c;用的一种比较特殊的思考方法&#xff0c;就是把每一个点都判断出来&#xff0c;不满足要求的就舍弃&#xff0c;…

【论文解读】多模态大语言模型综述

目录 一、简要介绍 二、概要 三、方法 3.1.多模态指令调整 3.1.1介绍 3.1.2初步研究 3.1.3模态对齐 3.1.4数据 3.1.5模态桥接 3.1.6评估 3.2多模态的上下文学习 3.3.多模态的思维链 3.3.1模态桥接 3.3.2学习范式 3.3.3链配置 3.3.4生成模式 3.4.LLM辅助视觉推理…

(golang)切片何时会创建新切片或影响原切片

什么时候切片操作会影响原切片 // 1.切片后没有触发slice的扩容机制时 什么时候对切片操作会创建新切片不影响原切片 // 2.对切片头元素进行截取的时候 // 3.当使用append时&#xff0c;len > cap则会触发扩容机制 前置&#xff1a; //slice结构体 type SliceHeader struct…

【你也能从零基础学会网站开发】Web建站之javascript入门篇 JavaScript事件处理

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;程序猿、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 什么是DHTML …

宏工科技数智方案现先进陶瓷展,VR体验数字工厂引关注

3月6-8日&#xff0c;第十六届中国国际粉末冶金、硬质合金与先进陶瓷展览会在上海举行。本届展会&#xff0c;宏工科技股份有限公司携VR体验数字工厂和正负压气力输送系统惊艳亮相&#xff0c;“现实虚拟”的呈现方式收获众多行业客户及专业观众高度关注。 展会汇聚了来自粉末冶…

【Python】一文详细介绍 plt.rc_context() 在 Matplotlib 中的原理、作用、注意事项

【Python】一文详细介绍 plt.rc_context() 在 Matplotlib 中的原理、作用、注意事项 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&a…

在funtion中用分号间隔还是逗号间隔

问: 回答: 这段代码是一个Vue组件方法的实现&#xff0c;名为resetForm。该方法的主要作用是关闭一个对话框&#xff08;通过设置this.dialogFormVisible false&#xff09;&#xff0c;重置表单字段&#xff08;使用this.$refs[formName].resetFields();&#xff09;&#x…