Skip to content

Commit 37539bc

Browse files
author
“wangruiguo”
committed
leetcode
1 parent 03ba9aa commit 37539bc

File tree

3 files changed

+70
-10
lines changed

3 files changed

+70
-10
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
"""
2+
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请
3+
4+
你返回所有和为 0 且不重复的三元组。
5+
6+
注意:答案中不可以包含重复的三元组。
7+
8+
9+
示例 1:
10+
11+
输入:nums = [-1,0,1,2,-1,-4]
12+
输出:[[-1,-1,2],[-1,0,1]]
13+
解释:
14+
nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。
15+
nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。
16+
nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0 。
17+
不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。
18+
注意,输出的顺序和三元组的顺序并不重要。
19+
示例 2:
20+
21+
输入:nums = [0,1,1]
22+
输出:[]
23+
解释:唯一可能的三元组和不为 0 。
24+
25+
来源:力扣(LeetCode)
26+
链接:https://leetcode.cn/problems/3sum
27+
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
28+
"""
29+
30+
class Solution:
31+
32+
def threesum(self, nums):
33+
34+
pass
35+
36+
37+
if __name__ == '__main__':
38+
nums = [1, 0, 1, 2, -1, -4]
39+
s = Solution()
40+
ans = s.threesum(nums)
41+
print(f'ans: {ans}')

堆、排序问题/剑指offer 40 寻找数组的前k小的数.py

+14-10
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,15 @@
1717
1818
"""
1919

20-
class Solution:
2120

22-
def findtopk(self, arr, k):
23-
"""
24-
思想:
25-
1.按照最小堆存储
26-
2.最小堆为堆顶数字最小
27-
"""
21+
class Solution:
22+
"""
23+
流程
24+
1.构建一个最小堆
25+
2.遍历arr,维护一个最小堆
26+
当arr[i] < hp[0]时,进行维护,堆顶pop,将arr[i]push进堆
27+
"""
28+
def findtopmink(self, arr, k):
2829
import heapq
2930
if k == 0:
3031
return []
@@ -38,9 +39,12 @@ def findtopk(self, arr, k):
3839
return ans
3940

4041

42+
43+
44+
4145
if __name__ == '__main__':
42-
arr = [3, 2, 1]
43-
k = 2
46+
arr = [3, 2, 1, 0, 1]
47+
k = 3
4448
s = Solution()
45-
ans = s.findtopk(arr, k)
49+
ans = s.findtopmink(arr, k)
4650
print(f'ans: {ans}')

子序列问题/53最大子序和.py

+15
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,23 @@
1313

1414
from typing import List
1515

16+
17+
1618
class Solution:
1719

20+
def maxsubarray(self, nums):
21+
"""
22+
采用动态规划,dp[i]代表以下标i结尾的nums中的子序列最大和
23+
"""
24+
dp = [0]*(len(nums))
25+
dp[0] = nums[0]
26+
for i in range(1, len(nums)):
27+
dp[i] = max(dp[i-1]+nums[i-1], nums[i-1])
28+
return max(dp)
29+
30+
31+
class Solutio:
32+
1833
def maxsubarray(self, nums: List[int]) -> int:
1934
# dp[i] 为nums[0, i]中以i结尾的连续子数组的最大和
2035
# 初始化 dp[0] = max(0, nums[0])

0 commit comments

Comments
 (0)