提克破事水


  • Home

  • About

  • Tags

  • Categories

  • Archives

  • Search

1250. 检查「好数组」

Posted on 2023-03-27 | In Leetcode题录 |

给你一个正整数数组 nums,你需要从中任选一些子集,然后将子集中每一个数乘以一个 任意整数,并求出他们的和。
假如该和结果为 1,那么原数组就是一个「好数组」,则返回 True;否则请返回 False。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/check-if-it-is-a-good-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

大乌龙。这做了二十多道题了才发现自己每天提交的不是python3。因为最大公约数的gcd方法死活找不到,math.gcd也找不到,from math import gcd也找不到,后来仔细一看才发现选择的环境不是Python3。。。。
通过这道题长见识了,知道了裴蜀定理,内容会记在题解笔记里面。还可以研究一下python中gcd的实现,学习一下源码。

1
2
3
class Solution:
def isGoodArray(self, nums: List[int]) -> bool:
return gcd(*nums) == 1

2341. 数组能形成多少数对

Posted on 2023-03-27 | In Leetcode题录 |

给你一个下标从 0 开始的整数数组 nums 。在一步操作中,你可以执行以下步骤:

从 nums 选出 两个 相等的 整数
从 nums 中移除这两个整数,形成一个 数对
请你在 nums 上多次执行此操作直到无法继续执行。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/maximum-number-of-pairs-in-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution:
def numberOfPairs(self, nums: List[int]) -> List[int]:
pair_num = 0
remaining_num = list()
while nums:
item = nums.pop()
try:
index = nums.index(item)
nums.pop(index)
pair_num += 1
except:
remaining_num.append(item)
return [pair_num,len(remaining_num)]

2347. 最好的扑克手牌

Posted on 2023-03-27 | In Leetcode题录 |

给你一个整数数组 ranks 和一个字符数组 suit 。你有 5 张扑克牌,第 i 张牌大小为 ranks[i] ,花色为 suits[i] 。

下述是从好到坏你可能持有的 手牌类型 :

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/best-poker-hand
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

1
2
3
4
5
6
7
8
9
10
11
class Solution:
def bestHand(self, ranks: List[int], suits: List[str]) -> str:
dic = dict(Counter(ranks))
if len(set(suits)) == 1:
return "Flush"
elif dic[max(dic,key=dic.get)] >= 3:
return "Three of a Kind"
elif len(set(ranks)) <= 4:
return "Pair"
elif len(set(ranks)) == 5:
return "High Card"

704. 二分查找

Posted on 2023-03-27 | In Leetcode题录 |

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/binary-search
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution(object):
def search(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
left, right = 0, len(nums)
while left <= right :
middle = (right + left) // 2
if middle > len(nums) - 1 :
break
if nums[middle] < target:
left = middle + 1
continue
if nums[middle] > target:
right = middle - 1
continue
if nums[middle] == target:
return middle
return -1

34. 在排序数组中查找元素的第一个和最后一个位置

Posted on 2023-03-27 | In Leetcode题录 |

给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target,返回 [-1, -1]。
你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/find-first-and-last-position-of-element-in-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Solution(object):
def searchRange(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
result = [-1,-1]
left_flag,right_flag = 0,0
if not len(nums):
return result
else:
left,right = 0,len(nums) - 1
while(left <= right):
if nums[left] == target:
result[0] = left
left_flag = 1
else:
left += 1
if nums[right] == target:
result[1] = right
right_flag =1
else:
right -= 1
if right_flag and left_flag:
break
return result

69. x 的平方根

Posted on 2023-03-27 | In Leetcode题录 |

给你一个非负整数 x ,计算并返回 x 的 算术平方根 。
由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/sqrtx
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

1
2
3
4
5
6
7
8
9
10
11
class Solution:
def mySqrt(self, x: int) -> int:
left,right,answer = 0,x,-1
while left <= right:
middle = (left + right) // 2
if middle * middle <= x:
answer = middle
left = middle + 1
else:
right = middle - 1
return answer
1
2
3
class Solution:
def mySqrt(self, x: int) -> int:
return int(sqrt(x))

63. 不同路径 II

Posted on 2023-03-27 | In Leetcode题录 |

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。
现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?
网格中的障碍物和空位置分别用 1 和 0 来表示。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/unique-paths-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution:
def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int:
row = len(obstacleGrid) + 1
col = len(obstacleGrid[0]) + 1
dp = [[0 for j in range(col)]for i in range(row)]
for i in range(1,row):
for j in range(1,col):
#初始化
if i == 1 and j == 1 and obstacleGrid[i-1][j-1] == 0:
dp[i][j] = 1
continue
# print(f"i:{i},j:{j}")
if obstacleGrid[i-1][j-1] != 1:
dp[i][j] = dp[i][j-1] + dp[i-1][j]
#打印dp
# for d in dp:
# print(d)
return dp[row-1][col-1]

62. 不同路径

Posted on 2023-03-27 | In Leetcode题录 |

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
问总共有多少条不同的路径?
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/unique-paths
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution:
def uniquePaths(self, m: int, n: int) -> int:
#dp为,到当前位置有多少种路径
#dp[i][j] = dp[i-1][j] + dp[i][j-1]
#比示例图中多增加一行增加一列,全部为0,就可以按照行遍历的方式初始化dp
dp = [[0 for j in range(n + 1)] for i in range(m + 1)]
for i in range(1,m + 1):
for j in range(1,n + 1):
if i == 1 and j == 1:
dp[1][1] = 1
continue
dp[i][j] = dp[i-1][j] + dp[i][j-1]
# #打印dp
# for d in dp:
# print(d)
return dp[m][n]

509. 斐波那契数

Posted on 2023-03-27 | In Leetcode题录 |

斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:
F(0) = 0,F(1) = 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1
给定 n ,请计算 F(n) 。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/fibonacci-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

1
2
3
4
5
6
7
8
9
10
11
12
class Solution:
def fib(self, n: int) -> int:
if n < 2:
return n
dp = [-1] * (n + 1)
dp[0] = 0
dp[1] = 1
bala = [d for d in dp if d != -1]
for i in range (len(bala),n + 1):
dp[i] = dp[i-1] + dp[i-2]
print(f"i:{i}\ndp[i]:{dp[i]}")
return dp[n]

746. 使用最小花费爬楼梯

Posted on 2023-03-27 | In Leetcode题录 |

给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。
你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。
请你计算并返回达到楼梯顶部的最低花费。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/min-cost-climbing-stairs
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

1
2
3
4
5
6
7
class Solution:
def minCostClimbingStairs(self, cost: List[int]) -> int:
dp = [0] *(len(cost) + 1)
dp[1],dp[2] = cost[0],cost[1]
for i in range(len([d for d in dp if d != 0]),len(cost) + 1):
dp[i] = min(dp[i-1],dp[i-2]) + cost[i-1]
return min(dp[len(cost)],dp[len(cost)-1])
<i class="fa fa-angle-left"></i>1…678<i class="fa fa-angle-right"></i>

77 posts
10 categories
14 tags
© 2024 Antique
Powered by Hexo
|
Theme — NexT.Gemini v5.1.4