题目一
给定一个有序数组arr,代表坐落在X轴上的点,给定一个正数K,代表绳子的长度
返回绳子最多压中几个点?即使绳子边缘处盖住点也算盖住。
题的理解
贪心也行,
然后比如绳子的最右端到了973 绳子长度为100 而这是个有序数组,我直接让973 的下标-873的下标+1就行了。不是数组2分就好了
第二个思想就是滑动窗口思想o n的复杂度
题目二
给定一个文件目录的路径,写一个函数统计这个目录下所有的文件数量并返回隐藏文件也算,但是文件夹不算。
宽度优先和深度优先都可以,咱们就不用递归了。
广度优先借助队列 ,每次遇到文件计数加一,遇见文件夹入队,知道为控,这个和你这二叉树的广度优先搜索差不多
这里给个算法使用栈,不过对于这道题来说和队列差不多,因为它不需要顺序。
题目三
位运算符
其实上述那个移位并或上自己的操作就是要把自己最高位的数字全成1 ,你细品。为啥算到16 因为int就32位。n已经等于位上全是1了,那再加一个1不就是那个二进制了吗。
其实上边就是一个填满函数。如果加上负数的话,判断n<0,直接返回1;
题目四
贪心:第一个g放在第一个,第二个g放在第二位 ,光用看G就行了 o n时间复杂度一个变量记录该放那个位置了,一个记录遍历到哪了。其实也不用考率那个字母谁多谁少,你细品。
该题可以让他去做或者去右,
只需要两种情况都记录一下就可以了
题目五
递归
暴力递归转化成别的。 其实这个index和rest固定下来我们就知道了,可是我们用杀缓存法去优化。加个缓存,已经算过的我们直接取
堪比动态规划 。
优化 :
可以都改成非负的,
然后把这东西都加起来还不能到达target ,那么结果一定为0.
然后所有数加起来的sum和target 奇偶性不一致,那么结果一定为0
第四个优化
我们知道全改正的 sum大于target才有结果,那么我们把数分为两个集合 p 和n
那么此时一定有p 之和- n 之和 = t
两边分别加上p+n
化简得到 2p = t + sum
那么找出一个p = (t + sum)/2 这是个固定的数。减少了规模
之前那个 rest是-sum - sum 而现在 是0 - sum;
所以我只需要跳出几个数之和为p就行了,这部就背包问题吗,因为这个就变成了挑着用了
第五个优化点二维空间的优化压缩算法