部分数组排序-排序

 

输入: [1,2,4,7,10,11,7,12,6,7,16,18,19]
输出: [3,9]

思路 从右往左找第一个逆序对,从做到要找第一个逆序对 找出坐标

public int[] subSort(int[] nums) {
if (nums.length == 0) return new int[] { -1, -1 };

// 从左扫描到右寻找逆序对(正序:逐渐变大)
  int max = nums[0];
// 用来记录最右的那个逆序对位置
  int r = -1;
  for (int i = 1; i < nums.length; i++) {
    if (nums[i] >= max) {
    max = nums[i];
  } else {
    r = i;
  }
}

// 提前结束
  if (r == -1) return new int[] { -1, -1 };

// 从右扫描到左寻找逆序对(正序:逐渐变小)
  int min = nums[nums.length - 1];
// 用来记录最左的那个逆序对位置
  int l = -1;
  for (int i = nums.length - 2; i >= 0; i--) {
   if (nums[i] <= min) {
    min = nums[i];
  } else {
    l = i;
  }
}

return new int[] { l, r };
}

posted @ 2021-06-26 16:25  syh-918  阅读(92)  评论(0)    收藏  举报