当前位置:  首页>> 技术小册>> 数据结构与算法(中)

难度:
Hard

题意:

  1. 给定一个数组,求最多能够将数组分成多少段,使得每段排序之后连接起来,是一个有序数组

思路:

  • 显而易见,数据能否分的条件是,分出来的左边数组的最大值不大于比右边数组的最小值
  • 只需要扫描一下,先把最大值和最小值数组预处理出来,然后遍历就可以得出结果

解法:

  1. class Solution {
  2. public int maxChunksToSorted(int[] arr) {
  3. int[] min = new int[arr.length];
  4. int[] max = new int[arr.length];
  5. max[0] = arr[0];
  6. for (int i = 1;i < arr.length;i++) {
  7. max[i] = Math.max(arr[i], max[i - 1]);
  8. }
  9. min[arr.length - 1] = arr[arr.length - 1];
  10. for (int i = arr.length - 2;i >= 0;i--) {
  11. min[i] = Math.min(arr[i], min[i + 1]);
  12. }
  13. int ret = 1;
  14. for (int i = 0;i + 1 < arr.length;i++) {
  15. if (max[i] <= min[i + 1]) {
  16. ret++;
  17. }
  18. }
  19. return ret;
  20. }
  21. }

该分类下的相关小册推荐: