【Leetcode算法面试题】-1. 两数之和

文章目录

    • 算法练习
    • 题目
    • 思路
    • 参考答案
      • 算法1
      • 算法2
      • 算法3

算法练习

面试经常会遇到算法题目,今天开启算法专栏,常用算法解析

题目

**

给定一个整数数组 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]

思路

  • 遍历数组中的每个元素。 对于每个元素,计算它与目标值的差值。 在数组中查找是否存在这个差值。 如果找到了,返回这两个元素的索引。
  • 使用哈希表:通过使用哈希表来存储已经遍历过的数字及其索引,我们可以在 O(1) 的时间内查找某个数字是否存在,从而将时间复杂度从 O(n^2) 降低到 O(n)。
    减少不必要的循环:在找到第一个符合条件的数字对后,立即返回结果,避免了多余的循环。
    更好的错误处理:在返回结果时,检查结果数组的长度,确保它包含两个索引,提高了代码的健壮性。

参考答案

算法1

遍历for循环比较 nums[j] == target - nums[i]

   /**** @param nums* @param target* @return*/public static int[] twoSum(int[] nums, int target) {for (int i = 0; i < nums.length; i++) {for (int j = i + 1; j < nums.length; j++) {if (nums[j] == target - nums[i]) {return new int[]{i, j};}}}return new int[]{}; // 没有找到符合条件的元素}

思考一下有更好的解法吗?
当前时间复杂度为 O(N^2)

算法2

可以通过hash存入Key=value,value=索引的方式存储比较

关键代码

int complement = target - nums[i];if (map.containsKey(complement)) {return new int[]{(int) map.get(complement), i};} 
/*** 在整数数组中找到两个数,它们的和等于给定的目标值* 算法优化 O(n) 复杂度** @param nums   整数数组* @param target 目标值* @return 包含两个数索引的整数数组,如果没有找到则返回空数组*/public static int[] optimizedTwoSum(int[] nums, int target) {HashMap<Object, Object> map = new HashMap<>();for (int i = 0; i < nums.length; i++) {int complement = target - nums[i];if (map.containsKey(complement)) {return new int[]{(int) map.get(complement), i};} else {map.put(nums[i], i);}}return new int[]{}; // 没有找到符合条件的元素}

算法3

上面写完,还有一些细节需要补充

  • 异常处理
  • map的初始值,内存优化
  • 首次不用遍历
 /*** 内存优化* @param nums* @param target* @return*/public static int[] optimizedTwoSum2(int[] nums, int target) {int length = nums.length;// 初始化哈希表Map<Integer, Integer> map = new HashMap<>(length-1);map.put(nums[0], 0);for (int i = 1; i < length; i++) {int c = target - nums[i];if (map.containsKey(c)) {return new int[]{(int) map.get(c), i};} else {map.put(nums[i], i);}}throw new IllegalArgumentException("No two sum solution");}

执行结果
在这里插入图片描述

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

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

相关文章

Metasploit 渗透测试之Metasploit快速入门

简介 Metasploit 是目前世界上领先的渗透测试工具&#xff0c;也是信息安全与渗透测试领域最大的开源项目之一。它彻底改变了我们执行安全测试的方式。Metasploit之所以流行&#xff0c;是因为它可以执行广泛的安全测试任务&#xff0c;从而简化渗透测试的工作。Metasploit 适…

查看TCP/UDP网络连接通信情况

绪论​ “宿命论是那些缺乏意志力的弱者的借口。 ——罗曼&#xff0e;罗兰” 话不多说安全带系好&#xff0c;发车啦&#xff08;建议电脑观看&#xff09;。 主要使用&#xff1a; nestat -nltp n 拒绝显示别名&#xff0c;能显示数字的全部转化成数字l 仅列出有在 Listen (…

QML学习三:qml设计器报错 Line: 0: The Design Mode requires a valid Qt kit

开发环境&#xff1a;Qt 6.5.3 LTS 1、Qt 6.5.3 LTS 2、Pyside6 3、Python 3.11.4 4、win11 默认不打开设计器的时候可以看到我们默认是有Python的环境&#xff0c;而且点击运行是可以运行的。但是当打开qml设计器时提示下面这个错误&#xff0c;提示需要一个可用的套件。 …

代码随想录算法day33 | 动态规划算法part06 | 322. 零钱兑换,279.完全平方数,139.单词拆分,关于多重背包

322. 零钱兑换 如果求组合数就是外层for循环遍历物品&#xff0c;内层for遍历背包。 如果求排列数就是外层for遍历背包&#xff0c;内层for循环遍历物品。 力扣题目链接(opens new window) 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需…

SAP学习笔记 - 开发03 - CDSView开发环境搭建,Eclipse中连接SAP,CDSView创建

上一章讲了BTP的账号创建&#xff0c;环境搭建等内容。 SAP学习笔记 - 开发02 - BTP实操流程&#xff08;账号注册&#xff0c;BTP控制台&#xff0c;BTP集成开发环境搭建&#xff09;-CSDN博客 本章继续讲SAP开发。 - CDSView 的开发环境&#xff08;Eclipse&#xff09;搭建…

“薅羊毛”时间到, 容声以旧换新“钜惠”升级

9月13日&#xff0c;由佛山市商务局、顺德区人民政府指导&#xff0c;海信家电集团主办的以旧换新佛山发布活动启幕。 海信家电&#xff08;SZ 000921&#xff0c;HK 00921&#xff09;旗下容声冰箱叠加国家以旧换新补贴&#xff0c;把“以旧换新”升级到“品质换新”&#xf…

【CTF Web】BUUCTF BUU BURP COURSE 1 Writeup(X-Real-IP伪造+POST请求)

BUU BURP COURSE 1 1 点击启动靶机。 解法 用 hackbar 将 X-Forwarded-For 设为 127.0.0.1&#xff0c;无效。提示&#xff1a;只能本地访问。 将 Referer 设为 127.0.0.1&#xff0c;无效。提示&#xff1a;只能本地访问。 将 X-Real-IP 设为 127.0.0.1&#xff0c;成功&am…

Linux 添加新用户之adduser 和 useradd 的区别 | 添加用户到 sudo 组【笔记型博文】

&#x1f947; 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 &#x1f389; 声明: 作为全网 AI 领域 干货最多的博主之一&#xff0c;❤️ 不负光阴不负卿 ❤️ 文章目录 ❤️ 创建新用户adduser 用法【推荐】useradd 用法 安装 sudo添加用户到 sudo 用…

uniapp数据缓存和发起网络请求

数据缓存 uni.onStorageSync同步的方式将数据存储到本地缓存 <template><button click"onStorageSync()">存储数据</button> </template><script setup>const onStorageSync () > {// 存储数据uni.setStorageSync(username, 张三)…

安防监控/视频汇聚平台EasyCVR无法启动并报错“error while loading shared libraries”,如何解决?

安防监控/视频汇聚平台EasyCVR视频管理系统以其强大的拓展性、灵活的部署方式、高性能的视频能力和智能化的分析能力&#xff0c;为各行各业的视频监控需求提供了优秀的解决方案。通过简单的配置和操作&#xff0c;用户可以轻松地进行远程视频监控、存储和查看&#xff0c;满足…

Golang | Leetcode Golang题解之第390题消除游戏

题目&#xff1a; 题解&#xff1a; func lastRemaining(n int) int {a1 : 1k, cnt, step : 0, n, 1for cnt > 1 {if k%2 0 { // 正向a1 step} else { // 反向if cnt%2 1 {a1 step}}kcnt >> 1step << 1}return a1 }

部署k8s基础环境

部署k8s基础环境 一、环境准备 1、主机准备&#xff1a; k8s-master&#xff08;192.168.2.90&#xff09;k8s-node01&#xff08;192.168.2.91&#xff09;k8s-node02&#xff08;192.168.2.92&#xff09; 2、关闭防火墙、selinux、NetworkManager [rootk8s-master ~]# …

【机器学习】XGBoost的用法和参数解释

一、XGBoost的用法 流程&#xff1a; 代码案例&#xff1a; 二、XGBoost的几大参数 1、一般参数&#xff0c;用于集成算法本身 ①n_estimators 集成算法通过在数据上构建多个弱 评估器&#xff0c;汇总所有弱评估器的建模结果&#xff0c;以获取比单个模型更好的回归或分类…

Spring Cloud Alibaba核心组件Nacos/Seata/Sentinel

文章目录 Spring Cloud Alibaba介绍Spring Cloud 微服务体系Spring Cloud Alibaba 定位 注册配置中心--Nacos服务治理架构注册中心原理 Nacos介绍Nacos 的关键特性1.服务注册和发现2.动态配置服务3.实时健康监控4.动态DNS服务5.易于集成&#xff1a; Nacos入门示例服务注册与发…

ED—编辑距离

题目 给你两个单词 word1 和 word2&#xff0c; 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符删除一个字符替换一个字符 思路分析 编辑距离问题就是给定两个字符串 s1 和 s2&#xff0c;只能用三种操作…

【kafka-01】kafka安装和基本核心概念

一&#xff0c;kafka安装和基本核心概念 1&#xff0c;kafka的安装和运行 1.1 kafka下载和安装 下载地址&#xff0c;目前下载的版本是 Scala 2.12 - kafka_2.12-3.6.2.tgz (asc, sha512)&#xff0c;一定要下载二进制文件&#xff0c;不要下载源码 https://kafka.apache.o…

数据库-基本操作(一)

1、查看数据库的端口号 2、在student数据库下创建一个users表格 3、给一个表格添加数据&#xff0c;并查询该表格 4、查询mysql数据库的错误日志信息 5、测试jmeter与mysql服务器的通信是否正常&#xff0c;使用ping

什么是人力资源管理软件?HR人力软件有哪些功能?

在人力资源管理中&#xff0c;随着科技的迅猛发展和商业环境的日益复杂化&#xff0c;企业对人力资源管理系统&#xff08;eHR&#xff09;的需求不断增加。人力资源管理软件&#xff0c;简称eHR&#xff0c;是一种融合了系统学理论方法的管理工具&#xff0c;旨在通过技术手段…

似然函数与先验概率、后验概率的关系

似然函数、先验概率、后验概率这三个概念是贝叶斯统计中的核心概念&#xff0c;它们共同描述了如何根据已有数据更新我们对某个事件或参数的认识。下面用简单的语言解释这三个概念&#xff0c;并描述它们之间的关系。 1. 先验概率&#xff08;Prior Probability&#xff09; …

代码随想录27期|Python|Day54|​单调栈|​42. 接雨水|84. 柱状图中最大的矩形

42. 接雨水 根据常识可以归纳出&#xff0c;对于每一列所能够存住的水的高度 Height min(LeftMax, RightMax) - height 也就是&#xff0c;当前列的存水高度 左侧和右侧柱子的最大高度的较小值&#xff0c;减去当前列的柱子高度&#xff0c;所得到的差值。 可以验证第4列&…