写在之前的感想

139 阅读2分钟

入行有快半年了,想要提高自己,于是就想到了去刷题,希望能通过刷题,提高自己的代码编写能力。我的想法是每天去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所需要加的值,和当前的下标,在后续的判断中,如果当前这个值,刚好是前面某个值所需要的值,就可以得到答案。
没什么好总结的,感觉自己比别人少一个脑子,好好学吧。