算法题1两数之和

问题:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

解法一:暴力解法

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {int i,j;for(i=0;i<nums.size()-1;i++){for(j=i+1;j<nums.size();j++){if(nums[i]+nums[j]==target){return {i,j};}}}return {i,j};};
};
// 定义一个函数twoSum,它接受一个整数指针nums(指向整数数组的起始位置),一个整数numsSize(表示数组的大小),  
// 以及一个整数target(表示目标和),并返回一个整数指针result,该指针指向一个包含两个整数的数组,  
// 这两个整数是数组中相加等于target的两个数的索引。  
int* twoSum(int* nums, int numsSize, int target) {  int i,j; // 定义两个循环变量i和j,用于遍历数组。  int *result=NULL; // 定义一个整数指针result,并初始化为NULL。这个指针将用于存储找到的索引对。  // 外层循环,从数组的第一个元素开始遍历到倒数第二个元素。  for(i=0;i<numsSize-1;i++) {  // 内层循环,从外层循环当前元素的下一个元素开始遍历到数组的最后一个元素。  for(j=i+1;j<numsSize;j++) {  // 判断当前两个元素之和是否等于目标值target。  if(nums[i]+nums[j]==target) {  // 如果等于target,则动态分配内存来存储两个索引。  result=(int*)malloc(sizeof(int)*2);  // 将找到的索引赋值给result指向的数组。  result[0]=i;  result[1]=j;  // 返回结果指针。  return result;  }  }  }  // 如果没有找到满足条件的索引对,则返回NULL。  return result;  
}

malloc给result分配了两个int类型大小的空间,可知result是一个数组。

最容易理解,但是他的时间复杂为O(n2),因为这是两个for循环。

解法二:使用哈希表

class Solution {  
public:  // 定义一个函数twoSum,接受一个整数向量nums和一个整数target,返回一个整数向量  vector<int> twoSum(vector<int>& nums, int target) {  // 创建一个哈希表a,用于存储数组元素和它们的索引  map<int,int> a; // 建立hash表存放数组元素  // 初始化一个大小为2的整数向量b,用于存放结果,初始值设为-1  vector<int> b(2,-1); // 存放结果  // 遍历数组nums,将数组元素和对应的索引插入到哈希表a中  for(int i=0;i<nums.size();i++)  a.insert(map<int,int>::value_type(nums[i],i));  // 再次遍历数组nums  for(int i=0;i<nums.size();i++) {  // 判断是否存在target - nums[i]这个键,并且该键对应的值不等于当前索引i  // 这样做是为了确保找到的两个数不是同一个数  if(a.count(target-nums[i])>0 && (a[target-nums[i]]!=i))  // 如果找到,则将当前索引i和target - nums[i]对应的索引存入结果向量b中  // 并跳出循环  {  b[0]=i;  b[1]=a[target-nums[i]];  break;  }  }  // 返回结果向量b  return b;  };  
};
class Solution {  
public:  vector<int> twoSum(vector<int>& nums, int target) {  map<int,int> a;  vector<int> b(2,-1);  for(int i=0;i<nums.size();i++) {  if(a.count(target-nums[i])>0) {  b[0]=a[target-nums[i]]; // 正确的应该是这个数的索引  b[1]=i; // 当前数的索引  break;  }  a[nums[i]]=i;  }  return b;  };  
};

不同于数组,哈希表找数的时间复杂度为O(1),所以这里的时间复杂度应为O(n)

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

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

相关文章

金三银四面试题(八):JVM常见面试题(2)

今天我们继续探讨常见的JVM面试题。这些问题不比之前的问题庞大&#xff0c;多用于面试中​JVM部分的热身运动&#xff0c;开胃菜&#xff0c;但是大家已经要认真准备。 JRE、JDK、JVM 及JIT 之间有什么不同&#xff1f; JRE 代表Java 运行时&#xff08;Java run-time&#…

专升本-数字媒体

数字媒体 概念&#xff1a; 媒体&#xff1a;是信息的载体&#xff0c;传播信息的媒介&#xff0c;能为信息的传播提供平台 数字媒体&#xff1a;多重媒体&#xff0c;使用文字&#xff0c;数据&#xff0c;图像&#xff0c;声音等各种媒体 数字媒体技术&#xff1a;利用计…

Kafka入门到实战-第四弹

Kafka入门到实战 Kafka集群搭建官网地址Kafka概述使用Kraft搭建Kafka集群更新计划 Kafka集群搭建 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://kafka.apache.org/Kafka概述 Apache Kafka 是一个开源的分布式事件…

计算机视觉之三维重建(5)---双目立体视觉

文章目录 一、平行视图1.1 示意图1.2 平行视图的基础矩阵1.3 平行视图的极几何1.4 平行视图的三角测量 二、图像校正三、对应点问题3.1 相关匹配法3.2 归一化相关匹配法3.3 窗口问题3.4 相关法存在的问题3.5 约束问题 一、平行视图 1.1 示意图 如下图即是一个平行视图。特点&a…

Redis的Hash数据结构中100万对field和value,field是自增时如何优化?优化Hash结构。

ZipList使用是有条件的&#xff0c;当entry数据量太大时就会启用哈希结构&#xff0c;占用内存空间 1.设置bigkey的上限 在redis.config中设置 2.拆分为string类型 String底层结果没有太多优化&#xff0c;占用内存多 想要批量获取数据麻烦 3.拆分为小的hash 将id/100作为…

2核2G服务器优惠价格轻量61元一年,CVM价格313元15个月

腾讯云2核2G服务器多少钱一年&#xff1f;轻量服务器61元一年&#xff0c;CVM 2核2G S5服务器313.2元15个月&#xff0c;轻量2核2G3M带宽、40系统盘&#xff0c;云服务器CVM S5实例是2核2G、50G系统盘。腾讯云2核2G服务器优惠活动 txybk.com/go/txy 链接打开如下图&#xff1a;…

最小覆盖子串-java

最小覆盖子串-java 题目描述 : 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串&#xff0c;则返回空字符串 "" 。 注意&#xff1a; 对于 t 中重复字符&#xff0c;我们寻找的子字符串中该字符数量必…

Mac上Matlab_R2023b ARM 版 启动闪退(意外退出)解决方法

安装好后&#xff0c;使用 "libmwlmgrimpl.dylib" 文件替换掉"/Applications/Matlab_R2023b.app/bin/maca64/matlab_startup_plugins/lmgrimpl"文件夹下的同名文件 在终端下执行如下命令&#xff1a; codesign --verbose --force --deep -s - /Applicat…

本地项目上传到GitHub

本文档因使用实际项目提交做为案例&#xff0c;故使用xxx等字符进行脱敏&#xff0c;同时隐藏了部分输出&#xff0c;已实际项目和命令行输出为准 0、 Git 安装与GitHub注册 1&#xff09; 在下述地址下载Git&#xff0c;安装一路默认下一步即可。安装完成后&#xff0c;随便…

乡村数字化转型:科技赋能打造智慧农村新生态

随着信息技术的迅猛发展&#xff0c;数字化转型已成为推动社会进步的重要引擎。在乡村振兴的大背景下&#xff0c;乡村数字化转型不仅是提升乡村治理能力和治理水平现代化的关键&#xff0c;更是推动农业现代化、农村繁荣和农民增收的重要途径。本文旨在探讨乡村数字化转型的内…

解决MySQL幻读?可重复读隔离级别背后的工作原理

什么是当前读和快照读 当前读&#xff1a;又称为 "锁定读"&#xff0c;它会读取记录的最新版本&#xff08;也就是最新的提交结果&#xff09;&#xff0c;并对读取到的数据加锁&#xff0c;其它事务不能修改这些数据&#xff0c;直到当前事务提交或回滚。"sele…

MATLAB 打开文件对话框选择点云输入 (52)

MATLAB 打开文件对话框选择点云输入 (52) 一、算法介绍二、算法实现1.代码一、算法介绍 从指定的路径中(具体的文件夹),选择指定的文件格式(比如ply文件),读取手动点击选择的点云。 整个过程通过打开资源管理器的对话框来手动点击选择点云读取。直接运行即可。 二、算…

Linux课程____shell脚本应用

:一、认识shell 常用解释器 Bash , ksh , csh 登陆后默认使用shell&#xff0c;一般为/bin/bash&#xff0c;不同的指令&#xff0c;运行的环境也不同 二、 编写简单脚本并使用 # vim /frist.sh //编写脚本文件&#xff0c;简单内容 #&#xff01;/bin/bash …

CSS3 简介

1.CSS3 概述 CSS3 是CSS2 的升级版本&#xff0c;它在CSS2 的基础上&#xff0c;新增了很多强大的新功能&#xff0c;从而解决一些实际 面临的问题。 CSS3 在未来会按照模块化的方式去发展&#xff1a; https://www.w3.org/Style/CSS/current-work.html CSS3 的新特性如下&am…

翻译 《The Old New Thing》 - Why is a registry file called a “hive“?

Why is a registry file called a “hive“?https://devblogs.microsoft.com/oldnewthing/20030808-00/?p42943 为什么注册表文件被称为‘蜂巢’&#xff1f; Raymond Chen 2003年8月8日 分享一个没用的知识&#xff1a; 话说有一位 Windows NT 的开发者十分讨厌蜜蜂。于是&a…

sectigo 单IP证书360元

IP数字证书使用了强大的加密功能&#xff0c;能够有效保护网站和用户数据在传输过程中的安全。由Sectigo颁发的各种数字证书兼容性高&#xff0c;可以支持几乎所有主流浏览器&#xff0c;在用户访问时不会出现“不安全”提示&#xff0c;Sectigo旗下的IP证书可以为只有公网IP地…

HAProxy + Vitess负载均衡

一、环境搭建 Vitess环境搭建&#xff1a; 具体vitess安装不再赘述&#xff0c;主要是需要启动3个vtgate&#xff08;官方推荐vtgate和vtablet数量一致&#xff09; 操作&#xff1a; 在vitess/examples/common/scripts目录中&#xff0c;修改vtgate-up.sh文件&#xff0c;…

阳光消费金融2023利润创新高,固收业务立功

来源 | 镭射财经&#xff08;leishecaijing&#xff09; 3月28日&#xff0c;光大银行披露了2023年年报&#xff0c;亦公布旗下消金公司阳光消费金融业绩。截至2023年末&#xff0c;阳光消费金融总资产116.77 亿元&#xff0c;同比下滑6.41%&#xff1b;净资产13.19亿元&#…

Python之Opencv教程(4):识别图片中多张人脸

1、识别代码 导入必要的库 import cv2加载人脸识别器 face_detector cv.CascadeClassifier("data//haarcascade_frontalface_alt.xml")这里使用了OpenCV自带的人脸识别分类器&#xff0c;路径为cv2.data.haarcascades ‘haarcascade_frontalface_default.xml’。你…

sqlmap基础知识(二)

一、sqlmap的基本使用 读取文件/上传文件 支持的数据库类型 仅对MySQL、MSSQL、PostgreSQL有效&#xff0c;可以进行文件操作 前提条件 必须是高权限用户 mysql禁用secure_file_priv php禁用GPC 有目录读写文件权限 sqlmap -u url --is-dba # 查看是否为dba权限&#xff0c;…