為自己Coding
為自己Coding

YO~~ 剛跨入AI人工智慧領域的小小工程師, 熱愛自學, 熱愛分享, 下班後的我想為自己Coding, 積極撰寫教學文, 想將自學的程式知識分享給大家, 不斷追求進步的自己, 希望有一天能回饋社會,幫助需要幫助的人, 如果您有什麼很酷的想法,也覺得我還行,歡迎您找我合作~~ IG: https://www.instagram.com/coding_4_me/

LeetCode学习笔记- 如何开始使用LeetCode刷题- 刷LeetCode初体验- LeetCode 第一题- Two Sum 解法

最近开始在学习LeetCode的路上,也希望自己在学习的同时也能将学习到的东西记录下来

Github连结


摄影师:Michael Block,连结:Pexels




1. LeetCode 网站如何开始刷题?

Step 1: 打开LeetCode网站,并登入

Step 2: 点击Problems


Step 3: 塞选题目,并挑选出自己想要的分类题目


Step 4: 挑选好题目,点进去,就可以开始刷题了喔(以Two Sum为例)


2. Two Sum 实作


题目:

Given an array of integers nums and an integer target , return indices of the two numbers such that they add up to target .

You may assume that each input would have *exactly* one solution , and you may not use the same element twice.

You can return the answer in any order.

给一个整数的nums数组和一个目标整数,程式将传回数组中两个数字的索引,也就是这两个数字相加会等于目标整数

您可以假设每个输入都只有一个解决方法,而且不会重复使用同一个元素,可以按任何顺序传回答案


解法一: 暴力解法

说明:先从list中取一个固定的元素,然后开始从它的下一个元素开始一一配对,看是否相加等于目标值,如果没有,就换下一个元素,以此类推

def two_sum(nums, target):
  for i in range(len(nums)):
    for j in range(i+1, len(nums)):
      if nums[i] + nums[j] == target:
        return i, j
​
​
nums = [1, 2, 3, 4, 5, 6]
target = 10
two_sum(nums, target)

执行结果

(3, 5)


提醒: 暴力解法,虽然说很好理解,但对于程式执行效能而言,是非常不好的选择喔,除非不得以,不然希望大家能少用暴力解法


解法二: Hash Table 方法- 杂凑法

说明:建立一个字典来装载值跟索引,值放在key,索引放在value,当程式开始执行的时候,因为前面hash_table还没有添加任何数据,所以一定为空,然后nums前面的数据慢慢填入后,到了后面的元素,hash_table里面也拥有了很多数据了,就有可能会与前面的元素相加等于目标值,此时就可以传回

方法一

class Solution:
  def two_sum(self, nums, target):
    hash_table = {}
    for i, num in enumerate(nums):
      t = target - num
      if t in hash_table:
        return [hash_table[t], i]
      ## 在hash table中增加数据(key: 值, value: 索引)
      hash_table[num] = i
    ## 当没找到任何答案时回传[-1, -1]
    return [-1, -1]

      #      print(hash_table)
nums = [1, 2, 3, 4, 5, 6]
target = 10
Solution().two_sum(nums, target)

执行结果

[3, 5]


方法二

class Solution:
  def two_sum(self, nums, target):
    hash_map = {}
    for i in range(len(nums)):
      if target - nums[i] in hash_map:
        return hash_map.get(target - nums[i]), i
      hash_map[nums[i]] = i
nums = [1, 2, 3, 4, 5, 6]
target = 10
Solution().two_sum(nums, target)


我放在LeetCode上测了一下执行时间,方法一会稍微快一点喔!!


CC BY-NC-ND 2.0 版权声明

喜欢我的文章吗?
别忘了给点支持与赞赏,让我知道创作的路上有你陪伴。

加载中…
加载中…

发布评论