资讯专栏INFORMATION COLUMN

小李飞刀:做题第十弹!

bingo / 3476人阅读

摘要:第二题汉明距离难度简单两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数和,计算它们之间的汉明距离。第三题买卖股票的最佳时机难度简单给定一个数组,它的第个元素是一支给定股票第天的价格。

写在前面

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

认真做题的分割线
第一题

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. 汉明距离
难度:简单
两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。
给出两个整数xy,计算它们之间的汉明距离。
我的题解:

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)

我的思路:
这题用了非常暴力的方法,但是还是提交错了两次,少判断了为01的情况。
因为自己写的递归,就非常的开心...emmm递归栈有趣~
但是效率不太高

总结一下

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/43470.html

相关文章

  • 小李飞刀做题第十二弹!

    摘要:写在前面今天没有叨逼叨但是又一次错过了竞赛爱睡觉的小李下周要上班,下下周一定要参加了握拳认真做题的分割线第一题两地调度公司计划面试人。第人飞往市的费用为,飞往市的费用为。示例输入输出解释第一个人去市,费用为。 写在前面 今天没有叨逼叨...但是又一次错过了竞赛...爱睡觉的小李...下周要上班,下下周一定要参加了(握拳 认真做题的分割线 第一题 1029. 两地调度公司计划面试2N人。...

    yagami 评论0 收藏0
  • 小李飞刀:刷题第十三弹!

    摘要:写在前面今天的小李的目标是排序算法,果然还是要下手写才会更有体会,也更记得住。排序算法冒泡排序主要是比对相邻两个数之间的大小关系,不断将较大值交换至最后。 写在前面 今天的小李的目标是排序算法,果然还是要下手写才会更有体会,也更记得住。 认真做题的分割线 第一题 215. 数组中的第K个最大元素难度:中等在未排序的数组中找到第k个最大的元素。请注意,你需要找的是数组排序后的第k个最大的...

    lixiang 评论0 收藏0
  • 小李飞刀做题第十一弹!

    摘要:第五题对称二叉树难度简单给定一个二叉树,检查它是否是镜像对称的。第十六题最大连续的个数难度简单给定一个二进制数组,计算其中最大连续的个数。第十八题平方数之和难度简单给定一个非负整数,你要判断是否存在两个整数和,使得。 写在前面 最近忙着调教新装备,没有及时的写题解,但是没有在偷懒没刷题喔~来认真整理下最近做的题目~ 之前考虑按tag来刷题,后来收到了推荐的leetcode题解,就根据上...

    ytwman 评论0 收藏0
  • 小李飞刀题第六弹!

    摘要:给定的字符串只含有小写英文字母,并且长度不超过。其他这题了,要重做看了其他的人的题解,使用的是无限逼近中位值的办法,理论基础应该是泰勒公式。万万没想到居然用到了泰勒公式手工执行了下算法,反而理解的更快,但是泰勒公式还得再复习下。 写在前面的话 今天持续做题ing,python有意思~今天的题有点虐心...兴许是我太笨了...会努力学习的!动态规划我来啦~ 开始做题 第一题 459. 重...

    BigNerdCoding 评论0 收藏0
  • 小李飞刀题第八弹!

    摘要:认真做题的分割线第一题乘积最大子序列难度中等给定一个整数数组,找出一个序列中乘积最大的连续子序列该序列至少包含一个数。 写在前面的话 慢慢转变思路,不再死磕不会做的题,思路可以先借鉴,但是一定要吃透透。上周末看完看完了《算法图解》,感觉对一些题目的思路有比较大的帮助,但是还是要在实践中理解。 认真做题的分割线 第一题 152. 乘积最大子序列难度:中等给定一个整数数组nums,找出一个...

    ztyzz 评论0 收藏0

发表评论

0条评论

bingo

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<