我们都知道算法是程序员成长重要的一环,怎么才能提高算法呢, 出来在网上看视频之外,动手练习是非常重要的。leetcode 就是一个非常好的锻炼平台。

1. 两数之和,在 leetcode 里面是属于 easy 级别的。我们看看他的题目和解法。

题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

例子:

给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]题目说的很清楚, 给出一个列表和一个 目标值,找出列表中两数之和是 目标值的, 一个数不可重复使用。

思路:

我的思路是 循环遍历每一个数记作 index,然后 用 目标值(target)减去 index,看结果在不在这个列表里。

代码:

 1     def twoSum(self, nums, target):
 2         """
 3         :type nums: List[int]
 4         :type target: int
 5         :rtype: List[int]
 6         """
 7         res_list = []
 8         for index, item in enumerate(nums):
 9             res = target - item
10             if res in nums:
11                 res_index = nums.index(res)
12                 if res_index != index:
13                     res_list.append(index)
14                     res_list.append(res_index)
15                     break
16
17         return res_list

总结:我的这个解法虽然不是最优解,但是总比双重 for 循环好一点(自我感觉)。时间复杂度 为 O(n),  空间复杂度 为 O(n)。

2. 两数相加

题目: 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

例子:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

思路:逆序的两个简单链表,取出数相加 大于10 进1,别忘了最后一位相加大于 10 所进的 1.

代码:

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = Noneclass Solution:def addTwoNumbers(self, l1, l2):""":type l1: ListNode:type l2: ListNode:rtype: ListNode"""res = ListNode(0)cur = rescarry = 0while l1 or l2:n1 = l1.val if l1 != None else 0n2 = l2.val if l2 != None else 0sum = n1 + n2 + carrycarry = 1 if sum >= 10 else 0cur.next = ListNode(sum % 10)cur = cur.nextl1 = l1.next if l1 != None else Nonel2 = l2.next if l2 != None else Noneif carry != 0:cur.next = ListNode(1)return res.next

总结: 这是我模仿 Java 的写法,自己还没有想出特别的解法,有优秀的 Python 解法,大佬一定评论,让我学习学习。时间复杂度 O(n), leetcode 官方解释的更准确是:

时间复杂度:O(\max(m, n))O(max(m,n)),假设 mm 和 nn 分别表示 l1l1 和 l2l2 的长度,上面的算法最多重复 \max(m, n)max(m,n) 次。空间复杂度:O(\max(m, n))O(max(m,n)), 新列表的长度最多为 \max(m,n) + 1max(m,n)+1。

参考一下。

ps:

  如果有不合理或者错误的地方,一定评论我,或者私聊我改正,以防误人子弟。不胜感激。谢谢。同时也期盼与每一位的相遇相识。

转载于:https://www.cnblogs.com/JulyShine/p/10152506.html

两数之和,两数相加(leetcode)相关推荐

  1. 两数、三数、四数之和相关题目(Leetcode题解-Python语言)

    作为 Leetcode 的第一题,两数之和自然是知名度最高的,从两数之和出发也有不少的衍生题目,下面就让我们好好地解决它们. 1. 两数之和 class Solution:def twoSum(sel ...

  2. 基础数学(二)两数之和 三数之和

    目录 两数之和_牛客题霸_牛客网 三数之和_牛客题霸_牛客网 两数之和_牛客题霸_牛客网 给出一个整型数组 numbers 和一个目标值 target,请在数组中找出两个加起来等于目标值的数的下标,返 ...

  3. 《漫画算法2》源码整理-6 两数之和 三数之和

    两数之和 import java.util.*;public class TwoSum {public static List<List<Integer>> twoSum(in ...

  4. leetcode1. 两数之和--每天刷一道leetcode系列!

    来自:程序员面试 作者:reed,一个热爱技术的斜杠青年,程序员面试联合创始人 题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个整数,并返回他们 ...

  5. leetcode1. 两数之和(两种方法)

    一:题目 二:上码 1:方法一 class Solution {public:vector<int> twoSum(vector<int>& nums, int tar ...

  6. 【前端来刷LeetCode】两数之和与两数相加

    大部分玩前端的小伙伴,在算法上都相对要薄弱些,毕竟调样式.调兼容就够掉头发的了,哪还有多余的头发再去折腾. 确实在前端中需要使用到算法的地方是比较少,但若要往高级方向发展,算法的基本功就非常重要啦.对 ...

  7. 【LeetCode】两数之和、三数之和、四数之和系列

    文章目录 两数之和★ 三数之和★★ 四数之和★★ 四数相加Ⅱ★★ 最接近的三数之和★★ 此篇文章总结下力扣中的两数之和.三数之和.四数之和及一系列求数组中满足达到目标值的元组个数的问题,仔细阅读下面的 ...

  8. 算法训练Day6 | LeetCode:242. 有效的字母异位词(数组作哈希表);349. 两个数组的交集(Set作哈希表);202.快乐数 (Set作哈希表);1. 两数之和(Map作哈希表)

    目录 LeetCode242. 有效的字母异位词 方法:数组作哈希表 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 Leetcode349. 两个数组的交集 方法一:用Set作HashMa ...

  9. 力扣(leetcode)-1. 两数之和

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

  10. leetcode刷题:2.两数之和

    本篇博客介绍如何找到两数之和.获取相加的两个数获取最终target的方法. 先看如下图: 我们很容易想到暴力解法.即两次循环获取结果,第一次循环循环黑圈,我们先假定第一个黑圈中1,是我们要的数,然后接 ...

最新文章

  1. 区块链和智能合约的关系
  2. 利用popstate事件和window下的history对象处理浏览器跳转问题
  3. mysqlhelper
  4. linux搭建宝塔重启mysql_宝塔面板安装 重启等命令linux系统重启
  5. C++实现静态顺序表的增删查改以及初始化
  6. 敏捷开发智慧敏捷系列之四:每日立会开多久?
  7. good archtchre article
  8. const和readonly区别
  9. linux内核的自旋锁spin_lock和互斥锁mutex_lock
  10. php怎么处理一对多,php - 如何处理内部连接以及与OOP的一对多关系? - SO中文参考 - www.soinside.com...
  11. 蓝桥杯题目练习 基础篇 [蓝桥杯2015初赛]奖券数目
  12. 利用python从《牛津高阶英汉词典》里提取单词列表
  13. 开源软件,自由软件,免费软件三者的区别
  14. 鼎捷T100标准接口调用
  15. 通过ip如何免费反查域名?
  16. 可能是全网唯一Elastic/Kibana认证考试报名还有优惠的地方
  17. 手机日历怎么备注农历生日提醒
  18. 我心中的计算机作文500,我心中的太阳作文500字(通用10篇)
  19. 如何在PCB中放置禁止触摸标志
  20. 人脸属性分析--性别、年龄和表情识别

热门文章

  1. C4C的Rich text editor的JavaScript实现
  2. 如何用SAP ABAP编程语言实现一个简单的区块链模型
  3. python 希尔伯特变换_python scipy signal.hilbert用法及代码示例
  4. php mysql查询结果_php对mysql查询结果进行分页 - ceil
  5. 计算机网络技术超文本,网络协议确定了计算机网络传递和管理信息的规范,其中HTTP属于()A、超文本传输协议B、传输控制协...
  6. HTML变列自适应布局三行,CSS三行三列DIV高度自适应的设置
  7. linux vim verilog,vim下好用的verilog插件:)( 更新) - [IC]
  8. 嵌入式linux开发环境 cpu,嵌入式Linux开发环境的搭建之:U-Boot移植-嵌入式系统-与非网...
  9. 联想服务器开机显示系统恢复选项,联想电脑win10系统开机时按哪个键进入一键还原模式...
  10. python dlib caffe人脸相似度_基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【一】如何配置caffe属性表...