Leetcode 15 & 16 (双指针)
都是比较经典的双指针问题,我们可以从中总结一些双指针的规律
首先这两题如果en做的话就是 (O(n^{3})) 的算法,暴力去找。但是我们可以发现这三个值是满足一定约束的,所以考虑使用方法将它降到 (O(n^2))
#Leetcode 15
from ast import List
class Solution:
def threeSum(self, nums):
n = len(nums)
nums.sort()
if n 0:
return ans
L = i+1
R = n-1
if i>0 and nums[i]==nums[i-1]:
continue
while (L 0):
R -= 1
else:
L += 1
return ans
if __name__ == "__main__":
nums = [-1, 0, 1, 2, -1, -4]
ans = Solution().threeSum(nums=nums)
print(ans)
#leetcode 16
from ast import List
class Solution:
def threeSumClosest(self, nums: List, target: int) -> int:
n = len(nums)
nums.sort()
if n target):
R -= 1
else:
L += 1
return ans
# 对于找三个数使其达到所需目标的问题,如果是暴力找的话需要n^3的复杂度
# 但是如果将其排序了,我们就可以使用双指针, 对其进行夹逼
# 因为这三个数是满足一定约束的, 因此可以把复杂度降到 n^2
if __name__ == "__main__":
nums = [0,0,0]
target = 1
ans = Solution().threeSumClosest(nums=nums,target=target)
print(ans)
未来是什么样,未来会发生什么,谁也不知道。
但是我知道,
起码从今天开始努力,
肯定比从明天开始努力,
要快一天实现梦想。
千里之行,始于足下! ——《那年那兔那些事儿》
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net