# Press Shift F10 to execute it or replace it with your code.
# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.
class Solution(object):
def threeSumClosest(self, nums, target):
:type nums: List[int]
:type target: int
:rtype: int
1.sort
2.固定指针 双指针
#3.先判断是否大于最大的数或者小于最小的数
3.大于右指针左移 小于左指针右移
完了操 双指针这个算法稳定性不行
def BetterAns(a,b):
if abs(a-target) abs(b-target):
return b
else:
return a
nums.sort()
sum_re nums[0] nums[1] nums[-1]
print nums %s %nums
for i in range(len(nums)):
L i 1
R len(nums)-1
#设定一个初始值
while L R:
sum_curr nums[i] nums[L] nums[R]
print 进入while i %s L %s R %s sum_last %s % (i, L, R, sum_curr)
if sum_curr-target 0:#大了 如果没变号,R左移
sum_re BetterAns(sum_curr,sum_re)
print 进入 0
R- 1
elif sum_curr-target 0:#大了 如果没变号,R左移
sum_re BetterAns(sum_curr, sum_re)
print 进入 0
elif sum_curr-target 0:
return target
return sum_re
a Solution()
print a.threeSumClosest([1,2,4,8,16,32,64,128],82)
这题和昨天的题一样 不过有一点就是很折磨 我一开始以为可以在变号的的附近直接比较两个数值大小作为返回值 但是其实并不行 就是你只能保证往不偏离的方向行进。不能保证变号附近就是最合适的点 双指针法还是要多想想 多理解