yangmillstheory
BAN USERfunction merge(intervals1, intervals2) {
const ascendingByStart = []
let i = 0
let j = 0
while (i < intervals1.length || j < intervals2.length) {
if (i === intervals1.length) {
ascendingByStart.push(intervals2[j++])
} else if (j === intervals2.length) {
ascendingByStart.push(intervals1[i++])
} else if (intervals1[i][0] < intervals2[j][0]) {
ascendingByStart.push(intervals1[i++])
} else {
ascendingByStart.push(intervals2[j++])
}
}
const mergedIntervals = []
let start = null
let end = null
for (const interval of ascendingByStart) {
if (start === null && end === null) {
start = interval[0]
end = interval[1]
continue
}
if (start < interval[0] && interval[0] < end) {
end = Math.max(interval[1], end)
} else {
mergedIntervals.push([start, end])
start = interval[0]
end = interval[1]
}
}
if (start !== null && end !== null) {
mergedIntervals.push([start, end])
}
return mergedIntervals
}
// some overlap, no full containment
console.log(merge(
[[3, 11], [17, 25], [58, 73]],
[[6, 18], [40, 47]]
))
// some intervals fully contained in others
console.log(merge(
[[4, 5], [7, 9], [10, 15]],
[[3, 8], [11, 13]]
))
function getSortedSquares(numbers) {
if (!numbers) {
return []
} else if (numbers[0] >= 0) {
return numbers.map(aNumber => aNumber * aNumber)
}
const squares = []
// find the first positive index, guaranteed to be > 0
let j = 0
while (numbers[j] < 0) {
j++
}
let i = j - 1
while (i >= 0 || j < numbers.length) {
if (i < 0) {
squares.push(numbers[j] * numbers[j])
j++
} else if (j === numbers.length) {
squares.push(numbers[i] * numbers[i])
i--
} else if (Math.abs(numbers[i]) < Math.abs(numbers[j])) {
squares.push(numbers[i] * numbers[i])
i--
} else {
squares.push(numbers[j] * numbers[j])
j++
}
}
return squares
}
console.log(getSortedSquares([-4, -2, 1, 3, 5]))
I think this is incorrect in two ways:
- yangmillstheory June 11, 20181. assignment to `rows` and columns` from `lamps` is incorrect (it doesn't matter for the `query` function though since the read usage is consistent with the write usage)
2. assignment to `diagonalsRight` will result in a negative index when x < y