leetcode第16题

简介: 受到上一题的启发,没有看的,推荐大家可以看一下。我们完全可以先将数组排序,然后先固定一个数字,然后利用头尾两个指针进行遍历,降低一个 O(n)的时间复杂度。如果 sum 大于 target 就减小右指针,反之,就增加左指针。

image.png

top16

上一道题很类似,只不过这个是给一个目标值,找三个数,使得他们的和最接近目标值。

解法一 暴力解法

遍历所有的情况,然后求出三个数的和,和目标值进行比较,选取差值最小的即可。本以为时间复杂度太大了,神奇的是,竟然 AC 了。

publicintthreeSumClosest(int[] nums, inttarget) {
intsub=Integer.MAX_VALUE; //保存和 target 的差值intsum=0; //保存当前最接近 target 的三个数的和for (inti=0; i<nums.length; i++) {
for (intj=i+1; j<nums.length; j++)
for (intk=j+1; k<nums.length; k++) {
if (Math.abs((nums[i] +nums[j] +nums[k] -target)) <sub) {
sum=nums[i] +nums[j] +nums[k];
sub=Math.abs(sum-target);
                }
            }
    }
returnsum;
}

时间复杂度:O(n³),三层循环。

空间复杂度:O(1),常数个。

解法二

受到上一题的启发,没有看的,推荐大家可以看一下。我们完全可以先将数组排序,然后先固定一个数字,然后利用头尾两个指针进行遍历,降低一个 O(n)的时间复杂度。

如果 sum 大于 target 就减小右指针,反之,就增加左指针。

publicintthreeSumClosest(int[] nums, inttarget) {
Arrays.sort(nums);
intsub=Integer.MAX_VALUE;
intsum=0;
for(inti=0;i<nums.length;i++){ 
intlo=i+1,hi=nums.length-1;
while(lo<hi){
if(Math.abs((nums[lo]+nums[hi]+nums[i]-target))<sub){
sum=nums[lo]+nums[hi]+nums[i];
sub=Math.abs(sum-target);
            }
if(nums[lo]+nums[hi]+nums[i]>target){
hi--;
            }else{
lo++;
            }
        }
    }
returnsum;
}

时间复杂度:如果是快速排序的 O(log_n)O(logn) 再加上 O(n²),所以就是 O(n²)。

空间复杂度:O(1)。

和上一道题非常非常的相似了,先对数组排序,然后利用两头的指针,可以说是十分的优雅了。


相关文章
|
机器学习/深度学习 算法 API
XGBoost模型部署与在线预测的完整指南
XGBoost模型部署与在线预测的完整指南
1786 6
|
Shell Android开发 容器
你真了解Android任务栈 Task 与启动模式吗?
你真了解Android任务栈 Task 与启动模式吗?
318 0
|
计算机视觉
数据集学习笔记(三):COCO创建dataloader用于训练
如何使用COCO数据集创建dataloader进行训练,包括安装环境、加载数据集代码、定义数据转换、创建数据集对象以及创建dataloader。
303 5
|
11月前
|
机器学习/深度学习 人工智能 开发者
【AI系统】昇思 MindSpore 关键特性
本文介绍华为自研AI框架昇思MindSpore,一个面向全场景的AI计算框架,旨在提供统一、高效、安全的平台,支持AI算法研究与生产部署。文章详细阐述了MindSpore的定位、架构、特性及在端边云全场景下的应用优势,强调其动静态图统一、联邦学习支持及高性能优化等亮点。
444 7
【AI系统】昇思 MindSpore 关键特性
|
机器学习/深度学习 供应链 TensorFlow
使用Python实现深度学习模型:智能物流与供应链管理
【8月更文挑战第1天】 使用Python实现深度学习模型:智能物流与供应链管理
555 2
使用Python实现深度学习模型:智能物流与供应链管理
|
11月前
|
人工智能 内存技术
Gemini 2.0 Flash Thinking:谷歌推出实验性多模态推理模型,在快速生成的同时展示详细的思考过程
谷歌推出的实验性推理模型Gemini 2.0 Flash Thinking,展示了详细的思考过程,能够在多个领域快速解决问题,并提供推理路径。本文将详细介绍该模型的功能、技术原理及使用限制。
561 26
Gemini 2.0 Flash Thinking:谷歌推出实验性多模态推理模型,在快速生成的同时展示详细的思考过程
|
算法
【图像】图像增强-降噪锐化
【图像】图像增强-降噪锐化
159 1
|
应用服务中间件 nginx Docker
Docker Swarm、Docker Stack和Portainer的使用
Docker Swarm、Docker Stack 和 Portainer 各有其独特的功能和优势。Docker Swarm 适用于分布式服务的管理和编排,Docker Stack 便于多容器应用的定义和部署,而 Portainer 提供了直观的 UI,简化了 Docker 环境的管理。结合使用这些工具,可以大大提高容器化应用的部署和管理效率。希望本文对您理解和应用这些工具有所帮助。
634 5
|
SQL JSON 分布式计算
hive get_json_object解析json结果为null咋办?
解决get_json_object解析json结果为null的问题
1127 0