Leetcode 2020年4月 Code challenge

作者: 漂泊的钟 | 来源:发表于2020-04-23 06:26 被阅读0次

    因为受疫情影响,我不得不宅在家。刚好利用这个机会刷刷题。因为不想继续做Java developer,而且对Data Science有很大兴趣,趁机也直接当做学习Python,用Python来刷题。没想到真是比Java效率高多了,简直后悔早几年的时候为什么不早学Python。给我懊悔30秒……

    直接说这个4月的code challenge。现在还没做完,但感觉上基本都是easy-medium难度。题型广度似乎还可以,不过还是要在之后多练习同类题目来加深印象。

    用Python的一个好处是有Jupyter notebook这样的工具,我可以很容易把代码整合在一起,而不必像Java一样要打开笨重的IntelliJ去建立一个个Project。这样的好处是复用性高很多。我的IntelliJ Java 代码跨度3-4年,以前做过的代码都不知道放哪里,而且IntelliJ的工程文件夹里面太多没用的文件,不利于查找。另外Jupyter notebook的文档功能和代码结合度高,而且好用显眼,Java的注释我往往写了也就忘掉。

    好了,这里直接先上题目,这里先只提Week 1的题目。之后在下几篇中讲Week 2,3,4,5。

    Single Number

    也是 Q.136题
    算是简单题,用list的操作就能解决

    class Solution:
        def singleNumber(self, nums: List[int]) -> int:
            res = []
            for num in nums:
                if num not in res:
                    res.append(num)
                else:
                    res.remove(num)
            return res[0]
    

    Happy Number

    也是202题
    这题我用了如下操作技巧:

    • 把int数字转化成list
    • 用list comphrehension来快速求各个位的数平方之和,12+92
    • 根据,各个位的平方之和会出现两种情况,要么位1,要么无限循环下去。所以用一个set来存放结果,用来判断是否出现了循环。
    class Solution:
        def isHappy(self, n: int) -> bool:
            mem = set()
            while n != 1:
                n = sum([int(i) ** 2 for i in str(n)])
                if n in mem:
                    return False
                else:
                    mem.add(n)
            else:
                return True
    

    Maximum Subarray

    最大子串之和,经典问题了
    这里我用动态规划,找到最优子结构,类似于归纳法,找到
    f(n)与f(n-1)的关系。网上有很多比我好的解释。
    结尾的reduce(lambda a,b: a if a>b else b, sums)是用来找出在sums这个list中的最大值

    class Solution:
        def maxSubArray(self, nums: List[int]) -> int:
            sums = [nums[0]]
            for index in range(1, len(nums)):
                # print(index)
                if sums[index-1]+nums[index] > nums[index]:
                    sums.append(nums[index] + sums[index-1])
                else:
                    sums.append(nums[index])
            return reduce(lambda a,b: a if a>b else b, sums)
    

    Move Zeroes

    Leetcode 283题

    由于要求用in-place方法(也就是原地置换,不许用另外一个list来协助),我就想象用气泡法。一遍扫描,遇到0就挤到后面。

    class Solution:
        def moveZeroes(self, nums: List[int]) -> None:
            """
            Do not return anything, modify nums in-place instead.
            """
            non_zero = -1
            index = 0
            while index<len(nums):
                if nums[index]==0:
                    for i in range(index, len(nums)):
                        if nums[i]!=0:
                            non_zero = i
                            break
                    else:
                        non_zero = len(nums)-1
                    
                    tmp = nums[non_zero]
                    nums[non_zero] = 0
                    nums[index] = tmp
    
                index+=1
    

    Counting Elements

    好像Problems题库中没有,这里我抄下题目:
    Given an integer array arr, count element x such that x + 1 is also in arr.

    If there're duplicates in arr, count them seperately.

    Examples:

    Input: arr = [1,2,3]
    Output: 2
    Explanation: 1 and 2 are counted cause 2 and 3 are in arr.
    
    Input: arr = [1,1,3,3,5,5,7,7]
    Output: 0
    Explanation: No numbers are counted, cause there's no 2, 4, 6, or 8 in arr.
    
    Input: arr = [1,3,2,3,5,0]
    Output: 3
    Explanation: 0, 1 and 2 are counted cause 1, 2 and 3 are in arr.
    

    思路:
    简述题目就是要求比较原list与list中各元素加1后的共同元素,可以用交集intersection操作。另外list中各元素加1,可以想象原list是一个向量,加1操作可以想象成加上单位向量[1,1,1,...]。因此,可以用到numpy。

    import numpy as np
    
    class Solution:
        def countElements(self, arr: List[int]) -> int:
            np_arr = np.asarray(arr, dtype=np.int)
            np_ones = np.ones(len(arr),dtype=int)
            np_ones = np_arr + np_ones
            # print(np_ones)
            
            res = np_ones[np.in1d(np_ones, np_arr)]
            # print(res)
            return len(res)
    

    相关文章

      网友评论

        本文标题:Leetcode 2020年4月 Code challenge

        本文链接:https://www.haomeiwen.com/subject/ovunihtx.html