入行有快半年了,想要提高自己,於是就想到了去刷題,希望能通過刷題,提高自己的**編寫能力。我的想法是每天去leetcode做一道題,每天一道,從簡單的開始做起,堅持做下去。
今天是第一天,打卡做題開始。
題目:
我的答案:
class solution(object):
def twosum(self, 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]
複製**
本人最直觀的想法就是通過兩個迴圈去遍歷,找到對應的值,顯然這種方式是最笨的解決辦法,在leetcode平台用時3716 ms,我需要去尋找乙個更好的辦法去解決這個問題,通過查詢終於找到了,在leetcode上跑,只用時28 ms,下面貼**:
class solution(object):
def twosum(self, nums, target):
q={}
for x in range(len(nums)):
a = target -nums[x]
if nums[x] in q:
return q[nums[x]],x
else:
q[a] = x
複製**
花了點時間,終於將這個演算法搞懂,演算法只需要迴圈一次,就能解決問題。假如nums = [2,7,11,15], target = 9,第一次迴圈,a = 7,下面判斷2是不是在字典中,不在字典中,將 7:0鍵值對放入到字典中,第二次迴圈,a = 2,下面判斷7是不是在字典中,發現7在字典中,則返回字典中7的值和當前的下標。也就是說,每一次迴圈,存放在字典中的值,都是當前這個值要的到target所需要加的值,和當前的下標,在後續的判斷中,如果當前這個值,剛好是前面某個值所需要的值,就可以得到答案。
沒什麼好總結的,感覺自己比別人少乙個腦子,好好學吧。
感想 寫在NOIP2016之前
從沒想過要堅持這麼久,還有不到乙個星期就要迎來乙個重要的考試。回想去年九月,在前同桌的慫恿下試聽了資訊學競賽,與同一年級的一百多人一起開始了這段難忘的 旅程 當時在貼吧上問上課的地點,很久以後才知道回我的是王西平大神。從最初交了四五次才ac的 難題 a b problem 到後來學習動態規劃 圖論等...
寫在畢業之前
人生有很多抉擇,就象人經常站點三叉路口一樣。在學校的生活總是很愜意的,因為這裡可以認識非常多的沒有心計的朋友 激發自己創意靈感 和保持一顆很有野心的抱負。現在快畢業了,想起來真的很快,這3年,彈指一揮間。留下了很多美好的回憶,同時也給自己留下來許多遺憾,不過還好,我總是能自醒,知道自己落後了,然後就...
寫在之前blog
寫在之前 再從2014年的同學偶遇聊天,踏上linux之路,走上計算機行業,5年了,直到今天的我才發現自己已經跟資料庫,資料,應用打了這麼多年的交道,現在計算機行業工作的不景氣偏偏促使我寫下我自己的工作經歷和生活中遇到的問題 之前這幾年遇到的問題,不想寫了,以後或許會寫一些之前遇到的問題和使用經歷,...