两数之和 三数之和【基础算法精讲 01】

news2024/11/27 22:29:03

灵神算法基础算法精讲[01] : 

两数之和 三数之和【基础算法精讲 01】_哔哩哔哩_bilibili

167.两数之和 II - 输入有序数组

链接 : 

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

思路 : 

  1. 采用双指针的思想,因为给出的数组是有序的,n  = len(numbers),定 l = 0,r = n-1;
  2. 如果s = numbers[l] + numbers[r]  > target , 那么s要变小,则r--;
  3. 如果s = numbers[l] + numbers[r]  < target , 那么s要变大,则l++;
  4. 如果s = numbers[l] + numbers[r]  = target , 那么就得到结果了,则返回[l+1,r+1]即可;

代码(python):

class Solution:
    def twoSum(self, numbers: List[int], target: int) -> List[int]:
        l = 0
        r = len(numbers)-1
        while True:
            s = numbers[l] + numbers[r]
            if s==target:
                break
            if s>target:
                r -= 1
            else :
                l += 1
        return [l+1,r+1]

代码(c++):

class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) {
        int l=0,r=numbers.size()-1;
        while(true){
            int s = numbers[l]+numbers[r];
            if(s==target) break;
            if(s>target) r--;
            else l++;
        }
        return {l+1,r+1};
    }
};

三数之和

链接 : 

三数之和

思路 :

假设满足条件的三个数的下标分别为i , j, k,且默认i<j<k;

先对数组进行排序,方便后面的操作

对i进行枚举,然后就是一个双指针的问题,令x=nums[i] , j=i+1 , k=n-1 ; 令 s = x + nums[j] + nums[k] , 剩下的就可以参考前一题中的思路:

1.如果s > 0  :  k--;

2.如果s<0  : j++

3.如果s=0 : 添加到结果中;

去重 : 分别对i,j,k去重;

优化 : 如果相邻的三数之和>0,那么就可以直接break了,因为后面的只会加大

如果nums[i]+nums[n-1]+nums[n-2]<0,那么就continue,因为这是以i为起点的情况下s的最大值,如果小于0,那么直接continue,跳到下一个 i 上;

代码( python ):

class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        nums.sort()
        # 排序
        # i<j<k
        ans = []
        n = len(nums)
        for i in range(n-2):
            x = nums[i]
            if i>0 and x==nums[i-1]:# 对x去重
                continue
            if x+nums[i+1]+nums[i+2]>0: # 优化
                break
            if x+nums[-2]+nums[-1]<0: # 优化
                continue
            j = i + 1
            k = n - 1
            while j < k:
                s = x + nums[j] + nums[k]
                if s>0:
                    k -= 1
                elif s < 0:
                    j += 1 
                else:
                    ans.append([x,nums[j],nums[k]])
                    j += 1
                    while j<k and nums[j]==nums[j-1]:# 对j去重
                        j+=1
                    k-=1
                    while j<k and nums[k]==nums[k+1]:# 对k去重
                        k-=1
        return ans

代码( c++ ) : 

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
    int n = nums.size();
    vector<vector<int>> ans;
    sort(nums.begin(),nums.end());
    for(int i=0;i<n-2;i++)
    {
        int x = nums[i];
        if(x+nums[i+1]+nums[i+2] > 0) return ans;//如果三数和最小值大于0,那么直接返回
        if(x+nums[n-1]+nums[n-2]<0) continue;
        // 对a去重
        if(i>0 && nums[i] == nums[i-1]) continue;
        int left = i+1;
        int right = n-1;
        while(right>left)
        {
            int x = nums[i] + nums[left] + nums[right];
            if(x > 0) right--;
            else if(x < 0) left++;
            else 
            {
               ans.push_back(vector<int>{nums[i],nums[left],nums[right]});
               while(left<right && nums[right] == nums[right-1]) right--;
               while(left < right && nums[left] == nums[left+1]) left ++; 
               left++;
               right--;
            }
        }
    }
    return ans;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1028689.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Delft3D水动力与泥沙运动模拟实践技术应用

水体中泥沙运动是关系到防洪&#xff0c;调水等方面的重要问题&#xff0c;也是水利和水环境领域科研热点之一。水利数值模型&#xff0c;在环境影响评价、防洪规划等方面也有着广泛的应用。荷兰Delft研究所开发的Delft3D模型是世界上最先进的水动力之一&#xff0c;能够运用于…

5款精挑细选的软件,助你事半功倍

​ 在工作的时候&#xff0c;大家都喜欢通过一些好用有效率的工具&#xff0c;来让工作更加快速地完成&#xff0c;今天给大家带来的这5款软件&#xff0c;更是一款比一款还要惊喜&#xff01; 1.在线文件转换——Aconvert ​ Aconvert 是一款在线文件转换服务&#xff0c;它…

AVR 单片机 调试环境 JTAG MKII

注意 驱动 的厂家: 如果驱动备改变为其他厂家的驱动 就与 AVR Studio7不兼容 保证驱动选择正确是 能够使用硬件调试的关键 如果驱动不对&#xff0c;使用 USB驱动修改工具 修改 比如 UsbDriverTool.exe

“三高”论文完美复现!基于PSO-VMD-MCKD方法的风机轴承微弱故障诊断,实现早期微弱故障诊断,MATLAB代码实现...

声明&#xff1a;对于作者的原创代码&#xff0c;禁止转售倒卖&#xff0c;违者必究&#xff01; 本期文章思路来自振动测试与诊断期刊的一篇三高论文&#xff0c;点击链接可跳转。https://mp.weixin.qq.com/s/hmmDj5IwpaozeL4F0iI-2g 文章摘要如下&#xff1a; 针对风机滚动轴…

alist windows 命令行版本下载、使用

下载 下载地址 https://github.com/alist-org/alist/releases 文件下载链接 &#xff0c;直接点击就能下载https://github.com/alist-org/alist/releases/download/v3.27.0/alist-windows-arm64.zip 安装 输入cmd&#xff0c;按enter键&#xff0c;会调出cmd命令行 输入 alis…

内存管理之虚拟内存

本篇遵循内存管理->地址空间->虚拟内存的顺序描述了内存管理、地址空间与虚拟内存见的递进关系&#xff0c;较为详细的介绍了作为在校大学生对于虚拟内存的理解。 内存管理 引入 RAM&#xff08;内存&#xff09;是计算机中非常重要的资源&#xff0c;由于造价的昂贵&…

前端对接阿里oss保姆级教程(第二章使用武器)

1.在前端项目下载ali-oss yarn add ali-oss 2.编写上传方法 const OSS require(ali-oss)const client new OSS({// 填写Bucket所在地域。我的杭州的&#xff0c;Region填写为oss-cn-hangzhou。region: oss-cn-hangzhou,//填写组件的密钥accessKeyId: ,accessKeySecret: ,/…

小试GraphQL

之前做的需求&#xff0c;基本都是REST风格&#xff0c;以github提供的api为例&#xff0c;比较二者差异。试用GraphQL&#xff0c;找寻其独到之处 REST REST[1] 一个URI代表一种资源 通过HTTP动词对资源进行操作 以创建一个仓库[2]为例 GET[3], PATCH[4]和 DELETE[5]类似 Gra…

〔023〕Stable Diffusion 之 界面主题 篇

✨ 目录 🎈 系统内置主题🎈 kitchen Theme 主题🎈 Catppuccin Theme 主题🎈 Cozy Nest 主题🎈 系统内置主题 可以通过命令行修改主题,在 webui-user.bat 文件中 set COMMANDLINE_ARGS 参数后面添加 --theme dark 来设置深色主题当然,系统设置里面也自带了很多的主题…

VS2015 设置工程目录不保存 .sdf或.db 文件、 Ipch 文件夹

VS2015 设置工程目录不保存 .sdf或.db 文件、 Ipch 文件夹 sdf或db文件、Ipch文件夹均较大&#xff0c;编译几次就可以达到几十兆。 为了便于工程保持&#xff0c;可以设置这些文件保存于工程之外&#xff0c;但又不影响工程的正常运行。 &#xff08;PS&#xff1a;这些文件不…

家族小程序开发方案

家族小程序的开发需要考虑到家族成员之间的沟通和互动需求&#xff0c;以及家族文化传承和传承方式等因素。以下是一些开发家族小程序时需要考虑的方面&#xff1a; 家族文化传承&#xff1a;家族小程序需要考虑到家族文化传承的需求&#xff0c;包括家族历史、家族文化、家…

C++真的是 C加加

&#x1f4dd;个人主页&#xff1a;夏目浅石. &#x1f4cc;博客专栏&#xff1a;C的故事 &#x1f3e0;学习社区&#xff1a;夏目友人帐. 文章目录 前言Ⅰ. 函数重载0x00 重载规则0x01 函数重载的原理名字修饰 Ⅱ. 引用0x00 引用的概念0x01 引用和指针区分0x03 引用的本质0x04…

【lesson8】冯诺依曼体系的介绍

文章目录 冯诺依曼体系是什么&#xff1f;为什么要有存储器&#xff1f;怎么实现数据传输的&#xff1f; 冯诺依曼体系是什么&#xff1f; 冯诺依曼体系是一种计算机体系结构&#xff0c;是现代计算机的基础被广泛应用。 如图所示&#xff1a; 输入设备&#xff1a;键盘&…

企业直播如何实现多画面多场景切换?

企业直播如何实现多画面多场景切换&#xff1f; 应用场景 主要应用于&#xff1a;企业的会议直播、小型会务直播、异地讲师培训授课&#xff0c;实现较低成本的导播台场景切换效果&#xff08;阿酷TONY注&#xff0c;比不上硬件导播台&#xff0c;但整体还可以&#xff0c;能…

快手商品详情数据API接口【关键词搜索商品列表数据】APP端商品详情数据

快手商品API接口是快手电商平台为开发者提供的一组接口&#xff0c;允许开发者通过程序代码访问快手电商平台的商品数据&#xff0c;实现商品信息的获取等操作。以下是快手商品API接口的一些常用功能&#xff1a; 获取商品列表&#xff1a;通过该接口可以获取店铺或分类下的商…

安科瑞电流隔离传感器 BA穿孔交流电流变送器-安科瑞黄安南

一.产品原理和功能介绍 BA系列产品应用电磁感应原理&#xff0c;对电网中的交流电流进行实时测量&#xff0c;采用精密恒流技术和线性温度补偿技术&#xff0c;将其隔离变换为标准的直流信号输出 采用24伏或12伏安全电压供电&#xff0c;具有过载能力强、高精度、高隔离、高安…

Linux 手动卸载jdk

Linux 手动卸载jdk 1、先输入java -version 查看是否安装了jdk java -version2、如果安装了&#xff0c;检查下安装的路径 which java&#xff08;查看JDK的安装路径&#xff09; which java3、卸载 rm -rf JDK地址&#xff08;卸载JDK&#xff09; rm -rf /home/koneom/ja…

为什么现在的LLM都是Decoder only的架构?

LLM 是 “Large Language Model” 的简写&#xff0c;目前一般指百亿参数以上的语言模型&#xff0c; 主要面向文本生成任务。跟小尺度模型&#xff08;10亿或以内量级&#xff09;的“百花齐放”不同&#xff0c;目前LLM的一个现状是Decoder-only架构的研究居多&#xff0c;像…

RobotFrameWork环境搭建及使用

RF环境搭建 首先安装python并且配置python环境变量pip install robotframeworkpip install robotframework-ride 生产桌面快捷方式 不行换豆瓣源检查一下pip list RF类库和扩展库 标准库 按F5快捷键查询&#xff0c;可以看到rf自带的库不需要额外安装这些标准库在python的 …

ai智能写作软件哪个好-AI智能写作软件的类型标准

AI智能写作软件能做什么&#xff1f; 节省时间&#xff1a;手动撰写文章和内容可能会非常耗时&#xff0c;而AI智能写作软件可以帮助我们快速生成文字&#xff0c;节省大量时间和精力。 增加生产力&#xff1a;对于内容创作者、营销人员和企业来说&#xff0c;高效地生成文章…