这道题一开始做的时候,感觉自己的时间也是卡在了n^2,顶多就是大一点点,哈哈哈
开始的代码如下:
def threeSum(nums): len_nums = len(nums) two_sum = list() # 先计算两个的加和 for i in range(len_nums): for j in range(i+1,len_nums): two_sum.append(nums[i] + nums[j]) print(nums) print(two_sum) len_two_sum = len(two_sum) for i in range(100): if i * (i+1) == 2 * len_two_sum: k = i break y = [] for i in range(len_nums): for j in range(len_two_sum): if nums[i] + two_sum[j] == 0: column = 0 p = k if j < p: a = 0 b = j + 1 else: m = j while m >= p: m -= p p -= 1 column += 1 a = column b = m + column + 1 no = 1 if a == b or a == i or b == i: no = 0 if no != 0: y.append([nums[a],nums[b],nums[i]]) for data in y: data.sort() h = [] for data in y: data = tuple(data) h.append(data) print(h) h = set(h) res = [] for data in h: h = list(data) res.append(h) return res nums = list() nums.append(-1) nums.append(0) nums.append(1) nums.append(2) nums.append(-1) nums.append(-4) print(threeSum(nums))先计算两个的加和,然后计算三个的加和,可是还是面临超时的问题。
然后今天静下心来,重新采用了一种思路写了一下:
然后,就通过了。。。
def threeSum(nums): # 先排序 for i in range(len(nums)): for j in range(i + 1, len(nums)): if nums[i] > nums[j]: k = nums[i] nums[i] = nums[j] nums[j] = k #print(nums) # 然后设置三个指针 y = [] global k_ k_ = 521 l_ = 521 r_ = 521 for k in range(len(nums)): if nums[k] == k_: continue if nums[k] > 0: break l = k + 1 r = len(nums) - 1 print('1l:',l,' r:',r) k_ = 521 l_ = 521 r_ = 521 while l < r: if nums[l] == l_: l = l + 1 print('2l:', l, ' r:', r) continue if nums[r] == r_: r = r - 1 print('3l:', l, ' r:', r) continue # 如果满足条件 if nums[k] + nums[l] + nums[r] == 0: y.append([nums[k], nums[l], nums[r]]) l_ = nums[l] r_ = nums[r] l = l + 1 r = r - 1 print('4l:', l, ' r:', r) # 如果小于0,则左边指针+ if nums[k] + nums[l] + nums[r] < 0: l_ = nums[l] l = l + 1 print('5l:', l, ' r:', r) # 如果大于0,则右边指针- if nums[k] + nums[l] + nums[r] > 0: r_ = nums[r] r = r - 1 print('6l:', l, ' r:', r) k_ = nums[k] print(k_) return y nums = list() nums.append(-1) nums.append(0) nums.append(1) nums.append(2) nums.append(-1) nums.append(-4) nums1 = list() nums1.append(0) nums1.append(0) nums1.append(0) nums2 = list() nums2.append(-2) nums2.append(-1) nums2.append(1) nums2.append(0) nums2.append(2) nums2.append(3) print(threeSum(nums2))