【刷题】leetcode 1 . 两数之和

两数之和
- 两数之和
- 1 思路一 (简单突破)
- 2 思路二 (进行优化)
- 3 思路三 (哈希表 我还不会)
- 谢谢阅读Thanks♪(・ω・)ノ
- 下一篇文章见!!!
两数之和
题目链接

1 思路一 (简单突破)
最简单的思想: 遍历 从头开始逐个遍历。
首先选定 加数1 然后寻找 加数2 ,如果两者之和满足条件 target 。返回相应下标即可!
int* twoSum(int* nums, int n, int target, int* returnSize) {for(int i = 0;i < n;i++){//加数1 从头开始for(int j = i + 1;j < n;j++){//加数2 从加数1 后一位开始if(nums[i]+nums[j] == target){//满足条件即可返回对应下标int* a = (int*)malloc(2*sizeof(int)) ;a[0] = i;a[1] = j;//返回的数组大小*returnSize = 2;//返回数组return a;}}}//如果全不满足 返回NULL*returnSize = 0;return NULL;
}
提交! 过啦!!!

但是看看运算时间,居然这么慢!确实咱们的算法时间复杂度是O(n^2),不够快速。
才打败了 69% 的用户。我们不能满足当下,让我们思考有没有其他思路。
2 思路二 (进行优化)
- 仔细想想,上面的遍历属实比较费时间,那我们如何改进它呢?
- 我的想法是从选择数上下手,取消逐个遍历,改用 二分查找。
- 二分查找的效率比逐个遍历快许多。但是进行二分查找 的前提是 数组有序!
- 如果我们进行简单的排序,那数组下标就被打乱了,无法返回正确值。
- 所以我们有必要创建一个新数组,而且是二维数组,储存值和对应下标
- 然后不断将和与target 比较,进行二分查找,即可。
//qsort 的比较函数 注意我们传的数据类型是 int*
static int compare(int* n1 , int* n2){return n1[0] - n2[0] ;}
int* twoSum(int* nums, int numsSize, int target, int* returnSize) {int n = numsSize;int arr[n][2]; // 分别储存下标和值大小 保证同时移动// 将原数组的值以及它对应的下标存入临时数组中for (int i = 0; i < n; i++) { arr[i][0] = nums[i]; // 值arr[i][1] = i; // 该值对应的下标}//排序qsort(arr,n,sizeof(arr[0]),compare);//二分寻找for(int i = 0; i < n;i++){int left = 0 ,right = n-1;//区间[0 , n-1]while(left <= right){int mid = (left + right) / 2;//区间中点//检查是否和为target 并且 两数下标不能相同(否则就是同一个数)if(arr[mid][0] + nums[i] == target && i != arr[mid][1] ){*returnSize = 2 ; //两个数//开辟两个int类型的空间int* ret = (int*)malloc(sizeof(int)*2); //记录两个数下标ret[0] = i;ret[1] = arr[mid][1];return ret;}//如果大于target 则在小区间寻找else if(arr[mid][0] + nums[i] > target){right = mid-1;}//如果小于target 则在大区间寻找else {left = mid + 1;}}}//没有找到*returnSize = 0;return NULL;}
提交! 过啦!!!!!!!

这下子打败了98%的用户。我们从 120 ms 一下子来到 8 ms。
时间复杂度来到O(nlogn).
简直就是飞机和马车的差距
那么问题来到为什么还有 2% 比我们快????????
我看了大佬们的代码,使用到了哈希表 而我现在还不会!哭了。
o(╥﹏╥)oo(╥﹏╥)o!o(╥﹏╥)oo(╥﹏╥)o!o(╥﹏╥)oo(╥﹏╥)o!
3 思路三 (哈希表 我还不会)
下面给大家看一下大佬的 0 ms 的代码。
#define HashSize 107 // 哈希表大小typedef struct Node { // 哈希结点int value; // 值int index; // 下标struct Node* next; // 下指针
}Node;int* twoSum(int* nums, int numsSize, int target, int* returnSize) {int n = numsSize; // 数组长度Node* hash[HashSize]; // 哈希表for (int i = 0; i < HashSize; i++) { // 初始化哈希表hash[i] = (Node*)malloc(sizeof(Node));hash[i]->value = hash[i]->index = -1;hash[i]->next = NULL;}for (int i = 0; i < n; i++) { // 遍历一遍原数组int pos = abs(target - nums[i]) % HashSize; // 找到target - nums[i]在哈希表中对应的位置Node* head = hash[pos];while (head->next && head->next->value != target - nums[i]) head = head->next; // 找该位置是否有target - nums[i]这个值if (head->next) { // 找到符合题意的值*returnSize = 2;int* ans = (int*)malloc(sizeof(int) * 2);ans[0] = i; ans[1] = head->next->index; // 写入答案for (int i = 0; i < HashSize; i++) free(hash[i]);return ans;}pos = abs(nums[i]) % HashSize; // 找到nums[i]在哈希表中对应的位置head = hash[pos];while (head->next) head = head->next; // 写在这个位置的末尾head->next = (Node*)malloc(sizeof(Node));head->next->value = nums[i]; // 写入该值head->next->index = i; // 写入该值对应的下标head->next->next = NULL;}for (int i = 0; i < HashSize; i++) free(hash[i]);*returnSize = 0;return NULL;
}作者:星开祈灵
链接:https://leetcode.cn/problems/two-sum/solutions/2326455/1-liang-shu-zhi-he-by-xing-kai-qi-ling-vxt6/
来源:力扣(LeetCode)
著作权归作者所有。
C语言的缺陷 , 需要手撕哈希表。
来看大佬 C++ 的代码,真的非常美观!!!!
美!!!! 帅!!!! 炸裂!!!!
class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {map<int,int> a;//提供一对一的hashvector<int> b(2,-1);//用来承载结果,初始化一个大小为2,值为-1的容器bfor(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;//反过来放入map中,用来获取结果下标}return b;};
};作者:陈乐乐
链接:https://leetcode.cn/problems/two-sum/solutions/4361/liang-shu-zhi-he-by-gpe3dbjds1/
来源:力扣(LeetCode)
著作权归作者所有。
谢谢阅读Thanks♪(・ω・)ノ
下一篇文章见!!!
相关文章:
【刷题】leetcode 1 . 两数之和
两数之和 两数之和1 思路一 (简单突破)2 思路二 (进行优化)3 思路三 (哈希表 我还不会) 谢谢阅读Thanks♪(・ω・)ノ下一篇文章见!!! 两数…...
Sip - Ubuntu 配置 miniSIPServer 服务器(测试用)
客户提供的账号过期了,简单搭建 SIP 服务器,以便测试使用。个人认为这个配置起来最为简单,且测试功能足够。 官网miniSIPServer - 基于 Windows 以及 Linux 平台的 VoIP (SIP) 服务器软件. miniSIPServer 可能是最容易使用的 VoIP(SIP) 服务器…...
SpringCloud openFeign 之 获取被调用服务名
SpringCloud openFeign 之 获取被调用服务名 一. 概述 低版本 feign 只能获取到被调用方法的信息。 只有高版本 feign 才支持获取到被调用服务的信息。 二. 代码实现 package com.zxguan.springcloud2.template.user;import com.zxguan.springcloud2.template.user.config…...
ChatGPT和文心一言哪个更好用?
ChatGPT和文心一言都是基于深度学习技术的自然语言处理模型,它们各自具有优势和局限性,需要根据具体需求进行选择。以下是两者的比较: 算力:ChatGPT由OpenAI开发,具有强大的文本生成能力和语言理解能力,其训…...
第07章_面向对象编程(进阶)拓展练习(关键字:this,继承性和方法重写,关键字:super,多态性,Object类)
文章目录 第07章_面向对象编程(进阶)拓展练习01-关键字:this1、Circle类2、MyDate类3、Card类 02-继承性和方法重写4、Person、Student、Teacher类5、DepositCard、CreditCard类6、Employee、Programmer、Designer、Architect类7、判断输出结…...
小米路由器有线中继模式设置固定IP
第一步 小米路由器切换为有线中继模式后,进电脑版web管理界面,点击中继设置,把web页面地址中apsetting修改为setting(如下)后按回车键加载新页面。 修改前: http://192.168.1.168/cgi-bin/luci/;stokxxxx…...
用python实现给出关键字查找并标注pdf文件中关键字
要在Python中标注PDF文件中的关键字,可以使用Python的PDFMiner库和Python的matplotlib库。 首先,需要安装这两个库。可以使用pip命令进行安装: shell 复制代码 pip install pdfminer.six matplotlib 接下来,可以使用以下代码实现…...
postman自动化接口测试
背景描述 有一个项目要使用postman进行接口测试,接口所需参数有: appid: 应用标识;sign:请求签名,需要使用HMACSHA1加密算法计算,签名串是:{appid}${url}${stamp};stamp࿱…...
React入门 - 04(从编写一个简单的 TodoList 说起)
继上一节我们已经对 React组件和 ”JSX语法“有了大概的了解,这一节我们继续在 react-demo这个工程里编写代码。这一节我们来简单实现一个 TodoList来更加了解编写组件的一些细节。 1、在编辑器中打开 react-demo这个工程 2、打开 index.js文件,将组件 …...
EDM群发的优势
在当今这个数字化的时代,电子邮件营销(EDM)已经成为企业与客户沟通的重要手段。相较于传统的营销方式,EDM群发具有许多独特的优势,使其在商业竞争中占据了不可替代的地位。 首先,EDM群发具有精准的目标定位…...
AI对决:ChatGPT与文心一言的深度比较
. 个人主页:晓风飞 专栏:数据结构|Linux|C语言 路漫漫其修远兮,吾将上下而求索 文章目录 引言ChatGPT与文心一言的比较Chatgpt的看法文心一言的看法Copilot的观点chatgpt4.0的回答 模型的自我评价自我评价 ChatGPT的优势在这里插入图片描述 文…...
在国产操作系统下管理Oracle数据库
Oracle公司是全球最大的信息管理软件及服务供应商,其开发的数据库产品因性能卓越而闻名,占有最大的市场份额,被广泛用于各个市场领域。 然而在信创化的时代,国产操作系统已然是大势所趋,但是由于历史原因,…...
RTSP/Onvif安防视频监控平台EasyNVR漏洞扫描及解决方法
视频安防监控平台EasyNVR可支持设备通过RTSP/Onvif协议接入,并能对接入的视频流进行处理与多端分发,包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等多种格式。安防视频监控平台可提供视频实时监控直播、云端录像、云存储、录像检索与回看、告警等视频…...
Ovtio不同版本下载
关注 M r . m a t e r i a l , \color{Violet} \rm Mr.material\ , Mr.material , 更 \color{red}{更} 更 多 \color{blue}{多} 多 精 \color{orange}{精} 精 彩 \color{green}{彩} 彩! 主要专栏内容包括: †《LAMMPS小技巧》: ‾ \textbf…...
【MATLAB】Linux版本 高分辨率屏 调整显示缩放
0 引言 安装了linux版本的MATLAB R2023b之后,发现工具栏字体很小不方便使用,所以上网找到了MATLAB论坛上某位大佬的教程:参考链接,放在这里供各位参考 。 1 环境 这里注明我的matlab安装环境仅供参考,未在其他环境下…...
windows系统中,通过LOAD到入csv格式的文件到neo4j中,如何写文件路径
在Neo4j中,使用LOAD CSV语句导入CSV文件时,需要确保你的文件路径是正确的。如果你使用的是Neo4j Desktop或者Neo4j Server,通常需要将CSV文件放在特定的导入目录下。 例如,如果你使用的是Neo4j Desktop,通常会有一个默…...
斯坦福 Stats60:21 世纪的统计学:第十五章到第十八章
第十五章:比较均值 原文:statsthinking21.github.io/statsthinking21-core-site/comparing-means.html 译者:飞龙 协议:CC BY-NC-SA 4.0 我们已经遇到了许多情况,我们想要询问样本均值的问题。在本章中,我们…...
C# 关于当ObservableCollection增删查改元素时,触发事件用例
ObservableCollection 类提供了一种实时监测集合变化的机制,可以通过订阅 CollectionChanged 事件来响应集合的添加、移除和重置等变化。 using System; using System.Collections.ObjectModel; using System.Collections.Specialized;class Program {static void …...
阿里云 WindowsServer 使用之 配置 SQL Server 允许远程连接
阿里云 WindowsServer 使用之 配置 SQL Server 允许远程连接 第一步:安装 SQL Server 数据库 这是一个很详细的安装教程,可以参考一下 安装SQL Server详细教程 需要注意:安装实例时,建议在‘身份验证模式’直接选择“混合模式”…...
树形+表单的封装+查重数组
一.树形结构的处理 后端传过来的数据,可能是平铺的一个结构: 在财务部下面,有财务核算部,薪资管理部,我们需要将平铺的数据通过递归转化成: 转换成有children的形式,来渲染到页面上去,在这里用到了作用域插槽,具体怎么使用,可以通过查看文档…...
用Wireshark抓包分析CAN总线:手把手教你解码数据帧与遥控帧
用Wireshark抓包分析CAN总线:从数据捕获到故障诊断的完整指南 CAN总线作为现代汽车和工业控制系统的神经中枢,其通信质量直接关系到整个系统的可靠性。本文将带您深入实战,通过WiresharkPCAN-USB这套黄金组合,掌握从基础抓包到高级…...
实战驱动:基于快马平台生成集成openclaw的ubuntu自动化测试项目实例
在自动化测试和数据抓取领域,openclaw凭借其强大的浏览器控制能力成为开发者的得力助手。最近我在一个电商价格监控项目中需要快速搭建环境,发现通过InsCode(快马)平台可以轻松生成包含完整环境配置和实战示例的项目模板,这里分享下我的实践过…...
学Simulink——基于Simulink的基于扰动观测器(DOB)的负载扰动补偿
目录 手把手教你学Simulink——基于Simulink的基于扰动观测器(DOB)的负载扰动补偿 摘要 一、背景与挑战 1.1 负载扰动补偿的痛点与传统控制局限 1.1.1 应用场景与核心指标 1.1.2 传统PI控制的缺陷 1.2 DOB负载扰动补偿的核心优势 1.3 设计目标 二、系…...
专治写作卡点!这几款 AI 续写软件,让论文写作像呼吸一样简单
写论文最怕卡壳?大纲想破头、续写没思路、降重改到哭,还怕 AI 痕迹露馅?2026 年这几款 AI 续写软件,直击本科生、研究生核心痛点,从选题到答辩一站式搞定,让写作效率翻倍!一、PaperRedÿ…...
Python 使用 `raise` 报错抛出异常显示 Unicode 码如何解决
在 Python 开发中,我们经常使用 raise 抛出异常来处理错误情况。但有时候,异常信息中的中文或其他非 ASCII 字符会被显示为 Unicode 转义序列(如 \u6b63\u6587),而不是直接显示中文(如“正文”)…...
手把手教你用Docker一键部署encrypt-labs靶场(附国内镜像加速配置)
零基础实战:Docker快速部署encrypt-labs靶场全攻略 在网络安全学习过程中,靶场环境是必不可少的实践平台。encrypt-labs作为一个开源的网络安全实验环境,包含了从基础到进阶的各种加密与解密挑战。本文将带你从零开始,用Docker快速…...
微生物网络分析参数配置与结果验证:microeco中SpiecEasi的进阶应用指南
微生物网络分析参数配置与结果验证:microeco中SpiecEasi的进阶应用指南 【免费下载链接】microeco An R package for data analysis in microbial community ecology 项目地址: https://gitcode.com/gh_mirrors/mi/microeco 在微生物生态学研究中,…...
C#实战:基于TouchSocket构建高性能WebSocket双向通信系统
1. WebSocket与TouchSocket核心概念 第一次接触WebSocket时,我被它的双向通信能力惊艳到了。想象一下快递员和收件人的关系:传统HTTP就像每次送货都要重新敲门确认身份(建立连接),而WebSocket则像快递员直接把包裹交给…...
“AI人工智能+”政务一网通办多智能体协同建设方案:五层两体系总体架构、数据与安全体系、信创适配与实施运维
该方案是一份成熟的技术蓝图,它不仅仅是将AI简单叠加到政务系统,而是通过“多智能体协同”重构了业务组织逻辑。方案详细定义了从语料治理、模型微调、Agent协作、信创适配到安全合规的全链路工程细节,具有极强的实操性与前瞻性,适…...
如何在Windows 11 LTSC中快速安装微软商店:完整免费指南
如何在Windows 11 LTSC中快速安装微软商店:完整免费指南 【免费下载链接】LTSC-Add-MicrosoftStore Add Windows Store to Windows 11 24H2 LTSC 项目地址: https://gitcode.com/gh_mirrors/ltscad/LTSC-Add-MicrosoftStore Windows 11 LTSC版本以其卓越的稳…...
