这道题一次遍历就可以做,直接用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 的取法数量
标签:二分,周赛,礼盒,LeetCode,力扣,这道题,325,leetcode From: https://www.cnblogs.com/sun-secretbase/p/17007523.html