山东大学吧 关注:444,583贴子:10,791,037

〔算法讨论贴〕欢迎高智商苗苗前来讨论

只看楼主收藏回复

RT, 楼主在刷leetcode, 准备IT公司的面试,但是楼主不喜欢看答案,所以遇到的没什么思路的题就po在这个帖子里跟大家互相交流想法,共同进步~
算法我的理解是想出一个解决问题的方法,并尽量高效地解决问题,所以我觉得算法门槛很低。只要你聪明一些,思维发散一些,就算没学过算法,都希望你能关注这个帖子,常来讨论,人多了总能想到解决问题的方法。
本帖半年之内长期有效, 所以请尽量在楼中楼进行讨论,如果觉得不方便的苗苗直接点只看楼主,在每道算法题下的楼中楼讨论。
Apple Inc. 镇楼


1楼2015-09-01 08:50回复
    1. 给出一个数组,数组中都为非负整数,数组中的每个数字代表了厚度为0的墙的高度。问题:从数组中找出两堵墙, 和x轴一起形成一个容器,使其可以有最大的容量,返回那个容量。
    首先要避免穷举法,就是把所有的两堵墙组合都找出来,一个一个算面积,然后返回最大值,那就是Cn2(n个数中任意找出两个不同的数),n*(n-1)/2步, 虽然可以,但是不符合程序时间的要求。
    其次。。我也没有什么好的思路,因为数组必须固定不变的分析,数组记录了整个地形,不可以随意更改。。无论从首尾开始找还是从最高的点开始找感觉都怪怪的,因为毕竟还有一个变量是宽度,不完全是高度说了算。


    2楼2015-09-01 08:58
    收起回复
      2025-06-09 12:00:59
      广告
      没有提到宽度啊,是数组下标对应宽度吗?


      来自Android客户端4楼2015-09-01 09:23
      收起回复
        Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.
        Note: You may not slant the container.


        6楼2015-09-01 10:01
        收起回复
          这种问题要想log(n)一般就两种思路,要么从头开始每个index求一个key,要么从两头往中间靠。我看这道题应该是第二种思路


          来自Android客户端7楼2015-09-01 10:03
          收起回复
            我也高智商 但是我拒绝讨论这个问题


            来自iPhone客户端9楼2015-09-01 10:20
            收起回复


              IP属地:山东来自Android客户端10楼2015-09-01 10:24
              回复
                帖子不错,先留名


                来自iPhone客户端11楼2015-09-01 10:29
                回复
                  2025-06-09 11:54:59
                  广告
                  美帝猫又来虐智商了


                  来自iPhone客户端12楼2015-09-01 10:30
                  回复
                    都到后排了


                    IP属地:贵州来自Android客户端13楼2015-09-01 10:47
                    回复
                      英文说的是线,怎么上面又说是墙了呢? 空间中的平面构成一个容器最少需要四个面


                      IP属地:北京来自Android客户端14楼2015-09-01 10:52
                      回复
                        拆墙需要挖掘机,那么问题来了


                        IP属地:山东来自Android客户端15楼2015-09-01 10:59
                        回复
                          挖掘机也可以炒菜,所以问题又来了


                          IP属地:印尼来自Android客户端16楼2015-09-01 11:02
                          回复
                            考虑所求最大值(j-i)*min(h[i],h[j]),可知左右挡板短板为瓶颈,因此每次更新短的一边即可。
                            while(i<j)
                            {
                            ans=max(ans,(j-i)*min(h[i],h[j]));
                            (h[i]<h[j])?i++:j--;
                            }
                            复杂度O(n)


                            IP属地:美国18楼2015-09-01 14:01
                            回复
                              2025-06-09 11:48:59
                              广告
                              懵逼状态


                              来自Android客户端19楼2015-09-01 14:22
                              回复