※ 引述《suhang (suhang)》之铭言:
: 我以前并没有竞赛经验
: 为了工作面试而开始写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的概念)
: 看了也能懂,而且他们也没用更难的结构或是算法
: 但自己本身的状况就是糟,因为完全没有想法,
: 连挣扎都不知道怎么抖,如果是面试,真的是干整场
: 这些症头该怎么办?我该怎么更进一步?
看了一下第二题
你是看哪里的解答啊?
排序?两个arr?
这题用一个整数 记录目前扫过的最大值 另一个整数记答案
然后扫过一次,当就好啦O(n), constant memory
个人看到题目都会先想办法估计复杂度
然后想办法找到这个复杂度下的算法
比如说这题
很明显当你扫到a_i的时候 就可以从前面的资料推论
是否从a_0到a_i可以当成一堆
如果不行就继续扫下去
如果可以就output++
然后往后扫描也不需要再回去看前面的资料
因此可以推论这是linear time可解的题目