写在前面
这几天断断续续做了题目,也在慢慢体会一些数据思维。
终于不用边做视频边写题目啦~
开心~
把这几天的题解发一下~
认真做题的分割线
第一题
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
我的思路:
这题参考了思路,有点类似之前做过的一题,因为可能存在负数,而且为了减小循环长度,分别从两头来进行计算判断,并判断最大值,从数组的末尾开始计入。
第二题
461. 汉明距离
难度:简单
两个整数之间的汉明距离
指的是这两个数字对应二进制位不同的位置的数目。
给出两个整数x
和y
,计算它们之间的汉明距离。
我的题解:
class Solution(object):
def hammingDistance(self, x, y):
"""
:type x: int
:type y: int
:rtype: int
"""
return (bin(x^y)).count('1')
我的思路:
这题用异或,判断二进制下剩余的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
我的思路:
为了获取最大的利润,我们必须找到最低的价格,并用当前日期的价格减去最低价格,获得利润。
这题也是动态规划
思路,最关键要找到最低价格是我们必须判断的点,接着判断最大的利润值,不断进行比对。
第四题
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
我的思路:
这题需要考虑到,
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))
我的思路:
这题参考了评论里的方案,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)
我的思路:
这题用了非常暴力的方法,但是还是提交错了两次,少判断了为0
和1
的情况。
因为自己写的递归,就非常的开心...emmm递归栈有趣~
但是效率不太高
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。