题目
https://leetcode.com/problems/search-a-2d-matrix-ii/description/
想法
对角线延伸?
最直觉的是,扫一行,找到特定行再扫列
不,并不对
对角线!
二分查找:
0, 1, 2, 3, 4, 5
看别人解答吧,感觉思路不够明确
答案
|
|
回顾
这算是一个经典的trick吧
还是自己没能发现其中的性质
把向两边扩展转化为只向一边扩展,这真的很关键!!!
记住它吧!
Coder love Design
https://leetcode.com/problems/search-a-2d-matrix-ii/description/
对角线延伸?
最直觉的是,扫一行,找到特定行再扫列
不,并不对
对角线!
二分查找:
0, 1, 2, 3, 4, 5
看别人解答吧,感觉思路不够明确
|
|
这算是一个经典的trick吧
还是自己没能发现其中的性质
把向两边扩展转化为只向一边扩展,这真的很关键!!!
记住它吧!
https://leetcode.com/problems/complex-number-multiplication/description/
|
|
用stringstream
写起来更简单
|
|
https://leetcode.com/problems/4sum/description/
跟昨天的那个combination sum应该差不多,回溯就可以了
唔 试了半天并不可以
有错误的代码:
看了其他人的答案,发现没有用这种方式的,想必会超时吧
待研究…
这里并没有限制数的范围,如果用回溯的话,需要遍历剩余的的所有的数,那么将是O(n^2)的复杂度,不现实
https://leetcode.com/problems/maximum-width-of-binary-tree/description/
初看应该还是比较简单的吧,记录下头在哪,尾在哪应该就可以了吧
啊,没那么简单!!!
不能简单的一直向边上走
看来很遍历一下来设置了
|
|
一开始想的有点简单了,不过后来也只是需要稍微改变下思路
LeetCode相比于CodeWars可能整体难度的确有点小,可能自己也进步了,好多medium的题目原来做起来很费劲,现在比较轻松了,great!
https://leetcode.com/problems/swap-nodes-in-pairs/description/
比较简单,虽然没啥意思,但还是做一下
考虑头的变化,以及尾就没有问题了
|
|
https://leetcode.com/problems/combination-sum-iii/description/
首先是unique的,其次所有的数的数量是定死的
遍历应该是不行的,那样,简单的递归应该也不可以,
用DP也不现实,会算好多没用的
这样想,先分配:
1, 2, …, k
然后减去之后剩下的,问题变成了剩下的里边选几个再加
不好操作
先分配:1, 1, 1, …, 1
然后变成剩下的用0-8来分
没有区别。。。
没有想出来,其它人的想法:
backtracking!!!这应该是一个比较经典的backtracking的题目,只是自己不是很会backtracking罢了,趁机学习一下
|
|
其实自己一开始是这样想的,但是觉得这种递归是很低效的。但其实还是没有理解回溯的思想,没有条件反射地想到。
回溯核心在于维护一个序列,当不满足条件时便退回,这个序列保证了不会做多余的工作,不像简单的递归一样!
https://leetcode.com/problems/sliding-window-maximum/description/
初看觉得,直接扫一遍就好了,但是细想想,最大值是不断更新的,要各个状态下的最大值。
记录下最大的两个值看怎么样,不行,还是会更新
要不还是用DP试试,也不知道从何下手啊~
或许可以这样 先算出 1~k的最大值,再求2~k的是大值,再求2~k+1的最大值,再3~k+1最大值!
但是同样没有考虑重复,比如:5,3,3,2,2 (k = 3)
额,没有思路,如果完全用DP做,算出各段的最大值,真的好傻啊
算了,先这样做吧
放弃,看答案吧 这应该是一个很经典的问题,就算是记也要住
Monotonic Queue
https://abitofcs.blogspot.com/2014/11/data-structure-sliding-window-minimum.html
参考他人的:
|
|
很经典的题目了
deque运用,用deque存索引是我没有想到的,这是一个值得学习的地方
还是注意分析表象背后的条件,一个个的往过移,那个一个较大的值出现,前边较小的就不再会成为最大值了,如代码中的:
|
|
https://leetcode.com/problems/find-all-duplicates-in-an-array/description/
no extra space…
注意到 $ 1 <= a[i] <= n$
用下标对应的关系应该就可以了吧
第一个AC的答案
噗,0.61% hhh
|
|
尽管是O(n),但是应该是做了好多无用的事
唔,看了别人的答案,只是觉得,想法基本上是一样的,只是without extra space,自己也没有新开一个vector来存结果
有一些粗心,注意下标的一些获取!
Catch
使用今天第一次接触并使用C++测试框架,也是有需求的,是因为自己跟着lept_json教程来写json的parser,顺便可以学一下测试框架的使用。
Google Test还是没有配好,可能之后等熟悉测试框架了之后再说。这次使用的是Catch
。
https://github.com/philsquared/Catch
https://github.com/philsquared/Catch/blob/master/docs/tutorial.md
GitHub上的Repo已经说得比较清楚了
catch.hpp
就一个单的头文件但为了测试与原有的项目分离,还是需要有所规划,因为这个json parser的项目很简单,没有分得很清晰严格。
工程结构
CMake配置:CMakeLists.txt
|
|
测试文件示例:
|
|