Arithmetic Subarrays
MediumArrayHash TableSorting
Solution
export function checkArithmeticSubarrays(nums: number[], l: number[], r: number[]): boolean[] {
const minmax = (arr: number[]) => {
let min = Number.MAX_SAFE_INTEGER;
let max = Number.MIN_SAFE_INTEGER;
arr.forEach((num) => {
min = Math.min(num, min);
max = Math.max(num, max);
});
return [min, max];
};
const isArithmetic = (left: number, right: number) => {
if (right - left < 2) {
return true;
}
const s = nums.slice(left, right + 1);
const [min, max] = minmax(s);
if ((max - min) % (s.length - 1) !== 0) {
return false;
}
const set = new Set(s);
const diff = (max - min) / (s.length - 1);
for (let num = min + diff; num < max; num += diff) {
if (!set.has(num)) {
return false;
}
}
return true;
};
return l.map((left, i) => isArithmetic(left, r[i]));
}