力扣刷题记录——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]


相关文章
|
13天前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
27 6
|
13天前
|
Python
【Leetcode刷题Python】剑指 Offer 26. 树的子结构
这篇文章提供了解决LeetCode上"剑指Offer 26. 树的子结构"问题的Python代码实现和解析,判断一棵树B是否是另一棵树A的子结构。
28 4
|
13天前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
42 2
|
13天前
|
索引 Python
【Leetcode刷题Python】从列表list中创建一颗二叉树
本文介绍了如何使用Python递归函数从列表中创建二叉树,其中每个节点的左右子节点索引分别是当前节点索引的2倍加1和2倍加2。
16 7
|
13天前
|
Python
【Leetcode刷题Python】剑指 Offer 30. 包含min函数的栈
本文提供了实现一个包含min函数的栈的Python代码,确保min、push和pop操作的时间复杂度为O(1)。
13 4
|
14天前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
32 5
|
13天前
|
算法 Python
【Leetcode刷题Python】 LeetCode 2038. 如果相邻两个颜色均相同则删除当前颜色
本文介绍了LeetCode 2038题的解法,题目要求在一个由'A'和'B'组成的字符串中,按照特定规则轮流删除颜色片段,判断Alice是否能够获胜,并提供了Python的实现代码。
25 3
|
13天前
|
算法 Python
【Leetcode刷题Python】剑指 Offer 33. 二叉搜索树的后序遍历序列
本文提供了一种Python算法,用以判断给定整数数组是否为某二叉搜索树的后序遍历结果,通过识别根节点并递归验证左右子树的值是否满足二叉搜索树的性质。
11 3
|
13天前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - II. 从上到下打印二叉树 II
本文提供了一种Python实现方法,用于层次遍历二叉树并按层打印结果,每层节点按从左到右的顺序排列,每层打印到一行。
24 3
|
14天前
|
Python
【Leetcode刷题Python】剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
Leetcode题目"剑指 Offer 21. 调整数组顺序使奇数位于偶数前面"的两种Python解决方案,一种是使用双端队列调整数组顺序,另一种是使用双指针法将奇数移到数组前半部分,偶数移到后半部分。
15 4