连 01 背包都看不懂, 零钱兑换都不会,还能继续走 Coding 这条路吗

2020-11-16 12:10:29 +08:00
 guixiexiezou

辞职许久了,思考了很久,觉得自己是不是不太适合当程序员了?最近看算法,刷 leetcode,简单的基本都会(相信在做的各位也没几个不会的),遇到最优解的,动态规划的,基本一个都不会了(哭。。。)

然后昨天今天特意看了下 01 背包问题,我发现我居然看不懂了。。。

今天看到一个简单的零钱兑换问题。只会用回溯法。。。我是不是没救了。。。

附代码

private int change0(int[] arr, int target) {
        Arrays.sort(arr);
        ArrayDeque<Integer> stack = new ArrayDeque<>();
        int index = arr.length-1;
        while (!stack.isEmpty() || index >= 0) {
            if (index < 0) {
                if (stack.isEmpty()) return -1; //找不到
                int last = stack.pop();
                target += arr[last];
                index = last-1;
                continue;
            }
            if (arr[index] == target) {
                return stack.size()+1;
            } else if (arr[index] > target) {
                index--;
            } else {
                target -= arr[index];
                stack.push(index);
            }
        }
        return -1;
}
8852 次点击
所在节点    程序员
75 条回复
tianhualefei
2020-11-17 13:49:40 +08:00
背包问题在力扣( leetcode )属于中等难度。你这既没有正确认识问题的难度,也没正确认识自己的水平。
totoro52
2020-11-17 13:54:48 +08:00
这里也有凡尔赛人?
guixiexiezou
2020-11-17 14:05:58 +08:00
@tianhualefei 我看了下,确实是属于中等难度。也就是说这就是我思维的极限了。
ochatokori
2020-11-17 14:07:37 +08:00
我只会快排,我应该转行吗
guixiexiezou
2020-11-17 14:08:34 +08:00
@totoro52 当你所有视频面(中大厂级别)都挂了的时候,也许你就不会这么认为了,反而会从另外一个角度思考问题,无论是牛角尖也好,还是感悟人生也好
guixiexiezou
2020-11-17 14:11:12 +08:00
@user8341 寻路一般都用改进版 A 星算法,一般都用现成的库例如 LIBGDX 等,也会用上一代人遗留的代码,直接调用接口。需要自己完整实现的场景不多
jay4497
2020-11-17 14:52:25 +08:00
哪条路上都有各种级别的人,大神都那么多了,咱就不去凑那个热闹了,安心做个菜鸡。。。

说不适合这条路那不至于不至于。。。
billma
2020-11-17 16:45:17 +08:00
你这让只会 vb 的我情何以堪...
calabash519
2020-11-17 16:53:17 +08:00
建议转行
weidaizi
2020-11-17 17:15:28 +08:00
@darklowly 十分认同
1039460820
2020-11-17 18:14:12 +08:00
小白前来为楼主加油,随便看看大佬们的推荐,V2ex 万岁!
CoderGeek
2020-11-17 18:21:40 +08:00
用过就忘 老被说 公司里经常被人怼 不是会个啥算法就怎么样,然后离职换下家又得温习一遍 哈哈哈
hejw19970413
2020-11-17 18:28:18 +08:00
先会学会抄,后会学,然后是理解,这是一个痛苦的过程
darklowly
2020-11-17 22:00:58 +08:00
@leido 和算法高不高级么关系的,重要是两条不同的方向。不信的话,你可以调研一下绝大部分工程师,工作中用过动态规划吗?

绝大部份工程师职业瓶颈根本就不在算法上面,是在设计上面,能够用简单优美的方法解决问题,比算法更重要。

我观察过很多工程师,智力正常,投资很多时间去搞算法,结果是,算法也搞不好,代码也写不好,这种情况在国内非常普遍。甚至很多工程师工作 10 年以上,分解一个函数都分解不好。

go 语言有一个开源的 web 框架:beego,在国内受到了大量的追捧,里面的代码写得非常差,设计也非常潦草。如果你仔细去思考这个问题,会非常有意思:

1 为什么一个喜欢技术的程序员写出了非常差的代码,还好意思公开发表?并且还出书教人?

2 为什么大量的用户会去追捧这样一个很差的框架?这些用户里面大量是小白,没有鉴别能力,可以理解,为什么很多很有经验的工程师也没有鉴别能力?如果连基本的鉴别能力都不具备,设计能力就更不具备了。


他们缺乏的是算法能力吗?还是基本的设计能力和鉴别能力?


这些设计和鉴别能力,应该怎么才能学到呢?无非就是去多学习经典的设计方法。而这些设计方法大多在第一条路上面学习。

PS:基本的数据结构和算法是需要的。
gy0624ww
2020-11-20 14:26:28 +08:00
特么的,今天我才知道凡尔赛人是啥意思,我以为你们讨论的是一道 leetcode 题目叫凡尔赛人呢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/725721

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX