返回介绍

solution / 0700-0799 / 0768.Max Chunks To Make Sorted II / README_EN

发布于 2024-06-17 01:03:34 字数 4314 浏览 0 评论 0 收藏 0

768. Max Chunks To Make Sorted II

中文文档

Description

You are given an integer array arr.

We split arr into some number of chunks (i.e., partitions), and individually sort each chunk. After concatenating them, the result should equal the sorted array.

Return _the largest number of chunks we can make to sort the array_.

 

Example 1:

Input: arr = [5,4,3,2,1]
Output: 1
Explanation:
Splitting into two or more chunks will not return the required result.
For example, splitting into [5, 4], [3, 2, 1] will result in [4, 5, 1, 2, 3], which isn't sorted.

Example 2:

Input: arr = [2,1,3,4,4]
Output: 4
Explanation:
We can split into two chunks, such as [2, 1], [3, 4, 4].
However, splitting into [2, 1], [3], [4], [4] is the highest number of chunks possible.

 

Constraints:

  • 1 <= arr.length <= 2000
  • 0 <= arr[i] <= 108

Solutions

Solution 1

class Solution:
  def maxChunksToSorted(self, arr: List[int]) -> int:
    stk = []
    for v in arr:
      if not stk or v >= stk[-1]:
        stk.append(v)
      else:
        mx = stk.pop()
        while stk and stk[-1] > v:
          stk.pop()
        stk.append(mx)
    return len(stk)
class Solution {
  public int maxChunksToSorted(int[] arr) {
    Deque<Integer> stk = new ArrayDeque<>();
    for (int v : arr) {
      if (stk.isEmpty() || stk.peek() <= v) {
        stk.push(v);
      } else {
        int mx = stk.pop();
        while (!stk.isEmpty() && stk.peek() > v) {
          stk.pop();
        }
        stk.push(mx);
      }
    }
    return stk.size();
  }
}
class Solution {
public:
  int maxChunksToSorted(vector<int>& arr) {
    stack<int> stk;
    for (int& v : arr) {
      if (stk.empty() || stk.top() <= v)
        stk.push(v);
      else {
        int mx = stk.top();
        stk.pop();
        while (!stk.empty() && stk.top() > v) stk.pop();
        stk.push(mx);
      }
    }
    return stk.size();
  }
};
func maxChunksToSorted(arr []int) int {
  var stk []int
  for _, v := range arr {
    if len(stk) == 0 || stk[len(stk)-1] <= v {
      stk = append(stk, v)
    } else {
      mx := stk[len(stk)-1]
      stk = stk[:len(stk)-1]
      for len(stk) > 0 && stk[len(stk)-1] > v {
        stk = stk[:len(stk)-1]
      }
      stk = append(stk, mx)
    }
  }
  return len(stk)
}
function maxChunksToSorted(arr: number[]): number {
  const stack = [];
  for (const num of arr) {
    if (stack.length !== 0 && num < stack[stack.length - 1]) {
      const max = stack.pop();
      while (stack.length !== 0 && num < stack[stack.length - 1]) {
        stack.pop();
      }
      stack.push(max);
    } else {
      stack.push(num);
    }
  }
  return stack.length;
}
impl Solution {
  pub fn max_chunks_to_sorted(arr: Vec<i32>) -> i32 {
    let mut stack = vec![];
    for num in arr.iter() {
      if !stack.is_empty() && num < stack.last().unwrap() {
        let max = stack.pop().unwrap();
        while !stack.is_empty() && num < stack.last().unwrap() {
          stack.pop();
        }
        stack.push(max);
      } else {
        stack.push(*num);
      }
    }
    stack.len() as i32
  }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文