56.合并区间
1、把区间按照左端点从小到大排序
2、将第一个区间加入 merged 数组中,并按顺序依次考虑之后的每个区间:
3、重点:
a)如果当前区间的左端点 > merged的右端点,那么它们不会重合,直接将这个区间加入数组 merged 的末尾;
b)如果当前区间的左端点 < merged的右端点,那么这两个区间会重合,用当前区间的右端点更新数组 merged 中最后一个区间的右端点,将其置为二者的较大值。
var merge = function(intervals) {
let merged = []
// let n = intervals.length;
// for (let i = 0; i < n - 1; i++) {
// for (let j = 0; j < n - 1 - i; j++) {
// if (intervals[j][0] > intervals[j + 1][0]) {
// // 交换区间
// let temp = intervals[j];
// intervals[j] = intervals[j + 1];
// intervals[j + 1] = temp;
// }
// }
// }
intervals.sort((a, b) => a[0] - b[0]);
for(let i = 0; i < intervals.length; i++){
let len = merged.length;
if(!merged.length ||intervals[i][0] > merged[len - 1][1]){
// 如果 merged 为空或者当前区间的左端点大于 merged 最后一个区间的右端点,直接添加
merged.push(intervals[i])
}else{
// 若 当前区间左端点小于merged最后一个区间的右端点,更新merged的右端点为当前区间的右端点
merged[len - 1][1] = Math.max(merged[len - 1][1], intervals[i][1]);
}
}
return merged;
};
189. 轮转数组
方法一:
1、遍历原数组,将原数组下标为 i 的元素放至新数组下标为 (i+k)modn 的位置
2、将新数组拷贝至原数组
var rotate = function(nums, k) {
let n = nums.length;
let newArr = new Array(n);
for(let i = 0; i < n; i++){
newArr[(i + k) % n] = nums[i];
}
for(let i = 0; i < n; i++){
nums[i] = newArr[i];
}
};
方法二: