当前位置: 首页 > news >正文

【刷题】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 思路二 (进行优化)

  1. 仔细想想,上面的遍历属实比较费时间,那我们如何改进它呢?
  2. 我的想法是从选择数上下手,取消逐个遍历,改用 二分查找
  3. 二分查找的效率比逐个遍历快许多。但是进行二分查找 的前提是 数组有序!
  4. 如果我们进行简单的排序,那数组下标就被打乱了,无法返回正确值。
  5. 所以我们有必要创建一个新数组,而且是二维数组,储存值和对应下标
  6. 然后不断将和与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 思路一 &#xff08;简单突破&#xff09;2 思路二 &#xff08;进行优化&#xff09;3 思路三 &#xff08;哈希表 我还不会&#xff09; 谢谢阅读Thanks♪(&#xff65;ω&#xff65;)&#xff89;下一篇文章见&#xff01;&#xff01;&#xff01; 两数…...

Sip - Ubuntu 配置 miniSIPServer 服务器(测试用)

客户提供的账号过期了&#xff0c;简单搭建 SIP 服务器&#xff0c;以便测试使用。个人认为这个配置起来最为简单&#xff0c;且测试功能足够。 官网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和文心一言都是基于深度学习技术的自然语言处理模型&#xff0c;它们各自具有优势和局限性&#xff0c;需要根据具体需求进行选择。以下是两者的比较&#xff1a; 算力&#xff1a;ChatGPT由OpenAI开发&#xff0c;具有强大的文本生成能力和语言理解能力&#xff0c;其训…...

第07章_面向对象编程(进阶)拓展练习(关键字:this,继承性和方法重写,关键字:super,多态性,Object类)

文章目录 第07章_面向对象编程&#xff08;进阶&#xff09;拓展练习01-关键字&#xff1a;this1、Circle类2、MyDate类3、Card类 02-继承性和方法重写4、Person、Student、Teacher类5、DepositCard、CreditCard类6、Employee、Programmer、Designer、Architect类7、判断输出结…...

小米路由器有线中继模式设置固定IP

第一步 小米路由器切换为有线中继模式后&#xff0c;进电脑版web管理界面&#xff0c;点击中继设置&#xff0c;把web页面地址中apsetting修改为setting&#xff08;如下&#xff09;后按回车键加载新页面。 修改前&#xff1a; http://192.168.1.168/cgi-bin/luci/;stokxxxx…...

用python实现给出关键字查找并标注pdf文件中关键字

要在Python中标注PDF文件中的关键字&#xff0c;可以使用Python的PDFMiner库和Python的matplotlib库。 首先&#xff0c;需要安装这两个库。可以使用pip命令进行安装&#xff1a; shell 复制代码 pip install pdfminer.six matplotlib 接下来&#xff0c;可以使用以下代码实现…...

postman自动化接口测试

背景描述 有一个项目要使用postman进行接口测试&#xff0c;接口所需参数有&#xff1a; appid: 应用标识&#xff1b;sign&#xff1a;请求签名&#xff0c;需要使用HMACSHA1加密算法计算&#xff0c;签名串是&#xff1a;{appid}${url}${stamp}&#xff1b;stamp&#xff1…...

React入门 - 04(从编写一个简单的 TodoList 说起)

继上一节我们已经对 React组件和 ”JSX语法“有了大概的了解&#xff0c;这一节我们继续在 react-demo这个工程里编写代码。这一节我们来简单实现一个 TodoList来更加了解编写组件的一些细节。 1、在编辑器中打开 react-demo这个工程 2、打开 index.js文件&#xff0c;将组件 …...

EDM群发的优势

在当今这个数字化的时代&#xff0c;电子邮件营销&#xff08;EDM&#xff09;已经成为企业与客户沟通的重要手段。相较于传统的营销方式&#xff0c;EDM群发具有许多独特的优势&#xff0c;使其在商业竞争中占据了不可替代的地位。 首先&#xff0c;EDM群发具有精准的目标定位…...

AI对决:ChatGPT与文心一言的深度比较

. 个人主页&#xff1a;晓风飞 专栏&#xff1a;数据结构|Linux|C语言 路漫漫其修远兮&#xff0c;吾将上下而求索 文章目录 引言ChatGPT与文心一言的比较Chatgpt的看法文心一言的看法Copilot的观点chatgpt4.0的回答 模型的自我评价自我评价 ChatGPT的优势在这里插入图片描述 文…...

在国产操作系统下管理Oracle数据库

Oracle公司是全球最大的信息管理软件及服务供应商&#xff0c;其开发的数据库产品因性能卓越而闻名&#xff0c;占有最大的市场份额&#xff0c;被广泛用于各个市场领域。 然而在信创化的时代&#xff0c;国产操作系统已然是大势所趋&#xff0c;但是由于历史原因&#xff0c;…...

RTSP/Onvif安防视频监控平台EasyNVR漏洞扫描及解决方法

视频安防监控平台EasyNVR可支持设备通过RTSP/Onvif协议接入&#xff0c;并能对接入的视频流进行处理与多端分发&#xff0c;包括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}{彩} 彩&#xff01; 主要专栏内容包括&#xff1a; †《LAMMPS小技巧》&#xff1a; ‾ \textbf…...

【MATLAB】Linux版本 高分辨率屏 调整显示缩放

0 引言 安装了linux版本的MATLAB R2023b之后&#xff0c;发现工具栏字体很小不方便使用&#xff0c;所以上网找到了MATLAB论坛上某位大佬的教程&#xff1a;参考链接&#xff0c;放在这里供各位参考 。 1 环境 这里注明我的matlab安装环境仅供参考&#xff0c;未在其他环境下…...

windows系统中,通过LOAD到入csv格式的文件到neo4j中,如何写文件路径

在Neo4j中&#xff0c;使用LOAD CSV语句导入CSV文件时&#xff0c;需要确保你的文件路径是正确的。如果你使用的是Neo4j Desktop或者Neo4j Server&#xff0c;通常需要将CSV文件放在特定的导入目录下。 例如&#xff0c;如果你使用的是Neo4j Desktop&#xff0c;通常会有一个默…...

斯坦福 Stats60:21 世纪的统计学:第十五章到第十八章

第十五章&#xff1a;比较均值 原文&#xff1a;statsthinking21.github.io/statsthinking21-core-site/comparing-means.html 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 我们已经遇到了许多情况&#xff0c;我们想要询问样本均值的问题。在本章中&#xff0c;我们…...

C# 关于当ObservableCollection增删查改元素时,触发事件用例

ObservableCollection 类提供了一种实时监测集合变化的机制&#xff0c;可以通过订阅 CollectionChanged 事件来响应集合的添加、移除和重置等变化。 using System; using System.Collections.ObjectModel; using System.Collections.Specialized;class Program {static void …...

阿里云 WindowsServer 使用之 配置 SQL Server 允许远程连接

阿里云 WindowsServer 使用之 配置 SQL Server 允许远程连接 第一步&#xff1a;安装 SQL Server 数据库 这是一个很详细的安装教程&#xff0c;可以参考一下 安装SQL Server详细教程 需要注意&#xff1a;安装实例时&#xff0c;建议在‘身份验证模式’直接选择“混合模式”…...

树形+表单的封装+查重数组

一.树形结构的处理 后端传过来的数据,可能是平铺的一个结构&#xff1a; 在财务部下面,有财务核算部,薪资管理部,我们需要将平铺的数据通过递归转化成&#xff1a; 转换成有children的形式&#xff0c;来渲染到页面上去,在这里用到了作用域插槽,具体怎么使用,可以通过查看文档…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...