找出数组s中三个数使其之和最接近一个给定的数,用python
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了找出数组s中三个数使其之和最接近一个给定的数,用python相关的知识,希望对你有一定的参考价值。
class Solution(object):def threeSumClosest(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
nums.sort(); #先排序
length = len(nums);
min = float('inf'); #最小差值初始化为正无穷
result = 0;
for i in range(length - 2): #只需遍历到倒数第三个数
now_num = nums[i];
left = i + 1;
right = length - 1;
while left < right: #左指针和右指针相遇时结束一轮循环
left_num = nums[left];
right_num = nums[right];
threeSum = now_num + left_num + right_num;
error = target - threeSum; #目标值和当前三个数和的差
if error == 0: #刚刚好相等,直接返回目标值
return target;
elif error > 0: #三个数的和偏小,左指针右移
left += 1;
if error < min:
min = error;
result = threeSum;
else: #三个数的和偏大,右指针左移
right -= 1;
if -error < min:
min = -error;
result = threeSum;
return result; 参考技术A 由数组:,,,,那么,第组的三个数是,三个数的和即可得出. 解:由题意得出:,;答:第组的三个数之和是. 此题考查了数字变化规律,从数组中找出规律是解题关键.本回答被提问者采纳
leetcode 16.最接近的三数之和
给定一个包括 n 个整数的数组 nums
和 一个目标值 target
。找出 nums
中的三个整数,使得它们的和与 target
最接近。返回这三个数的和。假定每组输入只存在唯一答案。
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
sort(nums.begin(),nums.end()); //将数组从小到大排列
int min = nums[0] + nums[1] + nums[2]; //设min为最小,假设nums[0]+nums[1]+nums[2]为最小
for(int i = 0; i < nums.size() - 2; i++){
int m = i + 1; //m为左指针,为i+1
int n = nums.size() - 1; //n为右指针,n为数组最后一个下标
while(m < n){ //当左指针小于右指针
int sum = nums[i] + nums[m] +nums[n]; //求出三个数之和
if(abs(sum - target) < abs(min - target)) min =sum; //如果sum-target的绝对值小于min-target的绝对值,那么使得min=sum
if(sum < target) m++; //如果sum<target,左指针右移使得数组中的数值增大
else if(sum > target) n--; //如果sum>target,右指针左移使得数组中的数值减小
else return target; //如果sum=target,那么直接返回target
}
}
return min; //最后返回最小值min
}
};
以上是关于找出数组s中三个数使其之和最接近一个给定的数,用python的主要内容,如果未能解决你的问题,请参考以下文章