💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢迎在文章下方留下你的评论和反馈。我期待着与你分享知识、互相学习和建立一个积极的社区。谢谢你的光临,让我们一起踏上这个知识之旅!
文章目录
- 🥦枚举三要素
- [🥦2798. 满足目标工作时长的员工数目](#🥦2798. 满足目标工作时长的员工数目)
- [🥦2367. 算术三元组的数目](#🥦2367. 算术三元组的数目)
- [🥦2427. 公因子的数目](#🥦2427. 公因子的数目)
- [🥦2951. 找出峰值](#🥦2951. 找出峰值)
- [🥦1534. 统计好三元组](#🥦1534. 统计好三元组)
- [🥦2928. 给小朋友们分糖果 I](#🥦2928. 给小朋友们分糖果 I)
- [🥦2309. 兼具大小写的最好英文字母](#🥦2309. 兼具大小写的最好英文字母)
- [🥦2843. 统计对称整数的数目](#🥦2843. 统计对称整数的数目)
- [🥦LCR 180. 文件组合](#🥦LCR 180. 文件组合)
- 🥦总结
🥦枚举三要素
- 确定枚举空间
- 选择合适的枚举顺序
- 构造筛选方法
优化思路:对称性、哈希表(空间换时间)
🥦2798. 满足目标工作时长的员工数目
公司里共有 n 名员工,按从 0 到 n - 1 编号。每个员工 i 已经在公司工作了 hours[i] 小时。
公司要求每位员工工作 至少 target 小时。
给你一个下标从 0 开始、长度为 n 的非负整数数组 hours 和一个非负整数 target 。
请你用整数表示并返回工作至少 target 小时的员工数。
python
class Solution(object):
def numberOfEmployeesWhoMetTarget(self, hours, target):
"""
:type hours: List[int]
:type target: int
:rtype: int
"""
count = 0
for i in range(len(hours)):
if target > hours[i]:
continue
else:
count+=1
return count
🥦2367. 算术三元组的数目
给你一个下标从 0 开始、严格递增 的整数数组 nums 和一个正整数 diff 。如果满足下述全部条件,则三元组 (i, j, k) 就是一个 算术三元组 :
i < j < k ,
nums[j] - nums[i] == diff 且
nums[k] - nums[j] == diff
返回不同 算术三元组 的数目。
python
class Solution(object):
def arithmeticTriplets(self, nums, diff):
"""
:type nums: List[int]
:type diff: int
:rtype: int
"""
count = 0
for i in range(len(nums)):
for j in range(i+1,len(nums)):
for k in range(j+1,len(nums)):
if nums[j]-diff==nums[i] and nums[k]-diff==nums[j]:
count += 1
return count
🥦2427. 公因子的数目
给你两个正整数 a 和 b ,返回 a 和 b 的 公 因子的数目。
如果 x 可以同时整除 a 和 b ,则认为 x 是 a 和 b 的一个 公因子 。
python
class Solution(object):
def commonFactors(self, a, b):
"""
:type a: int
:type b: int
:rtype: int
"""
count = 0
for i in range(1,min(a,b)+1):
if a%i==0 and b%i==0:
count+=1
return count
🥦2951. 找出峰值
给你一个下标从 0 开始的数组 mountain 。你的任务是找出数组 mountain 中的所有 峰值。
以数组形式返回给定数组中 峰值 的下标,顺序不限 。
注意:
峰值 是指一个严格大于其相邻元素的元素。
数组的第一个和最后一个元素 不 是峰值。
python
class Solution(object):
def findPeaks(self, mountain):
"""
:type mountain: List[int]
:rtype: List[int]
"""
l_ = []
for i in range(1,len(mountain)-1):
if mountain[i]>mountain[i-1] and mountain[i]>mountain[i+1]:
l_.append(i)
return l_
🥦1534. 统计好三元组
给你一个整数数组 arr ,以及 a、b 、c 三个整数。请你统计其中好三元组的数量。
如果三元组 (arr[i], arr[j], arr[k]) 满足下列全部条件,则认为它是一个 好三元组 。
0 <= i < j < k < arr.length
|arr[i] - arr[j]| <= a
|arr[j] - arr[k]| <= b
|arr[i] - arr[k]| <= c
其中 |x| 表示 x 的绝对值。
返回 好三元组的数量 。
python
class Solution(object):
def countGoodTriplets(self,arr, a, b, c):
"""
:type arr: List[int]
:type a: int
:type b: int
:type c: int
:rtype: int
"""
count = 0
l_ = []
n = len(arr)
for i in range(n):
for j in range(i + 1, n):
for k in range(j + 1, n):
if abs(arr[i] - arr[j]) <= a and abs(arr[j] - arr[k]) <= b and abs(arr[i] - arr[k]) <= c:
l_.append((i,j,k))
count += 1
return count
🥦2928. 给小朋友们分糖果 I
给你两个正整数 n 和 limit 。
请你将 n 颗糖果分给 3 位小朋友,确保没有任何小朋友得到超过 limit 颗糖果,请你返回满足此条件下的 总方案数 。
python
class Solution(object):
def distributeCandies(self, n, limit):
"""
:type n: int
:type limit: int
:rtype: int
"""
count = 0
l_= []
for i in range(limit+1):
for j in range(limit+1):
k = n - i - j
if k >= 0 and k <= limit:
count += 1
return count
🥦2309. 兼具大小写的最好英文字母
给你一个由英文字母组成的字符串 s ,请你找出并返回 s 中的 最好 英文字母。返回的字母必须为大写形式。如果不存在满足条件的字母,则返回一个空字符串。
最好 英文字母的大写和小写形式必须 都 在 s 中出现。
英文字母 b 比另一个英文字母 a 更好 的前提是:英文字母表中,b 在 a 之 后 出现。
python
class Solution(object):
def greatestLetter(self, s):
"""
:type s: str
:rtype: str
"""
l_ = []
for i in s:
if i.swapcase() in s:
l_.append(i.upper())
str1 = sorted(set(l_))
if len(str1)==0:
return ""
else:
return str1[-1]
🥦2843. 统计对称整数的数目
给你两个正整数 low 和 high 。
对于一个由 2 * n 位数字组成的整数 x ,如果其前 n 位数字之和与后 n 位数字之和相等,则认为这个数字是一个对称整数。
返回在 [low, high] 范围内的 对称整数的数目 。
python
class Solution(object):
def countSymmetricIntegers(self, low, high):
"""
:type low: int
:type high: int
:rtype: int
"""
count = 0
for i in range(low, high+1):
sum1 = 0
sum2 = 0
q = str(i)
str1 = len(q)
if str1%2==0:
for j in q[:str1 // 2]:
temp = int(j)
sum1 += temp
for k in q[str1 // 2:]:
temp = int(k)
sum2 += temp
if sum1 == sum2:
count+=1
print(i)
return count
🥦LCR 180. 文件组合
待传输文件被切分成多个部分,按照原排列顺序,每部分文件编号均为一个 正整数(至少含有两个文件)。传输要求为:连续文件编号总和为接收方指定数字 target 的所有文件。请返回所有符合该要求的文件传输组合列表。
注意,返回时需遵循以下规则:
每种组合按照文件编号 升序 排列;
不同组合按照第一个文件编号 升序 排列。
python
class Solution(object):
def fileCombination(self, target):
"""
:type target: int
:rtype: List[List[int]]
"""
i = 1 # 滑动窗口的左边界
j = 1 # 滑动窗口的右边界
sum = 0 # 滑动窗口中数字的和
res = []
while i <= target // 2:
if sum < target:
# 右边界向右移动
sum += j
j += 1
elif sum > target:
# 左边界向右移动
sum -= i
i += 1
else:
# 记录结果
arr = list(range(i, j))
res.append(arr)
# 左边界向右移动
sum -= i
i += 1
return res
🥦总结
最后一题参考大佬思路,原题地址-------->力扣
挑战与创造都是很痛苦的,但是很充实。