美文网首页
Leetcode 891

Leetcode 891

作者: ahalshai | 来源:发表于2018-08-23 22:27 被阅读0次

Leetcode 891 刷题指南

作为刷leetcode界的菜鸡,碰到这道题当时是非常地震惊,哪怕找到了可行的思路,tle也成为了一个障碍,感觉做这题过程中学到了不少。话不多说,一起来看题

image

subsequence这种题我刷的不多,但印象中在leetcode上不少,本题要求得到每个子序列(子序列就不解释了,看题里的例子)中最大值最小值的差值的和,并取它除10^9+7的余数,子序列就一个元素显然是0,如果有两个就是这两个元素之差。

如果枚举子序列的话就是2n次,题目给出n可达20000,这个数字很惊人,于是一开始我想到了O(n2)的方法,将列表排序O(nlogn),对于列表第i个元素,其与第j(i>j)个元素的差会出现

image

次对每个元素进行循环,时间复杂度为O(n^2),然而通过调用scipy库的组合数碰到了这种玄幻问题s

image

这种问题在discuss里面别人也碰到(19个test case左右,用的是pow),实在搞不明白,想到可能是int float计算中导致的误差,但具体原因不明望有人指正。

后来发现完全可以把一个元素被加的次数减去被减的次数再乘以这个元素的值,而我之前算的组合数的和其实就是2^(i-1)-2 .......

所以每个元素的系数(被加减的净次数)就是2(i-1)-2(n-i),计算和只需要O(nlogn)于是有O(nlogn),即排序所需的时间如下算法


class Solution:

    def sumSubseqWidths(self, A):

        """

        :type A: List[int]

        :rtype: int

        """

        A.sort(reverse=True)

        n=len(A)

        res=0

        for i in range(n):

            res+=((1<<(n-i-1))-(1<<i))*A[i]

        res=res%(10**9 + 7)

        return res

注意这里是倒序排的,当时在四十几个case的时候还是出现了tle的情况,看了别人的讨论才发现<<这种亮瞎眼的方法

再贴一个目前看到的最短时间答案:


class Solution:

    def sumSubseqWidths(self, A):

        """

        :type A: List[int]

        :rtype: int

        """

        A.sort()

        res=0

        for i in range(len(A)):

            res*=2

            res-=A[i]

            res+=A[~i]

            res%=10**9+7

        return res

从我的思路能够理解,然而自己怕是很难想到,人家的乘2与众不同啊,~也是hacky

相关文章

  • Leetcode 891

    Leetcode 891 刷题指南 作为刷leetcode界的菜鸡,碰到这道题当时是非常地震惊,哪怕找到了可行的思...

  • 891

    这几天,老师督促孩子学习情况,家委会家长也尽职尽责,这是好事,都是为了咱们孩子,得知尽然还有不上课的孩子,让...

  • 2018-07-05

    当孩子情绪失控的时候,父母该如何应对 1 23 45 67 891 23 45 67 891 23 45 6...

  • 【日精进打卡第297天】

    扬州方圆~~周亮 【知~学习】学习山东建筑定额内容 《六项精进》3遍。累积891遍 《大学》3遍。累积891遍 【...

  • 打卡

    标题:坚持就是胜利 字书:891 正文:

  • 2020-06-03自己的道路自己开拓

    一、【知~勤学】 《大学》开篇891遍 《六项精进》大纲891遍 《京瓷哲学》(第3遍,每周二四六线上塾内读书打卡...

  • 891天

    何颖颖坚持读书️ 891天 《尊重与希望——焦点解决短期治疗》从梦想到现实焦点___解决短期治疗的目标架构 142...

  • 日记891

    2022年5月26日 星期四 晴 今天是个很意外的日子,早上起床洗了洗头,感觉神清气爽,因为有早读,所以一路狂奔...

  • BottomNavigationView选择后图片与文字切换等使

    https://www.tpyyes.com/a/android/2019/0131/891.html

  • 2021-11-30

    https://idmsa.apple.com/IDMSWebAuth/signin?appIdKey=891bd...

网友评论

      本文标题:Leetcode 891

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