网站首页 > 技术文章 正文
编程试题:
给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。
返回这三个数的和。
假定每组输入只存在恰好一个解。
输入输出:
示例 1:
输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2)。
示例 2:
输入:nums = [0,0,0], target = 1
输出:0
解释:与 target 最接近的和是 0(0 + 0 + 0 = 0)。
提示:
- 3 <= nums.length <= 1000
- -1000 <= nums[i] <= 1000
- -104 <= target <= 104
去年写的代码:
import itertools
class Solution:
def threeSumClosest(self, nums: list[int], target: int) -> int:
# 生成三个数的所有组合
result = list(itertools.combinations(nums, 3))
sumList = []
resList = []
# 求出所有三个数的和,并将其和target的差值加入到和列表里。同时将绝对值加入到另外一个列表里
for i in result:
sum = int(i[0]) + int(i[1]) + int(i[2]) - target
sumList.append(sum)
resList.append(abs(sum))
if len(sumList) == 1:
return sumList[0] + target
# 找到resList列表里的最小值,然后找到在resList中的索引,该索引对应的就是最接近的值
resindex = resList.index(min(resList))
return sumList[resindex] + target
# 获取输入, 类型为字符串
nums = list(map(str, input().split(",")))
target = int(input())
# 调用函数
print(Solution().threeSumClosest(nums,target))
这部分代码时间复杂度较高,在leetcode上执行照旧是无法通过的
学习了双指针以后写的代码:
双指针内容可以参考前两篇文档
可编辑代码如下:
class Solution:
def threeSumClosest(self, nums: list[int], target: int) -> int:
numlen = len(nums)
if numlen == 3:
return sum(nums)
nums.sort()
best = -10001
for i in range(0, numlen - 2):
start, end = i + 1, numlen - 1
while (start < end):
sumRes = nums[i] + nums[start] + nums[end]
if sumRes == target:
return target
elif sumRes > target:
if abs(sumRes - target) < abs(best):
best = sumRes - target
end -= 1
else:
if abs(sumRes - target) < abs(best):
best = sumRes - target
start += 1
return best + target
# 调用函数
print(Solution().threeSumClosest([10,20,30,40,50,60,70,80,90],1))
提交结果如下,执行不会出现超时的现象了,不过目前仅击败了36%,说明还有进一步优化的空间
猜你喜欢
- 2025-05-05 【C++/Python语言插班试听|9月15-17日】爱思创秋季班开课啦!
- 2025-05-05 从清华退学,被微软封杀,牛人王垠:没有一家公司值得我为他工作
- 2025-05-05 Python第11题:盛最多水的容器【leetcode】
- 2025-05-05 Python编程基础:课程导读(python编程入门课 视频)
- 2025-05-05 数据管理与应用试题库(数据管理考试题库)
- 2025-05-05 墙裂推荐,5个学习Python编程最佳的开源库
- 2025-05-05 Python第123题:计算直角三角形底边斜边【PythonTip题库300题】
- 2025-05-05 Python第17题:三数之和【leetcode】
- 2025-05-05 【PythonTip题库精编300题】第34题:数字字符串相加
- 2025-05-05 Python第108题:查找最近的回文数【PythonTip题库300题】
- 263℃Python短文,Python中的嵌套条件语句(六)
- 262℃python笔记:for循环嵌套。end=""的作用,图形打印
- 261℃PythonNet:实现Python与.Net代码相互调用!
- 256℃Python实现字符串小写转大写并写入文件
- 255℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 113℃原来2025是完美的平方年,一起探索六种平方的算吧
- 96℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 87℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)