小李飛刀:作題第十彈!

寫在前面

這幾天斷斷續續作了題目,也在慢慢體會一些數據思惟。
終於不用邊作視頻邊寫題目啦~
開心~
把這幾天的題解發一下~python

認真作題的分割線

第一題

977. 有序數組的平方
難度:簡單
給定一個按非遞減順序排序的整數數組 A,返回每一個數字的平方組成的新數組,要求也按非遞減順序排序。
個人題解:算法

class Solution(object):
    def sortedSquares(self, A):
        """
        :type A: List[int]
        :rtype: List[int]
        """
        result = [0]*len(A)
        m = 0 
        n = k = len(A)-1 
        while m <= n:
            if A[m]**2 < A[n]**2:
                result[k] = A[n]**2
                n = n -1
            else:
                result[k] = A[m]**2
                m = m + 1
            k = k - 1
        return result

clipboard.png

個人思路:
這題參考了思路,有點相似以前作過的一題,由於可能存在負數,並且爲了減少循環長度,分別從兩頭來進行計算判斷,並判斷最大值,從數組的末尾開始計入。數組

第二題

461. 漢明距離
難度:簡單
兩個整數之間的漢明距離指的是這兩個數字對應二進制位不一樣的位置的數目。
給出兩個整數xy,計算它們之間的漢明距離。
個人題解:函數

class Solution(object):
    def hammingDistance(self, x, y):
        """
        :type x: int
        :type y: int
        :rtype: int
        """
        return (bin(x^y)).count('1')

clipboard.png

個人思路:
這題用異或,判斷二進制下剩餘的1便可。spa

第三題

121. 買賣股票的最佳時機
難度:簡單
給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。
若是你最多隻容許完成一筆交易(即買入和賣出一支股票),設計一個算法來計算你所能獲取的最大利潤。
注意你不能在買入股票前賣出股票。
個人題解:設計

class Solution(object):
    def maxProfit(self, prices):
        """
        :type prices: List[int]
        :rtype: int
        """
        min_p, max_p = 999999, 0
        for i in range(len(prices)):
            min_p = min(min_p, prices[i])
            max_p = max(max_p, prices[i] - min_p)
        return max_p

clipboard.png

個人思路:
爲了獲取最大的利潤,咱們必須找到最低的價格,並用當前日期的價格減去最低價格,得到利潤。
這題也是動態規劃思路,最關鍵要找到最低價格是咱們必須判斷的點,接着判斷最大的利潤值,不斷進行比對。code

第四題

122. 買賣股票的最佳時機 II
難度:簡單
給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。
設計一個算法來計算你所能獲取的最大利潤。你能夠儘量地完成更多的交易(屢次買賣一支股票)。
注意:你不能同時參與多筆交易(你必須在再次購買前出售掉以前的股票)。
個人題解:視頻

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

clipboard.png

個人思路:
這題須要考慮到,
1.當天賣出後能夠當天繼續買入;
2.爲了買賣儘量屢次,當後來日期的金額>買入日期的時候,即作賣出動做,獲取收益。對象

第五題

557. 反轉字符串中的單詞 III
難度:簡單
給定一個字符串,你須要反轉字符串中每一個單詞的字符順序,同時仍保留空格和單詞的初始順序。
個人題解:blog

class Solution(object):
    def reverseWords(self, s):
        """
        :type s: str
        :rtype: str
        """
        l = s.split(" ")
        return " ".join(map(lambda x:x[::-1],l))

clipboard.png

個人思路:
這題參考了評論裏的方案,python彷佛在字符串的處理上有先天的優點。
順便複習了下知識點:

  • join 用於鏈接字符串 "-".join([a,b])
  • map map(函數,須要處理的對象)
  • lambda表達式 匿名函數,一目瞭然的輸入和輸出
  • [:]數組默認參數爲0和len-1,等於複製一份數組,即a[:]=a
  • [::-1] 當步長小於0的時候,默認缺省值爲-1和len-1,即a[::-1] = a[len(a)-1:-1:-1],即逆序遍歷
第六題

231. 2的冪
難度:簡單
給定一個整數,編寫一個函數來判斷它是不是 2 的冪次方
個人題解:

class Solution(object):
    def isPowerOfTwo(self, n):
        """
        :type n: int
        :rtype: bool
        """
        if n == 0:
            return False
        if n == 1:
            return True
        if n % 2 == 1:
            return False
        elif n == 2:
            return True
        else:
            return self.isPowerOfTwo(n/2)

clipboard.png

個人思路:
這題用了很是暴力的方法,可是仍是提交錯了兩次,少判斷了爲01的狀況。
由於本身寫的遞歸,就很是的開心...emmm遞歸棧有趣~
可是效率不過高

總結一下

相關文章
相關標籤/搜索