精华内容
下载资源
问答
  • 昨天刷这样一道编程题: -----------------------------------...个非空整数数组,选择其中两个位置,使得两个位置之间数和最大。 如果最大和为正数,则输出这个数;如果最大和为负数或0,则输出0 --...

    昨天刷这样一道编程题:

    --------------------------------------------------------------------------------------------------

    求连续子数组的最大和。

    一个非空整数数组,选择其中的两个位置,使得两个位置之间的数和最大。
    如果最大的和为正数,则输出这个数;如果最大的和为负数或0,则输出0

    --------------------------------------------------------------------------------------------------

     看到题目后,我的第一反应:“可以根据积分原理来解决,先将数组从左到右进行累加,根据累加数组的最小值、最大值来计算连续子数组的最大和”。

    想象中,累加数组的折线图大约是这个样子:

    “很显然,连续子数组和的最大值为:累加数组的最大值与最小值之差。”

    “如果累加数组的全局最大值在最小值左边怎么办?”

    “那就找它的局部最大值、最小值,再比较多个局部的结果,取最大值。”

    “如何找局部最大值、最小值?”

    “把累加数组切分为两部分,迭代计算。”

     

    头脑里这么想着,手指头也跟着活动起来了,反正这就和“累加数组”杠上了。

    写完后提交代码试运行,部分case不通过。然后修修补补,终于提交通过了。

    代码如下:

    def find_max_sublist_sum(a_list):
     
        # 空list直接返回结果0
        if len(a_list) == 0:
            return 0
     
        # 去除list前面连续的负整数,生成新的new_list;如果list全部元素为负,则返回结果0
        indx = 0
        for x in a_list:
            if x > 0:
                break
            else:
                indx += 1
        if indx < len(a_list):
            new_list = a_list[indx:]
        else:
            return 0
     
         # 从前往后,计算new_list元素的累积和,生成accumulate_list
        accumulate = 0
        accumulate_list = []
        for x in new_list:
            accumulate += x
            accumulate_list.append(accumulate)
     
        # 找出累积和列表最大值、最小值对应的index
        index_min = accumulate_list.index(min(accumulate_list))
        index_max = accumulate_list.index(max(accumulate_list))
     
        # 根据累积和列表的最大值、最小值位置进行分类计算
        if index_min < index_max:   # 最小值在最大值左边,取最小值到最大值区间内增量
            return max(accumulate_list) - min(min(accumulate_list), 0)
        elif index_min == index_max == 0:   # 最小值、最大值均 index == 1,说明列表只有一个正数
            return accumulate_list[0]
        else:   # 将列表分成2部分,递归处理
            list1 = new_list[:index_max+1]
            list2 = new_list[index_max+1:]
            return max(find_max_sublist_sum(list1), find_max_sublist_sum(list2))
     
     
    if __name__ == '__main__':
        import sys
        for line in sys.stdin:
            testlist = line.split(',')
            testlist = [int(testlist[i]) for i in range(len(testlist))]
            print(find_max_sublist_sum(testlist))
    

      自我感觉,这个解法有些复杂,但是也没认真去想其他的办法。

     

    今天再回过来看时,看到@牛客692333551号贴出来的解法,我恍然大悟。

    @牛客692333551号解法如下:

    x = [int(i) for i in input().split(',')]
    res = 0
    d = max(0, x[0])
    res = max(res, d)
    for i in range(1, len(x)):
        d = max(d + x[i], 0)
    res = max(res, d)
    print(res)
    

      

    原来自己的方法太蠢、太丑了!不忍直视!

     

    为什么自己如此坚决地捍卫自己的“第一反应”,宁可绞尽脑汁去修修补补,也不愿去换个思路去想?

    第一反应是自己的直觉,直觉一般凭借经验做出反应,却不一定靠谱,特别是那些经验不足者的直觉。

    对于弹出的直觉反应,我们应该用理性思维去进行判断。

    我们不要太懒惰了,任由着直觉去乱来,最后还得去帮它填坑。

     

    参考大神的方法,修改后代码如下:

    str = input().split(',')
    str_list = list(str)
    integer_list = [int(x) for x in str_list]
    
    current_sum = 0
    largest_sum = 0
    
    for num in integer_list:
        if current_sum + num > 0:
            current_sum += num
            largest_sum = max(largest_sum, current_sum)
        else:
            current_sum = 0
    
    print(largest_sum)
    

       

    参考:

    https://www.nowcoder.com/questionTerminal/459bd355da1549fa8a49e350bf3df484

    转载于:https://www.cnblogs.com/zhangwei22/p/9931645.html

    展开全文
  • 致敬2016年我一次选择

    千次阅读 2017-01-06 09:38:52
    不是因为经历了什么永生难忘的经历也不是因为我做了什么伟大的事情,只是因为毕业了。 我毕业了,多么开心却又悲伤的故事。我开心在我终于可以做自己想做的事情,难过的是当同学们的父母都陆续为他们铺好以后的路的...

    2016年,对我来说,是不平凡的。不是因为经历了什么永生难忘的经历也不是因为我做了什么伟大的事情,只是因为毕业了。

    我毕业了,多么开心却又悲伤的故事。我开心在我终于可以做自己想做的事情,悲伤的是当同学们的父母都陆续为他们铺好以后的路的时候,我还站在原地不知道往哪里走。但是我还是因为我的父母而自豪,因为我知道他们有多么爱我,多么想把一切给我。我很满足。我也真的爱他们。

    一.实习(傻的一匹)

    我是个东北女生,长在黑龙江鹤岗,跑来长春上大学。学的专业是软件开发。因为大学生活中天天打联盟所以什么都没有学到,当初天真的认为我本专业学不好,我一个学过计算机的人也可以去当助理或者别的文员的工作。是的,我当时的人生确实也是这个路线,我实习时自己跑去找了一个助理的工作,每天做做PPT写写文案,工作简单没有什么大的难题,我以为我会在这个路上长久,可惜我还是败给了我自己,因为受不了每天的强制加班以及抵抗无果,便在2015年12月31日那天辞去了这个实习的工作,没事,等我过年回来我接着找,我天真的以为。

    其实现在想想,挺感谢那里的,让我一个什么都不会的人至少掌握了制作PPT的本领,那时也是每天都在研究PPT的动画制作,感觉自己做出来的PPT蛮好看的吐舌头

    转眼2016,从鹤岗匆匆赶回长春,我开始了漫无目的的找工作的路途。我面试了几家助理或者文员的工作,无果。

    二.转折

    直到我遇见了他们——“一伙骗子”,可以说是在智联上打着招聘旗号的培训公司,感觉现在整个长春的招聘市场都让他们给弄乱了,走到哪里都是让你交钱培训,少则1万多,多则几万。但是我也挺感谢他们的,也是他们的那个HR让我明白了我之前的路是有多么的傻。下面我就说说我在这的经历吧。

    我去他们那面试的助理,我简单的介绍了自己,下面就开始了我们的对话:

    HR:学的软件开发为什么跑来做文员?

    我:本专业学的不好,也没有什么项目经验,感觉自己不适合做这方面。

    HR:那你打算一辈子干文员?

    我:我也不知道以后干什么,但是我得工作。

    HR:你知道长春的助理或者文员是什么环境吗?

    我:不知道。

    HR:1.大多数的大学生不想干本行业的一半去了销售一半去了助理,长春还有个吉林大学和各种院校,你自己想想每年有多少大学生挤在这里找工作,这导致了长春助理这方面人多岗位少,所以要求高,工资低;2.长春没有什么大型公司,你不要想着你在一个公司干几年会有人挖你或者你升职,你要知道没有几个公司有助理团队的。你走这条路,只能让你吃饱,想挣钱是不怎么现实的,还不如趁年轻,你还有语言编程的底子去学一门真正的技术,我们公司的培训收1W8,包工作~~~~~~~~!!!

    其实后来我都没有听她到底说了什么,我只知道自己当时快哭了,对自己感到失望,年纪轻轻就想去混工作混日子不求上进。于是我便开始了现在的生活。

    三.努力

    我的第一步是恳求一家公司给我学习软件测试的机会,于是我去了,我那时白天上班,晚上回到寝室学习软件测试的知识,主要是压力测试LR那方面的,但是因为是一个小公司,那时我的组长对我很好,他说你学的这些东西在咱们这个小公司是用不到的,长春哪里有需要压力测试的我不知道,但是咱们只要保证web端界面好用就好,如果你想继续走这条路出去看看吧。所以我走了。那时的我又陷入了迷茫,我不知是在长春还是去更远的地方,但是我知道我不能走,因为他在这。我要和他在一起。但是放眼长春,我不知道我能去哪里,我那时每天熬夜在智联和51job上查看,每一个消息,每一个公司我都会在百度上认真的查看,因为我那时知道我快毕业了,我不能再说走就走了,我想要个安定的工作。

    于是我在2016年5月16日走到了这里,在长春算是挺大的公司,我在的这个部门只要是做教育课程研发。我想在这里试试看,刚来就参与到了安卓开发的项目中去,主要承担这面的测试工作,但是其实还是用不到我一直在学习的东西,我那时真的很苦恼,因为当时是抱着很大的希望才来的。或许是因为我工作比较认真,又或许是时机正好,我有了一个转岗的机会,转到开发部,虽然我什么都不会,不知自己能不能胜任,但是我还是一直在争取这个机会。现在,我已经是一个产品开发工程师,最近在研究centos系统、Windows 2008 各种系统的虚拟机的配置以及病毒攻防方面的研究。虽然还是什么都不会,吐舌头,但是我会努力的!

    我也是在学习这些东西的时候才发现CSDN,可能是我年龄小没生活在博客的年代(其实我不小,今年22岁大笑),也可能是之前就知道玩游戏所以知识面短浅,但是感觉每天在这里记录自己学到的东西,很多年后看一看自己走过的路是一件多么开心的事情啊!

    四.展望

    2017已经来到了,我希望如果我可以,我还能在这里继续学习,因为我觉得这里学习的环境对我来说还是蛮好的,我希望我可以学习越来越多的知识,然后在涨涨工资就再好不过啦大笑。家人身体健康,我能减肥成功(最近胖了十多斤),还能跟他在一起!



    展开全文
  • 难忘的午饭

    2008-01-10 14:28:00
    今天是2008年1月10日,我们没有在饭堂吃饭,而是选择在宿舍里面自己煮饭吃,因为煮饭锅比较小,所以我们4个人吃话,就必须得分2做,第锅面条真很香,到第二锅时候 ,由于水添太多了,很难煮,宿舍另外两个mm...

    今天是2008年1月10日,我们没有在饭堂吃饭,而是选择在宿舍里面自己煮饭吃,因为煮饭的锅比较小,所以我们4个人吃的话,就必须得分2次做,第一锅面条真的很香,到第二锅的时候 ,由于水添的太多了,很难煮,宿舍的另外两个mm站在那里煮,我就躺在自己的床上,刚刚听到他们说水太多了,突然间听到"砰"的一生,随之便看到两位mm尖叫起来,因为水太多,结果汤全部溢出来了,刚好溅到与电源接触的地方,真的是很恐怖..

        幸好老天爷保佑,大家今天都没有受伤...虽然发生了这个意外,但是我们这顿饭还是吃的挺香的....

    展开全文
  • 想让用户选择产品,你只有一次机会。 我经常谈到超级产品,在打造超级产品过程中许多人会谈起建立MVP(最小可行性产品),而我却喜欢MLP(最小可爱产品)。 比起MVP,我更相信创造让人难以置信产品体验,要...

    想让用户选择你的产品,你只有一次机会。

    我经常谈到超级产品,在打造超级产品的过程中许多人会谈起建立MVP(最小可行性产品),而我却喜欢MLP(最小可爱产品)。

    比起MVP,我更相信创造让人难以置信的产品体验,要从创造新用户首次的用户体验开始才能打造出超级产品。

    与MVP不同,MVP的目标是让几乎无法使用的产品进入市场,并得到用户的初始反馈,而MLP则完全相反,其中包括认真对待新用户的首次体验。

    当用户第一次使用你的产品,他的第一次体验决定着用户是否会再次选择使用产品。如果他们觉得这款产品简直是傻瓜式操作,足够方便快捷,那么他们就会继续使用产品。

    要知道,普通应用产品在安装后的三天内,至少损失78%的活跃用户,因此,想要打造超级产品,企业必须赢得更多的用户时间。

    但大部分企业却不是这么想的。

    他们只会考虑产品能够为企业带来多大利益,“声张价值”以及一心只靠营销的小聪明。新用户在使用产品的前20秒的体验,几乎不曾被想起,只有在出现问题后才会想到要解决。

    举个例子,就拿苹果企业来说,如果你的iPhone被装在一个破旧的纸箱子里面,而不是珍珠白色的真空盒子里,让你感受到企业对产品的用心。

    作为新用户,你会立即感到后悔、失望、心烦,而不是愉悦或渴望使用这款产品。

    如果你想打造超级产品,就必须建立一个能够传递信息的首次用户体验。

    举个例子,在互联网产品的过程中,我们会发现移动开发工具的首次体验并不友好,Facebook作为社交服务网站,它曾经很优秀,而如今他们的说明页很长,有无数个链接,光是不阅读向下滚动就需要花费用户20至30秒的时间,这其中还有72个步骤说明,甚至有10分钟左右的视频。

    这是企业留给用户第一印象的可怕方式。

    太过于浪费用户的时间…

    那么,企业必须解决这个问题才能打造超级产品。

    因此,如何才能让用户第一次使用产品的体验变得有趣,让他们愉悦