背景

本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务。本期训练营采用分类别练习的模式,即选择了五个知识点(数组、链表、字符串、树、贪心算法),每个知识点选择了 三个简单、两个中等、一个困难 等级的题目,共计三十道题,利用三十天的时间完成这组刻意练习。

本次任务的知识点:数组

数组 是在程序设计中,为了处理方便,把具有相同类型的若干元素按有序的形式组织起来的一种形式。抽象地讲,数组即是有限个类型相同的元素的有序序列。若将此序列命名,那么这个名称即为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素。而用于区分数组的各个元素的数字编号则被称为下标,若为此定义一个变量,即为下标变量。


题目

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

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例1:

给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9,所以返回 [0, 1]

示例2:

给定 nums = [230, 863, 916, 585, 981, 404, 316, 785, 88, 12, 70, 435, 384, 778, 887, 755, 740, 337, 86, 92, 325, 422, 815, 650, 920, 125, 277, 336, 221, 847, 168, 23, 677, 61, 400, 136, 874, 363, 394, 199, 863, 997, 794, 587, 124, 321, 212, 957, 764, 173, 314, 422, 927, 783, 930, 282, 306, 506, 44, 926, 691, 568, 68, 730, 933, 737, 531, 180, 414, 751, 28, 546, 60, 371, 493, 370, 527, 387, 43, 541, 13, 457, 328, 227, 652, 365, 430, 803, 59, 858, 538, 427, 583, 368, 375, 173, 809, 896, 370, 789], target = 542因为 nums[28] + nums[45] = 221 + 321 = 542,所以返回 [28, 45]

实现

第一种:暴力匹配算法

  • 执行结果:通过
  • 执行用时:432 ms, 在所有 C# 提交中击败了 65.82% 的用户
  • 内存消耗:30.8 MB, 在所有 C# 提交中击败了 8.67% 的用户
public class Solution {public int[] TwoSum(int[] nums, int target) {int[] result = new int[2];for (int i = 0; i < nums.Length; i++){int find = target - nums[i];for (int j = i + 1; j < nums.Length; j++){if (find == nums[j]){result[0] = i;result[1] = j;return result;}}}return result;}
}

第二种:通过Hash的方式

  • 执行结果:通过
  • 执行用时:280 ms, 在所有 C# 提交中击败了 96.53% 的用户
  • 内存消耗:31.1 MB, 在所有 C# 提交中击败了 6.89% 的用户
public class Solution {public int[] TwoSum(int[] nums, int target) {int[] result = new int[2];Dictionary<int, int> dic = new Dictionary<int, int>();for (int i = 0; i < nums.Length; i++){int find = target - nums[i];if (dic.ContainsKey(find)){result[0] = dic[find];result[1] = i;break;}if (dic.ContainsKey(nums[i]) == false)dic.Add(nums[i], i);}return result;    }
}

Python 语言

  • 执行结果:通过
  • 执行用时:48 ms, 在所有 Python3 提交中击败了 92.55% 的用户
  • 内存消耗:14.7 MB, 在所有 Python3 提交中击败了 35.54% 的用户
class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:i = 0dic = dict()result = list()while i < len(nums):find = target - nums[i]j = dic.get(find)if j is not None:result.append(j)result.append(i)breakelse:dic[nums[i]] = ii += 1return result

来源

  • https://leetcode-cn.com/problems/two-sum/

往期活动

LSGO软件技术团队会定期开展提升编程技能的刻意练习活动,希望大家能够参与进来一起刻意练习,一起学习进步!

  • Python基础刻意练习活动即将开启,你参加吗?
  • Task01:变量、运算符与数据类型
  • Task02:条件与循环
  • Task03:列表与元组
  • Task04:字符串与序列
  • Task05:函数与Lambda表达式
  • Task06:字典与集合
  • Task07:文件与文件系统
  • Task08:异常处理
  • Task09:else 与 with 语句
  • Task10:类与对象
  • Task11:魔法方法
  • Task12:模块

我是 终身学习者“老马”,一个长期践行“结伴式学习”理念的 中年大叔

我崇尚分享,渴望成长,于2010年创立了“LSGO软件技术团队”,并加入了国内著名的开源组织“Datawhale”,也是“Dre@mtech”、“智能机器人研究中心”和“大数据与哲学社会科学实验室”的一员。

愿我们一起学习,一起进步,相互陪伴,共同成长。

后台回复「搜搜搜」,随机获取电子资源!
欢迎关注,请扫描二维码:

刻意练习:LeetCode实战 -- Task01. 两数之和相关推荐

  1. LeetCode实战:两数之和

    题目英文 Given an array of integers, return indices of the two numbers such that they add up to a specif ...

  2. LeetCode实战:两数相加

    题目英文 You are given two non-empty linked lists representing two non-negative integers. The digits are ...

  3. LeetCode题 - 1 两数之和

    LeetCode题 - 1 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案. ...

  4. LeetCode:1.两数之和

    LeetCode:1.两数之和 第一次写题解,也第一次做leetcode,不妥之处还望海涵 一.暴力 //cpp class Solution {public:vector<int> tw ...

  5. LeetCode实战:三数之和

    题目英文 Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? ...

  6. 【Leetcode | easy】两数之和

    题目 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 15], targ ...

  7. LeetCode刷题-两数之和(持续更新)

    文章目录 LeetCode 1. Two Sum (两数之和) 题目描述 样例 解题思路一(暴力法) 解题思路二(使用map) 前言:最近业余时间,一直在看LeetCode上面的题,上面有许多好的解题 ...

  8. Leetcode 1:两数之和

    写在前面 Leetcode 社区挺神奇的,近几年火热程度不亚于开源社区github.做题一直以来是咱们亚洲人的强项,咋这香馍馍也被美国硅谷抢先了,着实香菇. 企于算法工程师的江湖地位和薪资福利,决定先 ...

  9. leetcode系列--1.两数之和

    leetcode 第1题 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输 ...

最新文章

  1. 第八章 熟练dom的几个常用方法
  2. IBM powerVM VIOS
  3. 【Python】while循环实现用户登录的三次机会
  4. Linux 灾难恢复 Linux 系统启动故障修复
  5. php 怎么解析文本,PHP解析自定义纯文本数据库
  6. MAC 安装 Magento2 community edition 详细步骤
  7. JN_0005:PS改变图片指定内容颜色
  8. 数据结构笔记(四)-- 静态链表实现
  9. 关于Maven的7个问题
  10. 数据结构(C语言版)
  11. linux 开根号函数,Linux里隐藏的计算器开根号,问他它的地球未解之谜吗?
  12. hbase scan超时设置_hbase scan limit 10
  13. android 置灰不可点击,Android全局实现控件变灰
  14. 药物研发检测记录模板-0903不溶性微粒检查法检验原始记录
  15. Unity3D-VR《静夜诗》5-李白吟诗
  16. ftp匿名登录 漏洞复现
  17. 全国计算机等级考试监考培训,全国计算机等级考试 (NCRE) 监考培训
  18. linux shell 字符串长度
  19. 大学开设大数据专业,都安排了哪些课程?
  20. 训练孩子思维能力的几种方法

热门文章

  1. 及cp含义_当我们谈论CP时,我们在谈论什么?
  2. java中判断两个字符(或者字符串相等)
  3. Python数字类型及操作汇总(入门级)
  4. java培训班如何选择
  5. 如何使用OWASP Dependency Check的命令行(CLI)模式进行依赖库安全漏洞扫描
  6. 217. 验证码 demo
  7. 我为我Windows Home Server 预热
  8. linux系统命令学习系列-文件和目录管理
  9. OCM_第十二天课程:Section6 —》数据库性能调优_ 资源管理器/执行计划
  10. windows下mysql开启慢查询