กำหนด array nums ต้องตรวจสอบว่าแบ่งเป็น 2 ส่วน (ทั้งคู่ไม่ว่าง) ได้หรือไม่ ที่ทุกค่าในส่วนซ้าย น้อยกว่า ทุกค่าในส่วนขวา
ตัวอย่าง: [6,4,3,8,10] → true (ซ้าย: [6,4,3], ขวา: [8,10])
วิธีแก้ปัญหา (Prefix Max / Suffix Min)
- สร้าง
left[i]= max ของnums[0..i] - สร้าง
right[i]= min ของnums[i..n-1] - ตรวจสอบว่ามี
iที่left[i] < right[i+1]หรือไม่
ตัวอย่างโค้ด C++
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
bool solve(vector<int>& nums) {
int n = nums.size();
vector<int> left(n), right(n);
left[0] = nums[0];
right[n-1] = nums[n-1];
for(int i=1;i=0;i--) right[i] = min(right[i+1], nums[i]);
for(int i=0;i
Input
{6,4,3,8,10}
Output
1