接下来的 12 天,会用每天刷 leetcode 练习的方式来练习 Go
那麽话不多说,我们就进入正题吧 ─=≡Σ(((っ゚∀゚)っ!
今天要刷的题目是 Leetcode Easy -- twoSum!(登灯)
先来看看题目:
Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Output: Because nums[0] + nums[1] == 9, we return [0, 1].
要找出阵列内哪两个元素相加起来会是 target 的值,并且用阵列的方式印出这两个元素的 index。
一开始以会动就好的麻瓜心态,来个两次 for 回圈:
func twoSum(nums []int, target int) []int {
for i, num := range nums {
for i2, num2 := range nums {
if i != i2 && num+num2 == target {
return []int{i, i2}
}
}
}
return nil
}
但发现 runtime 跑了 56ms 似乎时间有点长...?
竟然只比 7% 的人快XD
稍微参考一下其他人的做法,原来可以透过把 value 及 index 以 map 的方式记录起来,再以回圈的方式确认 target
减掉阵列的元素後的值,是否有包含在 map 内:
func twoSum(nums []int, target int) []int {
m := make(map[int]int)
for i, n := range nums {
idx, ok := m[target-n]
if ok {
return []int{idx, i}
}
m[n] = i
}
return nil
}
嘿,runtime 进步到 4ms 了!
而且使用 map 的方式,就不需要去过滤掉同样的值是否有被重复使用的问题。
其实开始写 Leetcode 才发现我根本对所有的文法都没有很熟悉,例如 idx, ok := m[target-n]
,ok
会去得到 m map 内到底有没有这个 key 的存在。
第一天的 leetcode 练习就到这边结束,有任何问题都欢迎与我告知 :)
本篇文章同步发布於我的部落格
>>: Day 18 To Do List - 加入逻辑 1
今天来做审核端去审核客户端的档案(列印的程序码都有点长,所以只把比较不一样的程序码给列出来) 根据昨...
前言 Hi, 我是鱼板伯爵今天要教大家 Stack(堆叠) 和 Positioned(位子),Sta...
兔女鹅: 「爸爸,兔兔昨天讲的好难」 「有一大堆东西要记起来,要学不动了 QQ」 兔跋: 「一定是...
在建置ELB前,我们先多做一个步骤去完成昨天URL重写的步骤。 步骤 10 更改S3的bucket ...
状态图 (State Machine) ,是类似於本文章要介绍的主轴: 有限状态机 (Finite-...