5月13

算法:
410 与 1011 为同一二分查找题板
思路: 二者均为求数组分割为连续子数组后,多个连续子数组之和的最小值,连续子数组数已给出。
二分:左边界即数组的最大值 右边界为数组累计和+1 target为数组分割个数
搜索的值为划分区间个数:记个数为F(x),x为子数组的最大值。则可以得出以下格式:

1
2
3
4
5
6
7
8
9
10
11
12
13
f(int[] nums, int x) {
int count = 0;
for (int i =0; i < nums.length;) {
int cap = x;
while (i < nums.length) {
if (nums[i] > cap) break;
else cap -= nums[i];
i ++;
}
count ++;
}
return count;
}

二叉搜索左侧边界值(左闭右开)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int find (int[] nums, int target) {
int left = 0; int right = nums.length;
while (left < right) {
int mid = left + (right-left)/2;
if (mid == target) {
right = mid;
} else if (mid > target) {
right = mid;
} else if (mid < target) {
left = mid +1;
}
}

return left;
}

k个一组反转链表 25.
思路:先获取链表长度,将链表按k个一组先进行组内反转,再进行组件反转。


5月13
http://bloomivy.github.io/2025/05/13/5月13/
作者
Bloom
发布于
2025年5月13日
许可协议