数据结构与算法解题-20240422

news2024/9/23 19:25:57

在这里插入图片描述


这里写目录标题

  • 一、2. 两数相加
  • 二、67. 二进制求和
  • 三、415. 字符串相加
  • 四、LCS 01. 下载插件
  • 五、71. 简化路径

一、2. 两数相加

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
在这里插入图片描述

迭代的思路是,初始化答案为一个「空链表」,每次循环,向该链表末尾添加一个节点(保存一个数位)。

循环即遍历链表 l1和l2, 每次把两个节点的值l1.val和l2.val与进位值carry相加,除以10的余数即为当前节点需要保存的数位,除以10的商即为新的进位值。

需要注意的是,在第一次循环时,我们无法往一个空节点的末尾添加节点。这里的技巧是,创建一个哨兵节点(dummy node),当成初始的「空链表」。循环结束后,哨兵节点的下一个节点就是最终要返回的链表头节点。

class S2:
    def func(self, l1, l2):
        cur = dummy = ListNode()  # 哑节点
        carry = 0  # 进位标记
        while l1 or l2 or carry:  # 如果有一个不是空节点,或者还有进位,就继续遍历
            L1 = l1.val if l1 else 0
            L2 = l2.val if l2 else 0
            sumL = L1 + L2 + carry
            cur.next = ListNode(sumL % 2)  # 每个节点保存一个数位
            sumL //= 10  # 新的进位
            cur = cur.next  # 下一个节点
            if l1:
                l1 = l1.next
            if l2:
                l2 = l2.next
        return dummy.next  # 哑节点的下一个节点就是头节点

二、67. 二进制求和

简单
给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。

示例 1:
输入:a = “11”, b = “1”
输出:“100”

示例 2:
输入:a = “1010”, b = “1011”
输出:“10101”

提示:
1 <= a.length, b.length <= 104
a 和 b 仅由字符 ‘0’ 或 ‘1’ 组成
字符串如果不是 “0” ,就不含前导零

思路:
二进制字符串形式,不可以转化为int类型,因为可能溢出;
两个加数的字符串长度可能不同;
在最后,如果进位carry不为0,那么最后需要计算进位;
向结果字符串res拼接的顺序是向后凭借,返回时需要把res反转

class S67:
    def func(self, a, b):
        res = ''
        i = len(a) - 1
        j = len(b) - 1
        carry = 0
        while i >= 0 or j >= 0 or carry != 0:
            digitA = int(a[i]) if i >= 0 else 0
            digitB = int(b[j]) if j >= 0 else 0
            sumAB = digitA + digitB + carry
            if sumAB >= 2:
                carry = 1
                sumAB -= 2
            else:
                carry = 0
            i -= 1
            j -= 1
            res += str(sumAB)
        return res[::-1]


r = S67()
a = "11"
b = "1"
print(r.func(a, b))

三、415. 字符串相加

简单
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。
你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。

示例 1:
输入:num1 = “11”, num2 = “123”
输出:“134”

示例 2:
输入:num1 = “456”, num2 = “77”
输出:“533”

示例 3:
输入:num1 = “0”, num2 = “0”
输出:“0”

class S415:
    def func(self,a,b):
        i=len(a)-1
        j=len(b)-1
        carry=0
        res=''
        while i>=0 or j>=0 or carry!=0:
            A=int(a[i]) if i>=0 else 0
            B=int(b[j]) if j>=0 else 0
            sumAB=A+B+carry
            if sumAB>=10:
                sumAB=sumAB%10
                carry+=1
            else:
                carry=0
            i-=1
            j-=1
            res += str(sumAB)
        return res[::-1]

r=S415()
a = "11"
b = "123"
print(r.func(a, b))

四、LCS 01. 下载插件

简单
小扣打算给自己的 VS code 安装使用插件,初始状态下带宽每分钟可以完成 1 个插件的下载。假定每分钟选择以下两种策略之一:
使用当前带宽下载插件
将带宽加倍(下载插件数量随之加倍)
请返回小扣完成下载 n 个插件最少需要多少分钟。

注意:实际的下载的插件数量可以超过 n 个
示例 1:
输入:n = 2
输出:2
解释: 以下两个方案,都能实现 2 分钟内下载 2 个插件
方案一:第一分钟带宽加倍,带宽可每分钟下载 2 个插件;第二分钟下载 2 个插件
方案二:第一分钟下载 1 个插件,第二分钟下载 1 个插件

示例 2:
输入:n = 4
输出:3
解释: 最少需要 3 分钟可完成 4 个插件的下载,以下是其中一种方案: 第一分钟带宽加倍,带宽可每分钟下载 2 个插件; 第二分钟下载 2 个插件; 第三分钟下载 2 个插件。

class S01:
    def func(self, n):
        count = 0
        width = 1
        while width < n:
            width = width * 2
            count = count + 1
        count = count + 1
        return count


r = S01()
n = 4
print(r.func(n))

五、71. 简化路径

中等
给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 ‘/’ 开头),请你将其转化为更加简洁的规范路径。

在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (…) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,‘//’)都被视为单个斜杠 ‘/’ 。 对于此问题,任何其他格式的点(例如,‘…’)均被视为文件/目录名称。

请注意,返回的 规范路径 必须遵循下述格式:

始终以斜杠 ‘/’ 开头。
两个目录名之间必须只有一个斜杠 ‘/’ 。
最后一个目录名(如果存在)不能 以 ‘/’ 结尾。
此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含 ‘.’ 或 ‘…’)。
返回简化后得到的 规范路径 。

示例 1:
输入:path = “/home/”
输出:“/home”
解释:注意,最后一个目录名后面没有斜杠。

示例 2:
输入:path = “/…/”
输出:“/”
解释:从根目录向上一级是不可行的,因为根目录是你可以到达的最高级。

示例 3:
输入:path = “/home//foo/”
输出:“/home/foo”
解释:在规范路径中,多个连续斜杠需要用一个斜杠替换。

示例 4:
输入:path = “/a/./b/…/…/c/”
输出:“/c”

思路:将字符串按照/进行分割
分为4种情况
空字符串,
一个点 .
两个点 …
只包含英文字母、数字或者_的目录。

1、对于空【字符串】以及【一个点】,我们实际上无需对他们进行处理,因为【空字符串】没有任何含义,
2、而【一个点】表示当前目录本身,我们无需切换目录
3、对于【两个点】或者【目录名】,我们则可以用栈来维护路径中的每一个目录。
4、当遇到【两个点】时,需要将目录切换到上一级,因此只要栈不为空,我们就弹出栈顶的顶目。
当我们遇到【目录名】时,就把它放入栈

class S71:
    def func(self,path):
        names=path.split('/')
        stack=[]
        for name in names:
            if name == '..':
                if stack:
                    stack.pop()
            elif name and name !='.':
                stack.append(name)
        return '/'+'/'.join(stack)

r=S71()
path='/../'
print(r.func(path))

在这里插入图片描述

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

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

相关文章

分享三个转换速度快、准确率高的视频转文字工具

想要直接将视频转换成文字&#xff0c;转换工具很重要&#xff01;给大家分享三个转换速度快、准确率高的视频转文字工具&#xff0c;轻松完成转换。 1.网易见外 https://sight.youdao.com/ 网易家的智能转写翻译服务工作站&#xff0c;网页端就可以直接使用&#xff0c;支持视…

vi, vim,data,wc,系统常用命令-读书笔记(十)

vi 文本编辑器 基本上 vi 共分为三种模式&#xff0c;分别是“一般指令模式”、“编辑模式”与“命令行命令模式”。这三种模式的作用分别是&#xff1a; 一般指令模式&#xff08;command mode&#xff09;以 vi 打开一个文件就直接进入一般指令模式了&#xff08;这是默认的…

Elasticsearch:崭新的打分机制 - Learning To Rank (LTR)

警告&#xff1a;“学习排名 (Learning To Rank)” 功能处于技术预览版&#xff0c;可能会在未来版本中更改或删除。 Elastic 将努力解决任何问题&#xff0c;但此功能不受官方 GA 功能的支持 SLA 的约束。 注意&#xff1a;此功能是在版本 8.12.0 中引入的&#xff0c;并且仅适…

GEE:基于光谱距离度量方法的巴以冲突造成的地表覆盖变化检测

作者:CSDN @ _养乐多_ 本文将介绍如何在 Google Earth Engine (GEE) 平台中使用光谱距离度量方法进行地表覆盖变化检测,并以加沙地区为例,使用Sentinel2数据展示2023年3月和2024年3月的地表覆盖变化区域。 结果如下图所示, 文章目录 一、核心函数1.1 spectralDistance函数…

分布式与一致性协议之拜占庭将军问题(一)

拜占庭将军问题 概述 拜占庭将军问题其实是借拜占庭将军故事展现了分布式共识问题&#xff0c;探讨和论证了解决的办法。实际上&#xff0c;拜占庭将军问题是分布式领域最复杂的一个容错模型&#xff0c;一旦搞懂了它&#xff0c;久能掌握分布式共识问题的解决思路&#xff0…

Java HotSpot(TM) 64-Bit Server VM warning_ Sharing is only supported for boot loader classes because

今天在学习freemarker静态化页面的时候遇到了这个错误&#xff1a; Java HotSpot™ 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended 最终我找到了解决办法 解决办法原帖&#xff1a;https://s…

Java中的super

package day33; ​ public class Person {public String name;public int age; ​public Person() {System.out.println("调用了父类的无参构造");} } ​ package day33; ​ public class teacher extends Person{public teacher() {System.out.println("调用了…

C语言--基础面试真题

1、局部变量和静态变量的区别 普通局部变量和静态局部变量区别 存储位置&#xff1a; 普通局部变量存储在栈上 静态局部变量存储在静态存储区 生命周期&#xff1a; 当函数执行完毕时&#xff0c;普通局部变量会被销毁 静态局部变量的生命周期则是整个程序运行期间&#…

【R语言简介】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

微软刚开源就删库的WizardLM-2:MT-Bench 榜单评测超越GPT-4,7B追平Qwen1.5-32B

前言 微软最近发布的WizardLM-2大型语言模型因其先进的技术规格和短暂的开源后突然撤回&#xff0c;引起了科技界的广泛关注。WizardLM-2包括三个不同规模的模型&#xff0c;分别是8x22B、70B和7B&#xff0c;均展现了在多语言处理、复杂对话、推理和代理任务上的卓越能力。 H…

Ardupilot OpenIPC 基于WFB-NG构架分析和数据链路思考

Ardupilot & OpenIPC & 基于WFB-NG构架分析和数据链路思考 1. 源由2. OpenIPC安装2.1 安装2.2 配置2.2.1 天空端配置文件2.2.2 地面端配置文件 2.3 当前配置选择 3. WFB-NG安装3.1 RTL8812AU安装3.1.1 驱动安装3.1.2 定位设备 3.2 wfb-ng安装3.2.1 传输层安装3.2.2 配置…

《架构风清扬-Java面试系列第23讲》如何理解Java的泛型檫除?

晚上好&#xff0c;给大家加个餐 来&#xff0c;思考片刻&#xff0c;说出你的答案 1&#xff0c;什么是泛型檫除&#xff1f; 泛型擦除是指编译器在处理泛型代码时&#xff0c;会在编译阶段移除&#xff08;擦除&#xff09;所有与泛型相关的类型参数信息&#xff0c;将其替换…

3Darray 修改array值然后保存图片

from PIL import Image import numpy as np img_path ./000001.jpg # 读取图片 image Image.open(img_path) width, height image.size print("图片的宽度为{},高度为{}".format(width,height)) print("图片的mode为{}".format(image.mode)) print(&quo…

CSS-vminvmax单位

vmin 和 vmax 单位 vmin 是相对于视口宽度和高度中较小值进行计算&#xff0c;它的值为视口宽度和高度中的较小值的百分比。 例如&#xff0c;如果视口宽度为 800px&#xff0c;高度为 1000px&#xff0c;那么 1vmin 等于 8px&#xff08;800px 的 1%&#xff09;。 vmax 是…

linux下 Mysql8.0 离线安装

环境&#xff1a;centos7.9 MysqlL8.0.36安装包 链接&#xff1a;https://pan.baidu.com/s/1bKwHr05z8Ye82dT9tntdUA 提取码&#xff1a;3a5z 参考Centos安装MYSQL8(离线可用) 文章目录 1、解压安装2、配置启动2.1 修改配置文件2.2 mysql 启动 3、mysql 测试 1、解压安装 #…

Skill Check: Fundamentals of Large Language Models

Skill Check: Fundamentals of Large Language Models 完结&#xff01;

【LLM】向量知识库

文章目录 认识向量知识库向量Embeddings向量数据库向量数据库的作用向量数据库与传统数据库的区别 Embedding API使用公有Embedding API自定义一个Embeedding API 常见文本数据的预处理搭建并使用向量数据库思考向量数据库在LLM中的价值体现向量的妙用&#xff0c;可行&#xf…

2024免费MAC苹果电脑系统优化软件CleanMyMac X

CleanMyMac X确实是一款专为Mac用户设计的清理和优化工具。它提供了一系列功能&#xff0c;旨在帮助用户释放磁盘空间、提升Mac的性能&#xff0c;并保护用户的隐私。 CleanMyMac X能够智能地扫描和识别Mac上的各种垃圾文件&#xff0c;如系统缓存、日志文件、无用的语言包等&…

【存储】cosbench对象存储测试工具

目录 简略说明 原理 用法 详细说明 简介 用法 一 安装 二 简单验证 三 编写配置文件 四 提交配置文件下IO 五 测试结果查看 结果概览 查看详情 每秒钟的io情况查看 工作负载配置 参数配置&#xff08;controller和driver&#xff09; 查看错误的方法和错误记录 查看错误的方法 …

学生选课及成绩查询管理系统的设计与开发C#(winform + sqlserver)

源码来自网络 技术栈&#xff1a; C#的窗体程序开发 本系统未采用C#实现MDI——多文档窗口&#xff0c;因为考虑到C#的该技术与java类似&#xff0c;而暑期java实训时&#xff0c;曾用过类似的方法做过停车场管理系统&#xff0c;所以想为这次的系统注入一点新鲜的血液&#x…