C ++中的分割清单
假设我们有一个称为nums的整数列表,我们必须确定是否可以将该列表划分为两个子列表(非空),以使左侧的每个数字严格小于右侧的每个数字。
因此,如果输入类似于[6,4,3,8,10],则输出为true,因为left = [6,4,3]和right = [8,10]
为了解决这个问题,我们将遵循以下步骤-
n:= nums的大小
定义大小为n的数组权
定义一个大小为n的数组
左[0]:=数字[0]
右边的最后一个元素:=数字的最后一个元素
对于初始化i:= 1,当i <n时,更新(将i增加1),-
left [i]:= left [i-1]和nums [i]的最大值
对于初始化i:= n-2,当i> = 0时,更新(将i减1),执行-
right [i]:= right [i + 1]和nums [i]的最小值
对于初始化i:= 0,当i <n-1,更新(将i增加1)时,执行-
返回真
如果left [i] <right [i + 1],则-
返回假
让我们看下面的实现以更好地理解-
示例
#include <bits/stdc++.h>using namespace std;
class Solution {
public:
bool solve(vector<int> &nums) {
int n = nums.size();
vector<int> right(n);
vector<int> left(n);
left[0] = nums[0];
right.back() = nums.back();
for (int i = 1; i < n; i++) {
left[i] = max(left[i - 1], nums[i]);
}
for (int i = n - 2; i >= 0; i--) {
right[i] = min(right[i + 1], nums[i]);
}
for (int i = 0; i < n - 1; i++) {
if (left[i] < right[i + 1])
return true;
}
return false;
}
};
main() {
Solution ob;
vector<int> v = {6,4,3,8,10};
cout << (ob.solve(v));
}
输入项
{6,4,3,8,10}
输出结果
1
以上是 C ++中的分割清单 的全部内容, 来源链接: utcz.com/z/347139.html