2817. 限制条件下元素之间的最小绝对差;2305. 公平分发饼干;878. 第 N 个神奇数字

2817. 限制条件下元素之间的最小绝对差

核心思想:枚举+二分。我们去枚举nums[j],然后用一个数据结构去装nums[i],利用二分去找在这个数据结构中离nums[j]最近的值的下标,然后统计最小值。这个数据结构可以使用SortedList,然后我们放入两个哨兵,防止找不到的情况,从而减少代码量。

2817. 限制条件下元素之间的最小绝对差;2305. 公平分发饼干;878. 第 N 个神奇数字_第1张图片

2305. 公平分发饼干

核心思想:动态规划(二进制数的动态规划)。f[i][j]表示i个孩子分集合为j的零食包的最小不公平程度 答案为f[k][1 << n-1],使用二进制数来表示零食包集合,然后我们枚举i和j即可,难点在于这里的j是用二进制是表示的,我们需要写清楚如何从一个二进制状态转移到另一个二进制状态,具体可以看代码,主要思路就是定义好状态,然后枚举二进制集合。

2817. 限制条件下元素之间的最小绝对差;2305. 公平分发饼干;878. 第 N 个神奇数字_第2张图片

878. 第 N 个神奇数字

核心思想:二分法。对于一个数x,如果它包含的神奇数字大于等于n,那么我们把它减少,利用二分法找出答案。关键在于如何判断一个数x中包含多少个神奇数字,这里有点数学技巧,借用灵神的例子,25//4 = 6,25//6 = 4,25//12 = 2,6+4-2=8即是神奇数字的个数,这里相当于直接给出了一个结论。

2817. 限制条件下元素之间的最小绝对差;2305. 公平分发饼干;878. 第 N 个神奇数字_第3张图片

你可能感兴趣的:(python,算法)