力扣刷题记录——482. 密钥格式化、485.最大连续1的个数、492. 构造矩形

简介: 力扣刷题记录——482. 密钥格式化、485.最大连续1的个数、492. 构造矩形

482. 密钥格式化

题目描述

给定一个许可密钥字符串 s ,仅由字母、数字字符和破折号组成。字符串由 n 个破折号分成 n + 1 组。你也会得到一个整数 k 我们想要重新格式化字符串 s ,使每一组包含 k 个字符,除了第一组,它可以比 k 短,但仍然必须包含至少一个字符。此外,两组之间必须插入破折号,并且应该将所有小写字母转换为大写字母。 返回 重新格式化的许可密钥 示例 1: 输入:S = "5F3Z-2e-9-w", k = 4 输出:"5F3Z-2E9W" 解释:字符串 S 被分成了两个部分,每部分 4 个字符; 注意,两个额外的破折号需要删掉。 示例 2: 输入:S = "2-5g-3-J", k = 2 输出:"2-5G-3J" 解释:字符串 S 被分成了 3 个部分,按照前面的规则描述,第一部分的字符可以少于给定的数量,其余部分皆为 2 个字符。

解题思路

首先还是遍历整个字符串,将非连接符的元素取出来,转为大写的字符串存入目标列表中,用目标列表除以k计算出能够有多少个完整的子字符串,那么剩下的就是第一个字符串,用指针从第一个子字符串向后面遍历,将列表切割之后用jion方法连接在一起,再加上连接符,最终返回整合的字符串。最上面要先判断是否字符串即为连接符以及字符串长度为1的情况。

解题代码

1. def licenseKeyFormatting(s, k):
2. if s == "-":
3. return ""
4. if len(s) == 1:
5. return s.upper()
6.     target_list = []
7. for i in s:
8. if i != "-":
9.             target_list.append(i.upper())
10. # 计算可以分成几个完整的
11.     num = len(target_list)//k
12.     index_p = len(target_list) - num * k
13.     first = target_list[:index_p]
14.     fin_str = ""
15.     fin_str +="".join(first)
16. if first != []:
17.         fin_str += "-"
18. while index_p +k <= len(target_list):
19.         fin_str += "".join(target_list[index_p:index_p+k])
20.         fin_str += "-"
21.         index_p += k
22. 
23. return fin_str[:len(fin_str)-1]

485.最大连续1的个数

题目描述

给定一个二进制数组 nums , 计算其中最大连续 1 的个数。 示例 1: 输入:nums = [1,1,0,1,1,1] 输出:3 解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3. 示例 2: 输入:nums = [1,0,1,1,0,1] 输出:2

解题思路

这题用的还是字符串的切割,将列表转化为字符串,以“0”为切割的依据,返回一个列表对象,最终返回这个列表中最大值的长度,即为连续1的最大值。

解题代码

1. def findMaxConsecutiveOnes(nums):
2. if 1 not in nums:
3. return 0
4.     num_list = [str(i) for i in nums]
5.     num_str = "".join(num_list)
6.     num_split = num_str.split("0")
7. return len(max(num_split))

492. 构造矩形

题目描述

作为一位web开发者, 懂得怎样去规划一个页面的尺寸是很重要的。 所以,现给定一个具体的矩形页面面积,你的任务是设计一个长度为 L 和宽度为 W 且满足以下要求的矩形的页面。要求:你设计的矩形页面必须等于给定的目标面积。宽度 W 不应大于长度 L ,换言之,要求 L >= W 。长度 L 和宽度 W 之间的差距应当尽可能小。 返回一个 数组[L, W] ,其中 L W 是你按照顺序设计的网页的长度和宽度 示例1: 输入: 4 输出: [2, 2] 解释: 目标面积是 4, 所有可能的构造方案有 [1,4], [2,2], [4,1]。 但是根据要求2,[1,4] 不符合要求; 根据要求3,[2,2] 比 [4,1] 更能符合要求. 所以输出长度 L 为 2, 宽度 W 为 2。 示例 2: 输入: area = 37 输出: [37,1] 示例 3: 输入: area = 122122 输出: [427,286]

解题思路

首先想到的是暴力循环,直接两个for循环加上一个字典的索引就可以了,但是我怕大数会报时间错误,先试一下。

解题代码

1. def constructRectangle(area):
2.     fin_dic = {}
3. for i in range(1,area+1):
4. for j in range(1,i):
5. if i*j == area:
6.                 fin_dic[abs(i-j)] = [i,j]
7.     min_result = min(list(fin_dic.keys()))
8. return fin_dic[min_result]

果然,测试集的大数都直接报错了。

L∗W=area 且 L>=W

于是可以得到 W∗W<=area

贪心地求得 w 的最大值,就可以得到题目要求的答案,L和W之间的差距尽可能小,同时又等于 area

1. import math
2. def constructRectangle(area):
3.     w = int(math.sqrt(area))
4. while area % w:
5.         w -= 1
6. return [area // w, w]


相关文章
|
2月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
57 6
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 26. 树的子结构
这篇文章提供了解决LeetCode上"剑指Offer 26. 树的子结构"问题的Python代码实现和解析,判断一棵树B是否是另一棵树A的子结构。
52 4
|
3月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
118 2
|
26天前
|
机器学习/深度学习 人工智能 自然语言处理
280页PDF,全方位评估OpenAI o1,Leetcode刷题准确率竟这么高
【10月更文挑战第24天】近年来,OpenAI的o1模型在大型语言模型(LLMs)中脱颖而出,展现出卓越的推理能力和知识整合能力。基于Transformer架构,o1模型采用了链式思维和强化学习等先进技术,显著提升了其在编程竞赛、医学影像报告生成、数学问题解决、自然语言推理和芯片设计等领域的表现。本文将全面评估o1模型的性能及其对AI研究和应用的潜在影响。
21 1
|
2月前
|
数据采集 负载均衡 安全
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
本文提供了多个多线程编程问题的解决方案,包括设计有限阻塞队列、多线程网页爬虫、红绿灯路口等,每个问题都给出了至少一种实现方法,涵盖了互斥锁、条件变量、信号量等线程同步机制的使用。
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
|
1月前
【LeetCode 37】106.从中序与后序遍历构造二叉树
【LeetCode 37】106.从中序与后序遍历构造二叉树
17 0
|
3月前
|
索引 Python
【Leetcode刷题Python】从列表list中创建一颗二叉树
本文介绍了如何使用Python递归函数从列表中创建二叉树,其中每个节点的左右子节点索引分别是当前节点索引的2倍加1和2倍加2。
64 7
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
54 5
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 30. 包含min函数的栈
本文提供了实现一个包含min函数的栈的Python代码,确保min、push和pop操作的时间复杂度为O(1)。
28 4