leetcode笔记——325周赛

这道题一次遍历就可以做,直接用abs ( i - startindex ) 和 n - abs ( i - startindex ) 即可表示距离,但我做的时候绕麻烦了,

用while 和l,r去做,还用了很多次%n,做麻烦了

正难则反 两边最少的次数,也就是中间连续窗口的最大的长度,问题转化成怎样取窗口,能够保证两边符合取K次,且长度最大

这道题利用的是二分答案的思想,有大佬说,看到 最小值的最大值 就是二分了,通过每次二分答案,再check一下,最终得到最大值

check的时候利用的是贪心思想,对礼盒price进行排序,取最小的符合条件的礼盒,这样后面可操作空间就大

二分的时候需要注意细节

 

 ( l + r + 1) // 2防止最后两个数字跳不出来循环,如 [ 8 , 9 ]

这道题我最开始想dfs,因为每次就只有选和不选两种可能,毫无疑问TLE了,那这个时候就转向dp

但是正向dp不容易,又是利用到了正难则反思想,选择两个分区都满足sum >= k,那只要选择一个分法,其中一个sum < k ,最后再减去即可,

问题转化为:怎么挑选num,使得和小于k,01背包问题:f [i] [j] 表示考虑到第i个数,和为 j 的取法数量

 

 

posted @ 2022-12-27 10:27  孙bob  阅读(47)  评论(0)    收藏  举报