1

写在前面

这几天断断续续做了题目,也在慢慢体会一些数据思维。
终于不用边做视频边写题目啦~
开心~
把这几天的题解发一下~

认真做题的分割线

第一题

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即可。

第三题

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

我的思路:
为了获取最大的利润,我们必须找到最低的价格,并用当前日期的价格减去最低价格,获得利润。
这题也是动态规划思路,最关键要找到最低价格是我们必须判断的点,接着判断最大的利润值,不断进行比对。

第四题

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
难度:简单
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
我的题解:

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递归栈有趣~
但是效率不太高

总结一下


林奈木
35 声望7 粉丝

深水静流。