基础数学(二)两数之和 三数之和

news2024/11/28 0:40:13

目录

   两数之和_牛客题霸_牛客网

   三数之和_牛客题霸_牛客网


   两数之和_牛客题霸_牛客网

给出一个整型数组 numbers 和一个目标值 target,请在数组中找出两个加起来等于目标值的数的下标,返回的下标按升序排列。

(注:返回的数组下标从1开始算起,保证target一定可以由数组里面2个数字相加得到)

数据范围:2≤len(numbers)≤1052≤len(numbers)≤105,−10≤numbersi≤109−10≤numbersi​≤109,0≤target≤1090≤target≤109

要求:空间复杂度 O(n)O(n),时间复杂度 O(nlogn)O(nlogn)

【解法一】枚举遍历 无法通过


class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) {
        // write code here
        vector<int> res;
        int n = numbers.size();
        for(int i = 0; i < n; i++)
        {
            for(int j = i+1; j < n; j++)
            {
                if(numbers[i]+numbers[j] == target)
                {
                    res.push_back(i+1);
                    res.push_back(j+1);
                    return res;
                }
            }
        }
        return res;
    }
};

【解法二】哈希存储

这道题让我对哈希表又有了新的认知,之前每次都是用hash来进行一个数出现的次数,于是会写出这样的  mp[arr[i]]++  ++表示这个数出现的次数加一,然而这道题把数与其在number中所对应的下标对应着存入map中。然后在后续遍历中,如果target-number[i]在map中存在可以直接返回我所需要的下标值。

时间复杂度O(N)  只需遍历一次数组,每次在哈希表中查找的时间复杂度为O(1)

空间复杂度为O(N) 创建map

class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) {
        // write code here
        vector<int> res;
        map<int, int> mp;
        int n = numbers.size();
        for(int i = 0; i < n; i++)
        {
            int temp = target - numbers[i];
            if(mp.find(temp) == mp.end())
                mp[numbers[i]] = i;
            else{
                res.push_back(mp[temp]+1);
                res.push_back(i+1);
                break;
            }
        }
        return res;
    }
};

 三数之和_牛客题霸_牛客网

给出一个有n个元素的数组S,S中是否有元素a,b,c满足a+b+c=0?找出数组S中所有满足条件的三元组。

数据范围:0≤n≤10000≤n≤1000,数组中各个元素值满足 ∣val∣≤100∣val∣≤100

空间复杂度:O(n2)O(n2),时间复杂度 O(n2)O(n2)

注意:

  1. 三元组(a、b、c)中的元素必须按非降序排列。(即a≤b≤c)
  2. 解集中不能包含重复的三元组。

 将三数求和转化为二数求和来达到解题的目的,使用set接口进行去重。

class Solution {
public:
    vector<vector<int>> TwoSum(vector<int> num, int target, int begin)
    {
        int n = num.size();
        vector<vector<int>> res;    // 用来返回结果数组
        for(int i = begin; i < n; i++)
        {
            int _target = target-num[i];    // 将二数求和转化为找一个数
            if(find(num.begin()+i+1,num.end(),_target) != num.end())
            {
                // 利用#include<algorithm> 中find接口来进行查找
                // 找不到就返回num的end()
                vector<int> temp;
                temp.push_back(num[i]);   //如果找到了就把第二个数与第三个数都放入temp中      
                temp.push_back(_target);    
                res.push_back(temp);      //完成一次结果并放入res中,继续后续其他结果的查找
            }
        }
        return res;
    }
    vector<vector<int> > threeSum(vector<int> &num) {
        set<vector<int>> res;   // 用来去重的set容器
        vector<vector<int>> Res;    // 用来返回结果
        int n = num.size();
        if(n<3)return Res;  // 元素个数小于三个返回空
        sort(num.begin(), num.end());   // 进行一次排序整理
        for(int i = 0; i < n; i++)
        {
            int target = 0-num[i];      // 把三数之和转化为俩数之和
            vector<vector<int>> temp = TwoSum(num, target, i+1);    // 多传一个下标参数 防止重复
            if(!temp.empty())
            {
                for(auto e : temp)
                {
                    e.insert(e.begin(), num[i]); // 在每组返回的数组最前方插入第一个数
                    res.insert(res.end(), e);   // 将三个数的数组放入到set容器中进行去重
                }
            }
        }
        for(auto e : res)
            Res.push_back(e);   // 将set转移至Res中。
        return Res;
    }
};

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

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

相关文章

从0到1完成一个Node后端(express)项目(四、路由、模块化、中间件、跨域)

往期 从0到1完成一个Node后端&#xff08;express&#xff09;项目&#xff08;一、初始化项目、安装nodemon&#xff09; 从0到1完成一个Node后端&#xff08;express&#xff09;项目&#xff08;二、下载数据库、navicat、express连接数据库&#xff09; 从0到1完成一个Nod…

分页查询数据重复的问题 (分页时数据库插入数据导致)

参考&#xff1a;https://blog.csdn.net/desongzhang/article/details/124941189参考之后 自己遇到的坑解决办法一、问题描述分页时&#xff0c;同时在数据库中添加数据&#xff0c;导致第n页和第n1页有部分数据重复(重复条数和查询分页时的添加的数据量有关)二、解决办法分页的…

商业智能 BI 跟业务系统的思维差异,跨越和提升

各行业都已开始进入数据时代&#xff0c;但很多企业还是分不清商业智能 BI 跟一般的业务信息化系统定位、用户、思维层面上的差异。 在企业的 IT 信息化规划中&#xff0c;基础的业务系统建设一定是走在前面的&#xff0c;有了这些系统基础&#xff0c;才会有数据的积累&#…

SH-PEG-Silane巯基-聚乙二醇-硅烷试剂简介Silane-PEG-SH

SH-PEG-Silane巯基-聚乙二醇-硅烷 外观&#xff1a;固体或液体&#xff0c;取决于分子量大小。 PEG可选分子量: 1000,2000,3400&#xff0c;5000&#xff0c;10000 溶剂: 溶于DMSO,DMF,DCM&#xff0c;溶于水。 纯度&#xff1a;>95% 保存&#xff1a;-20℃&#xff0c…

目标检测模型设计准则 | YOLOv7参考的ELAN模型解读,YOLO系列模型思想的设计源头

转载&#xff1a;https://mp.weixin.qq.com/s/5SjQvRqRct6ClpE2eEcdkw设计高效、高质量的表达性网络架构一直是深度学习领域最重要的研究课题。当今的大多数网络设计策略都集中于如何集成从不同层提取的特征&#xff0c;以及如何设计计算单元来有效地提取这些特征&#xff0c;从…

Ubuntu22.04 设置静态IP

1.查看网卡名称及IP ip addr 网卡名称&#xff1a;ens33 IP:192.168.44.130 2.修改配置文件 在 /etc/netplan/ 目录下找到配置文件 *.yaml &#xff0c;修改为 network:version: 2#renderer: NetworkManagerethernets:ens33:addresses: [192.168.44.130/24]dhcp4: nooptio…

Chrome扩展程序(插件),用你开发的脚本在浏览器上随心所欲

Chrome扩展程序&#xff08;插件&#xff09;&#xff0c;用你开发的脚本在浏览器上随心所欲Chrome插件的文件结构Hello_World编写利用JavaScript实现Hello Everything灵活运用浏览器的存储storageoptions_Page基本用法电脑发通知 - Notifications的应用普通界面右键菜单 - con…

Android 9.0系统源码_SystemUI(八)PhoneWindow更新状态栏和导航栏背景颜色的流程解析

前言 状态栏与导航栏属于SystemUi的管理范畴&#xff0c;虽然界面的UI会受到SystemUi的影响&#xff0c;但是&#xff0c;APP并没有直接绘制SystemUI的权限与必要。APP端之所以能够更改状态栏的颜色、导航栏的颜色&#xff0c;其实还是操作自己的View更改UI。可以这么理解&…

【Linux】探索缓冲区的概念 | Git 三板斧 | 实现简易进度条

爆笑教程&#xff0c;只送有缘人 &#x1f449; 《看表情包学Linux》 &#x1f4ad; 写在前面&#xff1a;本章我们先对缓冲区的概念进行一个详细的探究&#xff0c;之后会带着大家一步步去编写一个简陋的 "进度条" 小程序&#xff0c;过程还是挺有意思的&#xff0c…

EMQX 在 Kubernetes 中如何进行优雅升级

背景 为了降低 EMQX 在 Kubernetes 上的部署、运维成本&#xff0c;我们将一些日常运维能力进行总结、抽象并整合到代码中&#xff0c;以 EMQX Kubernetes Operator 的方式帮助用户实现 EMQX 的自动化部署和运维。 此前&#xff0c;EMQX Kubernetes Operator v1beta1、v1beta…

React--》如何在React中创建TypeScript项目并使用?

目录 React中创建TS项目 TS目录结构 React函数组件类型 React类组件类型 如果你已经掌握了TS中基础类型、高级类型的使用&#xff0c;还想在前端项目中更深一层的使用TS&#xff0c;还需要掌握React、Vue、Angular等框架和框架提供的API&#xff0c;懂得如何在框架中使用TS…

【ROS】—— 机器人导航(仿真)—导航实现(十八)[重要][重要][重要]

文章目录前言准备条件1. 导航实现01_SLAM建图1.1 gmapping简介1.2 gmapping节点说明1.3 gmapping使用1.3.1 编写gmapping节点相关launch文件1.3.2 执行2. 导航实现02_地图服务2.1 map_server简介2.2 map_server使用之地图保存节点(map_saver)2.2.1 map_saver节点说明2.2.2 地图…

你是真的“C”——函数递归详解汉诺塔+青蛙跳台阶

函数递归详解汉诺塔青蛙跳台阶问题&#x1f60e;前言&#x1f64c;函数递归之汉诺塔详解分析&#x1f64c;汉诺塔问题的简介&#x1f60a;汉诺塔的移动图解&#x1f60a;汉诺塔具体的移动过程展示&#x1f60a;汉诺塔的难处所在&#xff1a;&#x1f60a;函数递归之青蛙跳台阶详…

从头安装gdal库(Linux环境下的Python版)

目录前言GDAL安装SWIG安装proj 安装sqlite安装pkg-config 安装其他报错No package libtiff-4 foundPackage liblzma, required by libtiff-4, not foundPackage libjpeg, required by libtiff-4, not foundPackage zlib, required by libtiff-4, not foundchecking for curl-co…

Windows下IIS部署网站流程

IIS Internet information service 是一个web服务器 1. IIS用于windows系统 2.apache用于Linux系统&#xff0c;JAVA的web服务器 3.Nginx用于Linux&#xff0c;负责负载均衡&#xff0c;反向代理 安装完IIS之后&#xff0c;去更改DNS的指向。 DNS指向&#xff1a;IP 和 域名 的…

Dopamine-PEG-N3,多巴胺聚乙二醇叠氮 科研试剂用于点击化学

中文&#xff1a;多巴胺-聚乙二醇-叠氮 英文&#xff1a;Dopamine-PEG-N3&#xff0c;DOPA-PEG-azide 存储条件&#xff1a;-20C&#xff0c;避光&#xff0c;避湿 用 途&#xff1a;仅供科研实验使用&#xff0c;不用于诊治 外观: 固体或粘性液体&#xff0c;取决于分子量 …

3D游戏引擎系统源码C++本科毕业设计,C++ 3D引擎源码,渲染系统使用的OpenGL 及 OpenGL ES

Effective 3D Engine 渲染系统使用的OpenGL 及 OpenGL ES&#xff0c;Windows上OpenGL ES使用AMD的ES模拟器。 环境部署 完整代码下载地址&#xff1a;3D游戏引擎系统源码C本科毕业设计 Win32环境配置 编辑器 将proj_win32/RenderSystem/gles_renderSystem/GLES/dll 中的d…

【web】微信小程序笔记小结(模板与配置)

来源&#xff1a;黑马程序员前端微信小程序开发教程 目录 I. WXML 模板语法 ① 数据绑定 ※※ 基本原则 ※※ 在 data 中定义数据 ※※ 在 WXML 中使用数据 ※※※※ Mustache 语法的格式 ※※※※ Mustache 主要应用场景 1&#xff09;动态绑定内容 2&#xff09;动…

测试篇(二): 如何合理的创建bug、bug的级别、bug的生命周期、跟开发产生争执怎么办

目录一、如何合理的创建bug二、bug的等级三、bug的生命周期四、和开发产生争执怎么办一、如何合理的创建bug 创建Bug的目的就是为了能够让其他人可以尝试复现 一个合格的bug应该包含以下一个要素&#xff1a; 发现问题的版本 例如Web程序对应的浏览器版本&#xff0c;或某个应…

AutoLISP 演练(一)

一、输入左下角点、矩形宽、矩形高后&#xff0c;自动的将图形依所给的条件画出二、变量约定本程序所需的AutoLisp功能函数&#xff08;setq 变量名 变量值&#xff09; ⬅ 设定变量值&#xff08;getpoint [基点] [提示]&#xff09; ⬅ 请求参考基点输入一个点坐标(getreal […