Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Split List in C++: ตรวจสอบว่าแบ่ง Array ได้ 2 ส่วนที่ทุกค่าด้านซ้าย < ด้านขวา

กำหนด array nums ต้องตรวจสอบว่าแบ่งเป็น 2 ส่วน (ทั้งคู่ไม่ว่าง) ได้หรือไม่ ที่ทุกค่าในส่วนซ้าย น้อยกว่า ทุกค่าในส่วนขวา

ตัวอย่าง: [6,4,3,8,10] → true (ซ้าย: [6,4,3], ขวา: [8,10])

วิธีแก้ปัญหา (Prefix Max / Suffix Min)

  1. สร้าง left[i] = max ของ nums[0..i]
  2. สร้าง right[i] = min ของ nums[i..n-1]
  3. ตรวจสอบว่ามี 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