美文网首页
每日Leetcode—算法(13)

每日Leetcode—算法(13)

作者: Chuck_Wu | 来源:发表于2019-05-15 11:51 被阅读0次

    121.买卖股票的最佳时机

    算法一(自己):

        def maxProfit(self, prices: List[int]) -> int:
            if not prices:
                return 0
            mini = prices[0]      #设置一个最小的数
            profit = 0     #初始利润设为0
            for i in range(1,len(prices)):    #从第二个数开始循环
                if mini > prices[i]:   #如果mini非最小数,则更新mini
                    mini = prices[i]
                if prices[i] - mini > profit:        #两数相减,大于初始利润,则更新利润
                    profit = prices[i] - mini
            return profit
    

    算法二:

    def maxProfit(self, prices: List[int]) -> int:
        if len(prices) < 2:
            return 0
        profit = 0
        mini = prices[0]
        for i in prices:
            mini = min(i, mini)
            profit = max(i - mini, profit)
        return profit
    

    分析:该方法与我自己的相似,但是运用了几个比较函数,使代码变得更加简洁了。

    122.买卖股票的最佳时机II

    算法:

    def maxProfit(self, prices: List[int]) -> int:
        profit = 0
        for i in range(len(prices)):
            if prices[i] > prices[i-1]:
                profit += prices[i] - prices[i-1]
        return profit
    

    分析:大佬的算法,逻辑超强。
    比如[1,3,5,2,6,1,3]
    profit=(3-1)+(5-3)+(6-2)+(3-1)

    125.验证回文串

    算法:

    def isPalindrome(self, s: str) -> bool:
        s = ''.join(filter(str.isalnum, s)).lower()     
        return s == s[::-1]
    

    分析:filter函数前面讲过。isalnum() 方法检测字符串是否由字母和数字组成,并返回True或者False。

    136.只出现一次的数字

    算法:

    def singleNumber(self, nums: List[int]) -> int:
        a = 0
        for num in nums:
            a = a ^ num
        return a
    

    分析:算法使用了Python中的异或运算,异或运算将数字看做二进制进行运算。
    例如:
    a = 60(二进制为0011 1100 )
    b = 13(二进制为0000 1101)
    异或要求对应的二进位相异时为1,相同时为0。
    a^b结果为0011 0001
    且异或满足交换律a ^ b ^ c <=> a ^ c ^ b

    相关文章

      网友评论

          本文标题:每日Leetcode—算法(13)

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