python-leetcode刷题日记

ops/2024/10/18 9:24:48/

1、defaultdict  用于计数,计算元素key出现的个数,可以避免key不存在的时候报错,当KEY不存在的时候默认为0,可以是list、set、str 
defaultdict[key].append[value]
49. 字母异位词分组
​
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
​
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
​
思路:得到新单词排序后的数据应该是一致的,将每个字符串排序,并将排序后一致的数据放在一块
class Solution(object):def groupAnagrams(self, strs):""":type strs: List[str]:rtype: List[List[str]]"""res = {}m = defaultdict(list)for i in strs:m[''.join(sorted(i))].append(i)return  list(m.values())

122. 买卖股票的最佳时机 II
​
给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。
在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。
返回 你能获得的 最大 利润 。
思路:计算一段一段的时间可以获取最大的利益数,意思就是在下一个数据小于上一个数据的时候,此段数据就结束,并计算此段数据的盈利情况。以及累计并相加
# 进阶版
def maxProfit1(self, prices):""":type prices: List[int]:rtype: int"""temp = prices[0]res = 0buy = prices[0]     # 用于临时记录一个段的第一个for i in range(len(prices)):   if prices[i]<temp:k = temp-buy   # 计算当前一小段的数据res+=k      # 将当前段的数据相加buy=prices[i]    # 将第一个移动到第二段temp = prices[i]if temp>buy and i==len(prices)-1:res += temp-buyreturn  res

13. 罗马数字转整数
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
​
字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做  XXVII, 即为 XX + V + II 。
​
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:
​
I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
给定一个罗马数字,将其转换成整数。
​
思路:
将数据依次遍历,大于后面的数据就加上当前的数据,小于后面的数据的时候就减去当前的数据
class Solution(object):def romanToInt(self, s):""":type s: str:rtype: int"""   lis = list(s)res = 0infectValues = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}one = 0if len(lis)==1:return infectValues.get(lis[0])i = 0while i < len(s)-1:if infectValues[lis[i]]<infectValues[lis[i+1]]: # 小于后面的数据,减去当前的数据one -=infectValues[lis[i]] #减去i+=1elif infectValues[lis[i]]>=infectValues[lis[i+1]]: # 大于或等于后面的数据,加上当前的数据one += infectValues[lis[i]]i+=1one += infectValues[lis[len(lis)-1]] #加上最后一个数据return one
​

2606. 找到最大开销的子字符串

给你一个字符串 s ,一个字符 互不相同 的字符串 chars 和一个长度与 chars 相同的整数数组 vals 。
​
子字符串的开销 是一个子字符串中所有字符对应价值之和。空字符串的开销是 0 。
​
字符的价值 定义如下:
​
如果字符不在字符串 chars 中,那么它的价值是它在字母表中的位置(下标从 1 开始)。
比方说,'a' 的价值为 1 ,'b' 的价值为 2 ,以此类推,'z' 的价值为 26 。
否则,如果这个字符在 chars 中的位置为 i ,那么它的价值就是 vals[i] 。
请你返回字符串 s 的所有子字符串中的最大开销。

解题思路:

python动态规划,转换为计算当前数组最大的子数组。首先是把转换为数组,然后计算数组的最大值的问题。是否加前面的数据取决于前面的数据是否大于0,如果大于0,那么加上前面的数据可以会更大,从而计算出数组最大的子数组

class Solution(object):def maximumCostSubstring(self, s, chars, vals):""":type s: str:type chars: str:type vals: List[int]:rtype: int"""resList = []   // 用于存放替换后的字符串charList = [i for i in chars]for i in s:if i in charList:m = charList.index(i)resList.append(vals[m])else:num = ord(i)-96resList.append(num)print(resList)res = [i*0 for i in range(len(resList))]   //用于存放第I个数据的最大res[0] = resList[0]s = resList[0]for i in range(1,len(resList)):res[i] = max(res[i-1],0)+resList[i]   //递推公式if max(res)<0:return 0 return max(res)


http://www.ppmy.cn/ops/98061.html

相关文章

实时美颜技术的实现:视频美颜SDK与直播美颜工具的最佳实践

视频美颜SDK与直播美颜工具的诞生&#xff0c;为主播美颜一需求提供了技术支撑。接下来&#xff0c;笔者将深入探讨实时美颜技术的实现及其在视频美颜SDK与直播美颜工具中的最佳实践。 一、实时美颜技术的核心原理 具体来说&#xff0c;主要包括以下几个步骤&#xff1a; 1.…

VirtualBox上的Oracle Linux虚拟机安装Docker全流程

1.安装docker依赖 yum install -y yum-utils device-mapper-persistent-data lvm2 2.安装docker仓库 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 生成docker的yum源配置到在 /etc/yum.repos.d/docker-ce.repo 3.安装D…

LeetCode216 组合总和 III

前言 题目&#xff1a; 216. 组合总和 III 文档&#xff1a; 代码随想录——组合总和 III 编程语言&#xff1a; C 解题状态&#xff1a; 成功解答 思路 组合题的变种&#xff0c;其实是变得更简单了&#xff0c;还是可以使用回溯法来解决。 代码 回溯法 class Solution { …

实验八:51开发板矩阵按键实验

电路原理图 也就是管脚图 数码管管脚图 只用其中一个&#xff0c;不做选择&#xff0c;默认第一个 代码 main.c #include<reg52.h>typedef unsigned int u16; typedef unsigned char u8;u8 gsmg_code[]{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c…

Eclipse的使用配置教程:必要设置、创建工程及可能遇到的问题(很详细,很全面,能解决90%的问题)

Eclipse的使用配置&#xff1a; Ⅰ、Eclipse 的必要配置&#xff1a;1、Eclipse 的安装&#xff1a;其一、将 Eclipse 解压或安装到没有中文且没有空格的路径下。其二、拿到 eclipse.exe 文件&#xff0c;傻瓜式安装即可; 2、设置工作空间(workspace)&#xff1a;其一、首次启动…

AI在医学领域:通过声纹特征来预测血糖水平

糖尿病代谢紊乱&#xff08;DM&#xff09;是一种以血糖水平异常为特征的代谢性疾病&#xff0c;其表现为高血糖&#xff08;≥230 mg/dL&#xff09;或低血糖&#xff08;<65 mg/dL&#xff09;。该病导致胰岛素产生或作用受损&#xff0c;胰岛素作为调节葡萄糖稳态的关键激…

CBDS导入和导出bhyve虚拟机系统

CBSD是为FreeBSD jail子系统、bhyve虚拟机、QEMU/NVMM和Xen编写的管理层。该项目被定位为一个综合解决方案的单一集成工具&#xff0c;用于使用预定义的软件集以最小的配置快速构建和部署虚拟环境。 官方文档导出bhyve&#xff1a;CBSD — FreeBSD Jail and Bhyve Management …

C++ 设计模式——抽象工厂模式

抽象工厂模式 抽象工厂模式 抽象工厂模式主要组成部分代码实现抽象工厂模式模式的 UML 图抽象工厂模式 UML 图解析优点和缺点适用场景 抽象工厂模式提供一个接口&#xff0c;用于创建一系列相关或相互依赖的对象&#xff0c;而无需指定它们的具体类。它通常用于需要创建多个产品…