[问题] 如何再精进?

楼主: suhang (suhang)   2019-05-17 10:03:20
我以前并没有竞赛经验
为了工作面试而开始写leetcode, 最早连recursion都写得很痛苦
一边练习也一边跳槽,持续练习准备下次跳槽
也写了600+题了,很多题都反复练习,每天下班持续练习个五题十题
我自觉常用(考)的dfs, bfs, sort, tree, stack, queue
binary search, trie, binary search tree
都算熟悉,都能很快写出模板并了解为什么,但似乎就卡在这
好像就只会写模板题,常常稍有变化就卡住了
(高手们的"基本结构/算法"一定包含更广)
例如 https://leetcode.com/problems/ternary-expression-parser/
看了题我就直觉可以用 stack
因此我就从i=0 开始往后走,开始分析遇到 ? or : 该怎么入栈出栈
但是越写越杂,总是过不了,
瞄了别人的做法 (开心!的确也可以用 stack解)
别人从最后往前走,条理分明,20行解决
另外又一题,这个例子更糟,完全没想法
https://leetcode.com/problems/max-chunks-to-make-sorted/
看了解答才知道,主要精神是求区间最大值,有两种主要做法
1 排序,然后对比原输入(类似greedy的概念)
2 用两个arr记录位置i左边最大的和右手边最小的元素(有点类似dp的概念)
看了也能懂,而且他们也没用更难的结构或是算法
但自己本身的状况就是糟,因为完全没有想法,
连挣扎都不知道怎么抖,如果是面试,真的是干整场
这些症头该怎么办?我该怎么更进一步?
作者: FRAXIS (喔喔)   2019-05-17 10:47:00
第一题 如果你没念过 Compiler 的话可以找相关的书看看Compiler 上的技术是通用型的 不用太拘泥这种针对特殊题目的特殊解法
作者: CoNsTaR ((const *))   2019-05-19 09:09:00
面对没想法的题目,先不要去想着套你学的那些东西吧先针对问题的需要找出困难点(把问题抽象),你自然就会知道可能哪些技巧可以解例如第二题,先想为什么不能切成任意多块?很简单因为左边那块必须没有包含比右边那块还大的值,那问题就变简单了(抽象了),只要找左边的值有没有大于右边,然后你才来想要用什么资结算法来帮忙要是有方法可以单看问题描述就直接map到对应资结算法我和你买那个方法,太神了

Links booklink

Contact Us: admin [ a t ] ucptt.com