leetcode Two Sum-Java 和Python 的写法

news2024/11/15 8:27:36

我想这题是正要开始写LeetCode 的人,大部分的人的第一题吧,这题是个基本题算在easy 的题型,看到题目直接就会想到使用双回圈的写法,不过双回圈时间复杂度只有达到 O(N^2) 不那么理想,如果比较资深的工程师会用HashMap 做处理,这时时间复杂度可以达到N(1),这篇有Java 和Python 的写法。

 

给定一个整数数组 nums 和一个整数 target,返回两个数字的索引,使它们加起来等于 nums。

您可能会假设每个输入只有一个解决方案,并且您可能不会两次使用相同的元素。 您可以按任何顺序返回答案。

给定一个整数阵列nums和一个整数结果target,阵列中会有两个元素加起来等于整数结果target,回传这两个元素的位置。

你可能假设每个输入只会对应一个答案,而且你不能使用同样的元素两次你可以回传任何顺序的答案。

题目限制

同样的元素不能使用两次

2 <= nums.length <= 104

109 <= nums[i] <= 109

109 <= target <= 109

范例:

    Input: nums = [2,7,11,15], target = 9
    Output: [0,1]
    Explanation: Because nums[0] + nums[1] == 9, we return [0, 1].
Input: nums = [3,2,4], target = 6
    Output: [1,2]
Input: nums = [3,3], target = 6
    Output: [0,1]

思路&笔记

使用暴力的解法:

双回圈 回圈1 取得第一个索引,回圈2 取得第二个索引

但回圈2 的循环起始需要做个i+1,目的是元素不要重复到

当回圈2 的索引都循环完后,回圈1 的索引会换到下一个索引,以此类推

直到两个索引的值加起来,等于目标整数target,就把当下的索引回传出来

JAVA 初阶实现

使用暴力解法:双回圈

类解决方案{
        public int[] twoSum(int[] nums, int target) {
            对于 (int i=0; i < nums.length; i++){
                for (int j = i+1; j < nums.length; j++){ // 元素不要重新到
                    如果(nums[i] + nums[j] == 目标){
                        返回新的 int[] {i, j}; // 回传索引
                    }
                }
            }
            返回新的 int[] {}; // 当找不到符合条件的组合时,返回一个空的数组列表
        }
    }

JAVA 进阶实现

笔者还在学习中,参考了讨论区里网友的解法。

这里有使用HashMap 存资料。

遍历时用target 减掉当下索引的值,可以得出另一个整数。(这个就是我们要相加起来的另一个整数,没有的话代表不是两数的合)

因第一次判断Map 本来就是空的一定不成功,所以把已判断过的元素跟索引存进Map 里。(这里要颠倒存,因为之后判断时要取索引,索引放在值的地方)

之后遍历第二次时,判断 .containsKey() 搜寻Map 里有无key,这时true 进入判断式

.get()取值(刚颠倒存入的索引) → 0 i 则是当下的索引→ 1

最后把两个索引存入 new int[] 阵列中[0, 1]

import java.util.HashMap;
    import java.util.Map;
    
    class Solution {
        public int[] twoSum(int[] nums, int target) {
            Map<Integer, Integer> numToIndex = new HashMap<>();
            for (int i = 0; i < nums.length; i++) {
                // 判断键是否存在 Map
                if (numToIndex.containsKey(target - nums[i])) { // 目标整数 - 索引 1 的值
                    // 回传两个索引
                    return new int[] {numToIndex.get(target - nums[i]), i}; // numToIndex 里的"值"是索引,当前 i 是索引
                }
                // 把前面的资料添加进 Map 
                numToIndex.put(nums[i], i);  // {2,0} (注意这边是颠倒的存进去)
            }
            return new int[] 0; // 仍未找到符合要求的元素,则返回一个空的 int[] 阵列
        }
    }

Python 初阶实现

使用了和Java 一样的逻辑执行,换成Python 的写法。

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        for i in range(len(nums)):
            for j in range(i + 1, len(nums)): # 索引从第2个开始
                if i != j and nums[i] + nums[j] == target: # 索引不要重复且索引值相加
                    return [i, j]
		return []

Python 进阶实现

笔者还在学习中,参考了讨论区里网友的解法。

使用了和Java 一样的逻辑执行,换成Python 的写法。

class Solution:
    
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        numToIndex = {} # 字典
        for i in range(len(nums)):
            # 判断键是否存在 Map
            if target - nums[i] in numToIndex: # 目标整数 - 索引 1 的值
                return [numToIndex[target - nums[i]], i] 
            # 把前面的资料添加进字典
            numToIndex[nums[i]] = i # 键 nums[i] = 值 i
        return []

成绩

 

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

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

相关文章

wsl的图像化实现,在wsl中启动浏览器

最近在学习wsl&#xff0c;原本我看以前的教程说wsl和vmware的区别有一点就是&#xff0c;wsl只能使用命令行&#xff0c;而vmware可以实现图像化&#xff0c;结果我在 microsoft 官方发现现在的wsl 2已经实现了 GUI 界面&#xff0c;所以就来记录一下吧。 wsl 的 GUI 实现 首…

Vue3.2 + TypeScript + Pinia + Vite4 + Element-Plus + 微前端(qiankun) 后台管理系统模板(已开源)

最终效果 一、前言 Wocwin-Admin&#xff0c;是基于 Vue3.2、TypeScript、Vite、Pinia、Element-Plus、Qiankun(微前端) 开源的一套后台管理模板&#xff1b;同时集成了微前端 qiankun也可以当做一个子应用。项目中组件页面使用了Element-plus 二次封装 t-ui-plus 组件&#xf…

C/C++每日一练(20230420)

目录 1. 存在重复元素 II &#x1f31f; 2. 外观数列 &#x1f31f;&#x1f31f; 3. 最优路线 &#x1f31f;&#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专…

搭建sentry来监控Django项目

sentry搭建 我的环境&#xff1a; centos7&#xff0c;已安装docker和docker compose 下载最新zip包到 /usr/local/ https://github.com/getsentry/self-hosted/tagshttps://github.com/getsentry/self-hosted/tags解压 unzip self-hosted-23.4.0.zip 安装期间会提示是否…

Ceph入门到精通-Cephadm安装Ceph(v17.2.5 Quincy)全网最全版本

Deploy Ceph&#xff08;v17.2.5 Quincy&#xff09; cluster to use Cephadm - DevOps - dbaselife Install cephadm Cephadm creates a new Ceph cluster by “bootstrapping” on a single host, expanding the cluster to encompass any additional hosts, and then depl…

【洛谷 P1003】[NOIP2011 提高组] 铺地毯 题解(数组+贪心算法)

[NOIP2011 提高组] 铺地毯 题目描述 为了准备一个独特的颁奖典礼&#xff0c;组织者在会场的一片矩形区域&#xff08;可看做是平面直角坐标系的第一象限&#xff09;铺上一些矩形地毯。一共有 n n n 张地毯&#xff0c;编号从 1 1 1 到 n n n。现在将这些地毯按照编号从小…

阿里云mysql8小版本升级造成磁盘不断增长,undolog持续增长不释放

现象&#xff1a; 1.用户升级之后&#xff0c;实例上磁盘空间以每分钟1g的速度不断增长&#xff0c; 2.高频dml表的空间不断变大但表数据其实不大&#xff0c;binlog大量产生 3.通过select * from innodb_tablespaces where name like %undo%发现undo 空间上涨较快&#xff0…

常见的九种大数据分析模型

常见的9种大数据分析模型分别为&#xff1a; 事件分析、 属性分析、 渠道分析、 Session分析、 留存分析、 归因分析、 漏斗分析、 路径分析、 分布分析 1、【事件分析】 事件分析&#xff0c;是指用户在 APP、网站等应用上发生的行为&#xff0c;即何人&#xff0c;何时&…

Python OpenCV 蓝图:1~5

原文&#xff1a;OpenCV with Python Blueprints 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 计算机视觉 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 当别人说你没有底线的时候&#xff0c;你最好真…

【AI】NVIDIA CUDA-X AI名词解释

0、NVIDIA CUDA-X AI NVIDIA CUDA-X AI是一套完整的深度学习软件 官网:https://developer.nvidia.com/deep-learning-software https://github.com/NVIDIA:NVIDIA产品、演示、示例、入门教程 1、深度学习训练 Deep Learning Training 1.1、DALI 数据加载库 (DALI)是一…

Redis实现分布式锁原理和Redisson框架实现分布式锁,全网最详细讲解

声明&#xff1a;我的大部分篇幅都讲的分布式锁的原理和实现&#xff0c;如果想直接用Redisson框架实现分布式锁&#xff0c;可以直接翻至最后面 关于分布式锁&#xff0c;适用于并发量特别大的微服务集群&#xff0c;能做到同步的实现资源的获取 我其实没有经过真实项目的分布…

MySQL调优笔记——慢SQL优化记录(1)

上周&#xff0c;项目出现线上问题&#xff0c;在这家公司做的是一个SAAS平台&#xff0c;总用户量大约10万人&#xff1b; 经过排查&#xff0c;发现是SQL问题&#xff0c;导致数据库响应慢&#xff0c;进而拖垮了整体服务&#xff1b; 通常&#xff0c;查询耗时较长的SQL涉…

Java优先级队列-堆

Java优先级队列-堆 &#x1f490;1. 二叉树的顺序存储&#x1f490;&#x1f383; 1.1 存储方式&#x1f383;&#x1f47b;1.2 下标关系&#x1f47b; &#x1f338;2. 堆(heap)&#x1f338;&#x1f31e;2.1 概念&#x1f31e;&#x1f31d;2.2 操作-向下调整&#x1f31d;&…

SER | 语音情绪识别中的TIM-NET_SER项目复现

大家好&#xff0c;今天复现的是目前语音情绪识别的SOTA论文&#xff0c;论文中文名称是 时间建模的重要性&#xff1a; 用于语音情感识别的新型时空情感建模方法 。论文中训练的数据集有英文德语等几个语音情绪识别中常见的语音情绪数据集&#xff0c;以对比精度权重等效果~各…

Android 下一代架构指南:DDD

移动端架构与网站架构的区别是什么&#xff1f;网易新闻客户端的架构演进历程是怎样的&#xff1f;为什么要选择 DDD 思想来指导重构&#xff1f;DDD 落地中应当关注哪些方面&#xff1f;带着这些问题我们来看下文。&#xff08;节选自网易新闻App架构重构实践&#xff09; 当…

Kafka吞吐量

目录 kafka的架构和流程 小文件对HDFS影响&#xff1a; 解决办法&#xff1a; kafka的架构和流程 ⾸先Kafka从架构上说分为⽣产者Broker和消费者,每⼀块都进⾏了单独的优化,⽐如⽣产者快是因为数据的批量发送&#xff0c;Broker快是因为分区,分区解决了并发度的问题,⽽且⽂…

媒体宣传的优势与重要性

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体宣传日益成为企业和品牌宣传推广的重要手段&#xff0c;媒体的宣传报道更有权威性&#xff0c;能够帮助品牌进行背书&#xff0c;更有权威性&#xff0c;另外媒体的报道在搜索引擎中…

基于GPS/北斗卫星技术的无盲区车辆调度系统

基于GPS/北斗卫星技术的无盲区车辆调度系统 现代车辆调度系统是一种集全球卫星定位技术&#xff08;GPS&#xff09;、地理信息技术&#xff08;GIS&#xff09;和现代通信技术于一体的高科技项目。它将移动目标的动态位置&#xff08;经度与纬度&#xff09;、时间和状态等信息…

linux环境搭建jmeter、ant、git、Jenkins、jdk、Tomcat

我在搭建环境时&#xff0c;将jmeter、ant、jdk、Tomcat都放在陆opt文件夹下 1.下载jmeter、ant、Jenkins&#xff08;Jenkins.war包&#xff09;、jdk、Tomcat Linux环境下安装Jenkins&#xff0c;需要jdk版本大于11 2.环境配置 jdk配置 vim /etc/profile 添加配置信息&am…

飞书接入ChatGPT - 将ChatGPT集成到飞书机器人,直接拉满效率 【飞书ChatGPT机器人】

文章目录 前言环境列表视频教程1.飞书设置2.克隆feishu-chatgpt项目3.配置config.yaml文件4.运行feishu-chatgpt项目5.安装cpolar内网穿透6.固定公网地址7.机器人权限配置8.创建版本9.创建测试企业10. 机器人测试 前言 在飞书中创建chatGPT机器人并且对话,在下面操作步骤中,使…