力扣第一题-两数之和[简单]

题目描述

给定一个整数数组 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 <= 10^4
  • -10^9 <= nums[i] <= 10^9
  • -10^9 <= target <= 10^9
  • 只会存在一个有效答案

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

解法

暴力枚举

public int[] twoSum(int[] nums, int target) {int n = nums.length;for (int i = 0; i < n; ++i) {for (int j = i + 1; j < n; ++j) {if (nums[i] + nums[j] == target) {return new int[]{i, j};}}}return new int[]{};
}

明显这个算法的时间复杂度是 O(N2),题目里问我 你可以想出一个时间复杂度小于 O(n2) 的算法吗? 那我就得想一想了。。

二分查找(失败了)

二分查找只适用于有序数组

public int[] twoSum(int[] nums, int target) {// 先进行升序排序sort(nums);int length = nums.length;for (int i = 0; i < length; i++) {int findNum = target - nums[i];int leftIndex = i + 1;int rightIndex = length - 1;int index = binarySearch(nums, findNum, leftIndex, rightIndex);if (index != -1) {// 找到目标值,返回索引数组return new int[]{i, index};}}return new int[]{};
}/*** 二分查找** @param nums 数组* @param findNum 要查找的数值* @param left 左边索引* @param right 右边索引* @return 查询到的索引,未查询到返回-1*/
private int binarySearch(int[] nums, int findNum, int left, int right) {while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] == findNum) {// 找到目标值,返回索引return mid;} else if (nums[mid] > findNum) {// 目标值在左半部分,更新右边界right = mid -1;} else {// 目标值在右半部分,更新左边界left = mid + 1;}}return -1;
}

输入数组 [3, 2, 4], 查找相加结果等于6 的两个数的索引

上述代码返回的结果是 [0,2] 3+4显然是不等于6的

原因是在代码开始执行 sort 后,数组的顺序发生了变化,虽然可以找到 相加等于target的两个数值,但无法找到最初对应的索引。除非,被查找的数组是个有序数组

因此,二分查找只对有序数组有效!!

哈希表

用哈希表实现就很简单了,准备一个map,以数值做为key,以索引作为value

遍历数组,查询map中是否存在目标值,存在返回 当前索引 以及 map中存储的目标值对应的索引;不存在 则向map中插入当前数值及索引

时间复杂度和空间复杂度都是O(N)

public int[] twoSum(int[] nums, int target) {HashMap<Integer, Integer> numsMap = new HashMap<>();for (int i = 0; i < nums.length; i++) {int targetNum = target - nums[i];if (numsMap.containsKey(targetNum)) {return new int[]{i, numsMap.get(targetNum)};}numsMap.put(nums[i], i);}return new int[]{};
}

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

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

相关文章

【Python百宝箱】Python律动:探索声纹识别与语音合成的Python奇迹

语音的魔法方程&#xff1a;Python引领语音领域的创新探索 前言 在数字化时代&#xff0c;语音处理技术的快速发展为人机交互、安全认证、虚拟现实等领域带来了无限可能。本文深入探讨了声纹识别和语音合成的整合&#xff0c;以及Python在声学领域中的关键角色。通过详细介绍…

分布式事务--分布式事务理论基础

1.本地事务 本地事务&#xff0c;也就是传统的单机事务。在传统数据库事务中&#xff0c;必须要满足四个原则&#xff1a; 2.分布式事务 分布式事务&#xff0c;就是指不是在单个服务或单个数据库架构下&#xff0c;产生的事务&#xff0c;例如&#xff1a; 跨数据源的分布式…

《人工智能导论》知识思维导图梳理【第6章节】

文章目录 第六章 知识图谱1 知识图谱概述2 知识图谱相关概念3 知识图谱的逻辑结构4 知识图谱的数据存储5 知识图谱的构建过程6 例题 markdown内容的分享 第六章 知识图谱 1 知识图谱概述 2 知识图谱相关概念 3 知识图谱的逻辑结构 4 知识图谱的数据存储 5 知识图谱的构建过程 6…

【LeetCode: 2415. 反转二叉树的奇数层 | BFS + DFS】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

超过 1450 个 pfSense 服务器因错误链而遭受 RCE 攻击

在线暴露的大约 1450 个 pfSense 实例容易受到命令注入和跨站点脚本漏洞的攻击&#xff0c;这些漏洞如果链接起来&#xff0c;可能使攻击者能够在设备上执行远程代码。 pfSense 是一款流行的开源防火墙和路由器软件&#xff0c;允许广泛的定制和部署灵活性。 它是一种经济高效…

python 如何快速注释几行代码

在 Python 中&#xff0c;可以使用 # 符号来注释单行代码&#xff0c;也可以使用三重引号 """ 或单引号 来注释多行代码。但如果要注释掉多行代码&#xff0c;手动的添加注释符号可能会比较麻烦。以下是一些快速注释多行代码的方法&#xff1a; 方法一&#x…

在js中浮点数精度丢失问题及使用bignumber处理高精度小数的数学运算

一、精度丢失&#xff1a; 正常计算&#xff1a;0.1 0.2 0.3 js计算&#xff1a;0.1 0.2 0.30000000000000004 正常计算&#xff1a;1 - 0.9 0.1 js计算&#xff1a;1 - 0.9 0.09999999999999998 正常计算&#xff1a;0.0532 * 100 5.32 js计算&#xff1a;0.0532 * …

中国剩余定理

中国剩余定理 一、问题的引入 一个整数除以3余2、除以5余3、除以7余2&#xff0c;求这个整数&#xff1f;答案&#xff1a;23 所谓中国剩余定理基本思想&#xff1a;知道一个整数对于几个不同的模数的余数&#xff0c;那么可以推断出该整数对于这些模数的最小非负整数解。 …

ChatGPT在指尖跳舞: open-interpreter实现本地数据采集、处理一条龙

原文&#xff1a;ChatGPT在指尖跳舞: open-interpreter实现本地数据采集、处理一条龙 - 知乎 目录 收起 Part1 前言 Part2 Open - Interpreter 简介 Part3 安装与运行 Part4 工作场景 1获取网页内容 2 pdf 文件批量转换 3 excel 文件合并 Part5总结 参考资料 往期推…

算法基础十四

二叉树的最大深度 给定一个二叉树 root &#xff0c;返回其最大深度。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3 示例 2&#xff1a; 输入&#xff1a;root …

2023第十四届蓝桥杯国赛 C/C++ 大学 B 组

文章目录 前言试题 A: 子 2023作者思考题解答案 试题 B: 双子数作者思考题解 试题 C: 班级活动作者思考题解 试题 D: 合并数列作者思考题解 试题 E: 数三角作者思考题解 试题 F: 删边问题作者思考题解 试题 G: AB 路线作者思考题解 试题 H: 抓娃娃作者思考题解 试题 I: 拼数字试…

Android 14 应用适配指南

Android 14 应用适配指南&#xff1a;https://dev.mi.com/distribute/doc/details?pId1718 Android 14 功能和变更列表 | Android 开发者 | Android Developers 1.获取Android 14 1.1 谷歌发布时间表 https://developer.android.com/about/versions/14/overview#timeli…

事务--04---分布式系统唯一ID

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 分布式ID一、什么是分布式系统唯一ID2. 二、分布式系统唯一ID的特点 分布式ID-----实现方案1、使用UUID生成分布式ID2、基于数据库自增ID3、Redis生成ID4、号段模式…

【嵌入式开发 Linux 常用命令系列 14.1 -- .bashrc 定义函数】

上篇文章&#xff1a;【嵌入式开发 Linux 常用命令系列 14 – source hello.sh 和 ./hello.sh 的区别】 文章目录 .bashrc 定义函数 .bashrc 定义函数 在 .bashrc 文件中定义别名时&#xff0c;通常不能直接传递参数。别名是用于创建命令的简写形式&#xff0c;它们不支持参数…

人工智能联盟的首件神兵利器——“Purple Llama” 项目,旨为保护工智能模型安全性

Meta公司&#xff08;Meta Platform Inc&#xff09;&#xff0c;原名Facebook&#xff0c;创立于2004年2月4日&#xff0c;市值5321.71亿美元。总部位于美国加利福尼亚州门洛帕克。 Meta 公司推出了名为“Purple Llama”的项目&#xff0c;旨在保护和加固其开源人工智能模型。…

WINCC8.0脚本调试方法

前言 WINCC是西门子推出的过程可视化系统&#xff08;SCADA&#xff09;&#xff0c;是基于PC的HMI系统&#xff0c;兼容WINDOWS各种系统&#xff0c;除了强大的图形系统之外&#xff0c;WINCC还具有在线历史趋势、报警记录、用户管理、用户归档等高级功能&#xff0c;而且WINC…

华为OD机试真题-考古学家-2023年OD统一考试(C卷)

题目描述: 有一个考古学家发现一个石碑,但是很可惜,发现时其已经断成多段,原地发现n个断口整齐的石碑碎片。为了破解石碑内容,考古学家希望有程序能帮忙计算复原后的石碑文字组合数,你能帮忙吗? 输入描述: 第一行输入n,n表示石碑碎片的个数。 第二行依次输入石碑碎片上…

什么是PHP的SOLID原则?

SOLID 是面向对象编程&#xff08;OOP&#xff09;中的五个设计原则的首字母缩写&#xff0c;这些原则有助于创建可维护、灵活且可扩展的软件。以下是 SOLID 原则的概述&#xff1a; 单一职责原则&#xff08;Single Responsibility Principle - SRP&#xff09;&#xff1a; 一…

[Angular] 笔记1:开发设置 , 双向绑定

1 设置开发环境 1.1 安装 node 下载 node&#xff0c;因为要使用 npm 工具&#xff0c;教程中使用 Angualr 14, 最新版 node 20 用不了&#xff0c;安装 node 16 就可以。 1.2 安装 Angular CLI Angular CLI 是用于创建 Angular 工程的工具集&#xff0c;使用如下命令&…

(第61天)多租户架构(CDB/PDB)

背景介绍 Oracle 的 CDB 和 PDB 是 Oracle 12C 及以上版本中引入的新概念,用于管理多租户数据库环境。 Oracle 数据库是商业数据库领域中的翘楚,其强大的功能和高可靠性备受企业用户追捧。而随着云计算和大数据时代的到来,Oracle 也不断推出新的技术以适应这些变化。CDB 技…