每日一题 --- 两数之和[力扣][Go]

两数之和

题目:1. 两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:

输入:nums = [3,2,4], target = 6
输出:[1,2]

示例 3:

输入:nums = [3,3], target = 6
输出:[0,1]

提示:

  • 2 <= nums.length <= 104
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109
  • 只会存在一个有效答案

**进阶:**你可以想出一个时间复杂度小于 O(n2) 的算法吗?

方法一:

使用二元组,解决问题。

type eryuanzu struct {Index intValue int
}func twoSum(nums []int, target int) []int {Len := len(nums)res := make([]int, 2)eryuanzus := make([]*eryuanzu, Len)// m 排序for i := 0; i < Len; i++ {eryuanzus[i] = &eryuanzu{Index: i, Value: nums[i]}}for _, e := range eryuanzus {fmt.Println(e.Index, e.Value)}// 给二元组排序qSortForEryuanzu(eryuanzus, 0, Len-1)for _, e := range eryuanzus {fmt.Println(e.Index, e.Value)}l, r := 0, Len-1for l < r {if eryuanzus[l].Value+eryuanzus[r].Value < target {l++} else if eryuanzus[l].Value+eryuanzus[r].Value > target {r--} else {res[0] = eryuanzus[l].Indexres[1] = eryuanzus[r].Indexreturn res}}return res
}func qSortForEryuanzu(es []*eryuanzu, s, h int) {if s >= h {return}pos := positionForEryuanzu(es, s, h)qSortForEryuanzu(es, s, pos-1)qSortForEryuanzu(es, pos+1, h)
}func positionForEryuanzu(es []*eryuanzu, s, h int) int {base := es[s]l, r := s, hfor l < r {for l < r && es[r].Value >= base.Value {r--}es[l] = es[r]for l < r && es[l].Value <= base.Value {l++}es[r] = es[l]}es[l] = basereturn l
}

使用快排时间复杂度O(nlogn)。空间复杂度消耗较大O(n)。

时间复杂度是符合进阶要求了,是否还有更快的方法呢?

我们如果遍历数组,只需要知道当前遍历的元素有没有与之相加为target的数。那么我们就可以用哈希表来完成。

方法二:

使用哈希表。

func twoSum(nums []int, target int) []int {m := make(map[int]int)for i, num := range nums {m[num] = i}for i, num := range nums {if j, ok := m[target-num]; ok {if i != j {return []int{i, j}}}}return nil
}

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

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

相关文章

深入理解 Java 序列化中的 readResolve() 方法

深入理解 Java 序列化中的 readResolve() 方法 在 Java 编程中&#xff0c;序列化是一个将对象状态转换为字节流以便存储或传输的过程&#xff0c;而反序列化则是将这些字节流恢复为原始对象状态的过程。Java 提供了强大的序列化机制&#xff0c;使得开发者能够轻松地处理对象…

SSM框架学习——Spring的控制反转IoC与依赖注入DI

控制反转IoC与依赖注入DI 概念 提到Spring首先想到的肯定是Spring的IoC容器了。在了解Spring的用法之前我们必须了解什么是控制反转IoC和依赖注入DI。 **控制反转&#xff08;Inversion of Control&#xff09;**是面向对象编程中的一种设计原则&#xff0c;它建议将不需要的…

全量知识系统 详细设计 之preserving (百度AI助手QA)

Q1. 1、三种对象三种库&#xff1a;python 数据对象 none对象: 对等立方体&#xff08;PQR&#xff09; ole对象Y 。 pqr均为立体库&#xff08;工厂级的&#xff09;&#xff1b;Java 类对象 Empty对象 &#xff1a;公差立方体(XYZ ) 值对象C。 xyz均为线库&#xff08;车间…

【软考】系统集成项目管理工程师(二十二)法律法规【2分】

一、合同法 1、内容 当事人的名称或者姓名和住所、标的、数量、质量、价款或者报酬&#xff1b;履行期限、地点和方式&#xff1b;违约责任和解决争议的方法 练一练 【例1-高16下】格式条款是当事人为了重复使用而预先拟定&#xff0c;并在订立合同时未与对方协商的…

Java language programming:求学生的平均身高

题目&#xff1a; 从键盘输入若干个人的身高&#xff0c;计算出平均身高&#xff08;平均身高为int类型&#xff09;。当输入身高值为0时&#xff0c;表示输入结束。 输入格式: 输入若干个人的身高值输入在同一行&#xff0c;用空格分隔。 输出格式: 按照输出样例格式输出平均…

共享内存 - windows平台和linux平台的不同处理

1.各个平台下的共享内存的使用方法 共享内存主要用来进行模块分割&#xff0c;复杂性隔离的用途。python这类跨平台平台其实是无法完全消弭各个平台间的个体差异&#xff0c;一个简单的例子&#xff1a; import posix_ipc import mmap# 创建或打开共享内存 shm posix_ipc.Sh…

matlab 坐标系变换

文章目录 对象轴角 axis-angles欧拉角 Euler angles四元数 quaternion旋转矩阵 rotation matrices齐次变换矩阵 Homogeneous Transformation坐标系换算 Coordinate Conversions图变换 Plot Transformations对象 对象含义se2SE(2)齐次变换矩阵se3SE(3)齐次变换矩阵so2SO(2)旋转s…

内存泄漏检查工具下载(vld)

前言&#xff1a;在我们向内存申请动态空间的时候&#xff0c;如果使用完之后不将申请的空间释放&#xff0c;就会造成内存泄漏的情况&#xff0c;但是一般情况下&#xff0c;我们是无法通过运行代码来知道是否造成了内存泄漏&#xff0c;所以vld就成为了检查内存是否泄漏的好帮…

rocketMQ中store目录解释

rocketMQ中有个store目录&#xff0c;它是用来存放和管理broker中的消息&#xff0c;queue和topic的。 下面的是store的目录 abort&#xff1a;该文件在broker启动后会自动创建&#xff0c;broker关闭后消失&#xff0c;若没有消失则说明该broker非正常关闭。 checkpoint&…

面向对象设计之开闭原则

设计模式专栏&#xff1a; http://t.csdnimg.cn/4Mt4u 目录 1.引言 2.如何理解“对扩展开放、对修改关闭” 3.修改代码就意味着违反开闭原则吗 4.如何做到“对扩展开放、对修改关闭” 5.如何在项目中灵活应用开闭原则 6.总结 1.引言 开闭原则(Open Closed Principle&…

Python多任务处理---多线程

引入 生活中&#xff0c;我们在电脑上打开了一个word, 这个word对操作系统来说就是一个进程。我们在进行word操作的时候&#xff0c;比如在你打字的时候&#xff0c;该word同时可以进行文字检查。发现了没&#xff0c;在同一个进程中&#xff0c;我们也可以进行同时操作。…

【RV1126】瑞芯微RV1126开发板双网口问题

今天新拿到瑞芯微RV1126的开发板&#xff0c;是双网口双百兆接口&#xff0c;内存为2G&#xff0c;emmc flash为32G&#xff0c;一开始无法分辨物理接口和系统的eth是对应的&#xff0c;遂想用ethtool工具来查看网速&#xff0c;发现&#xff1a; ethtool eth0 # 可以正常返回…

Acwing.731 毕业旅行问题(状态压缩动态规划)

题目 小明目前在做一份毕业旅行的规划。 打算从北京出发&#xff0c;分别去若干个城市&#xff0c;然后再回到北京&#xff0c;每个城市之间均乘坐高铁&#xff0c;且每个城市只去一次。 由于经费有限&#xff0c;小明希望能够通过合理的路线安排尽可能的省些路上的花销。 …

如何在 Debian VPS 上添加、删除和授予用户 sudo 权限

简介 当你启动一个新的服务器时&#xff0c;会创建一个名为 root 的默认账户。这个用户拥有完全的系统访问权限&#xff0c;应该仅用于管理任务。作为 root 用户&#xff0c;你基本上可以对系统做任何操作&#xff0c;这很强大&#xff0c;但也极其危险。Linux 没有“撤销”按…

Leetcode 73 矩阵置零

题目信息 LeetCode地址: . - 力扣&#xff08;LeetCode&#xff09; 题目理解 矩阵是m*n的&#xff0c;如果某个元素(i,j)等于0&#xff0c;则将第i行和第j列的所有元素都置零。既然如此&#xff0c;我们可以便利每一个元素&#xff0c;并记录下哪一行哪一列有零。记录完毕后…

【C++进阶】二叉搜索树(来自二叉树的复仇)

&#x1fa90;&#x1fa90;&#x1fa90;欢迎来到程序员餐厅&#x1f4ab;&#x1f4ab;&#x1f4ab; 主厨&#xff1a;邪王真眼 主厨的主页&#xff1a;Chef‘s blog 所属专栏&#xff1a;c大冒险 总有光环在陨落&#xff0c;总有新星在闪烁 [本节目标] 1. 二叉搜索树…

KaTex 常用公式编辑

原文&#xff1a;https://blog.iyatt.com/?p7854 注&#xff1a;语法上和 Latex 差不多一样&#xff0c;我是因为 WordPress 上使用 WP Githuber MD 插件&#xff0c;才用的 KaTex&#xff08;插件里面的 LaTex 模块有 bug&#xff0c;无法渲染&#xff09; 希腊字母 大写代…

MyBatis 参数重复打印的bug

现象 最近有个需求&#xff0c;需要在mybatis对数据库进行写入操作的时候&#xff0c;根据条件对对象中的某个值进行置空&#xff0c;然后再进行写入&#xff0c;这样数据库中的值就会为空了。 根据网上查看的资料&#xff0c;选择在 StatementHandler 类执行 update 的时候进…

C++之调用Python

1、配置头文件 Python安装目录下的include目录加入头文件目录。Visual Studio2022中操作路径是&#xff1a;属性–> C/C -> 常规-> 附加包含目录 C:\Users \AppData\Local\Programs\Python\Python39\include 2、配置lib库目录 要将Python39.lib加入编译链接。Visua…

neo4j使用详解(七、cypher数学函数语法——最全参考)

Neo4j系列导航&#xff1a; neo4j及简单实践 cypher语法基础 cypher插入语法 cypher插入语法 cypher查询语法 cypher通用语法 cypher函数语法 5.数学函数 5.1.数值函数 数学函数仅对数字表达式进行运算&#xff0c;如果对任何其他值使用&#xff0c;将返回错误 abs()&#xf…