775. Global and Local Inversions
T: O(n)
S: O(1)
class Solution {
public boolean isIdealPermutation(int[] nums) {
int n = nums.length;
int min = Integer.MAX_VALUE;
for (int i = n - 3; i >= 0; i--) {
min = Math.min(min, nums[i+2]); // store the most min value
if (nums[i] > min) { // once there is any past i+2, i+3 .... is smaller -> return false;
return false;
}
}
return true;
}
}
/***
global:
0 <= i < j < n
nums[i] > nums[j]
local:
0 <= i < n - 1
nums[i] > nums[i + 1]
so local is part of global
if we can find nums[i] > nums[i + 2, or i +3 , i+4]
means we have more global -> so return false
how to avoid comparing i+2, i+3, i+4... for each i?
->. record most min value in [i+2, i+3, i+4...]
T: O(n)
S: O(1)
*/
Last updated