如果不小心网友来到了这里请网友自动飘走,浪费你们时间表示歉意。该系列博客的目的是:想作为自律工具和朋友一起每天刷几道题作为打卡督促的功能,没有什么可参考学习的东西,也不是刷博客量充大佬的目的
题号:74
//改进一下二分查找
var searchMatrix = function (matrix, target) {
//先用列上找到一个大于target的最近的值
//然后顺着这一行去扫描查找对应target
//row记录大于target的最近的行
let left = 0, right = matrix.length - 1, row = 0
while (left <= right) {
let mid = Math.floor(left + (right - left) / 2)
if (matrix[mid][0] > target) {
right = mid - 1
} else if (matrix[mid][0] < target) {
left = mid + 1
row = mid
} else {
//在列上找到返回,没有找到就要从行搜索
return true
}
}
left = 0, right = matrix[0].length - 1
while (left <= right) {
let mid = Math.floor(left + (right - left) / 2)
if (matrix[row][mid] > target) {
right = mid - 1
} else if (matrix[row][mid] < target) {
left = mid + 1
} else {
return true
}
}
return false
}
//根据下标升序二分查找
var searchMatrix = function (matrix, target) {
let left = 0, right = matrix.length * matrix[0].length - 1
while (left <= right) {
let mid = Math.floor(left + (right - left)/2)
if (matrix[Math.floor(mid / matrix[0].length)][mid % matrix[0].length] > target) {
right = mid - 1
} else if (matrix[Math.floor(mid / matrix[0].length)][mid % matrix[0].length] < target) {
left = mid + 1
} else {
return true
}
}
return false
}
题号:253
//优先队列:最小堆
//要记录会议室正在开会的最小结束时间,下个会议开始的时间小于这个记录的最小时间的话
//此时这个会议室没法复用,会议没结束呢,要新开会议室,如果大于这个记录的最小时间
//那么说明此时要开的会议可以使用这个会议室
var minMeetingRooms = function (intervals) {
let buildHeap = (endTimes) => {
const len = endTimes.length
for (let i = Math.floor(len/2) - 1; i >= 0; i--) {
const left = i * 2 + 1, right = i * 2 + 2
if (right > len - 1) {
//最后一个非叶子节点无右儿子
if (endTimes[i] > endTimes[left]) {
let tmp = endTimes[i]
endTimes[i] = endTimes[left]
endTimes[left] = tmp
}
} else {
let min = left
if (endTimes[left] > endTimes[right]) {
min = right
}
if (endTimes[i] > endTimes[min]) {
//开始交换
let tmp = endTimes[i]
endTimes[i] = endTimes[min]
endTimes[min] = tmp
}
}
}
}
//按开始时间排序
intervals.sort((a,b) => {
return a[0] - b[0]
})
let minHeap = []
for (let i = 0; i < intervals.length; i++) {
if (minHeap.length == 0) {
minHeap.push(intervals[i][1])
} else {
//会议结束时间
let min = minHeap[0]
if (min <= intervals[i][0]) {
//此时有腾出来的会议室
minHeap.shift()
minHeap.push(intervals[i][1])
} else {
minHeap.push(intervals[i][1])
}
}
buildHeap(minHeap)
}
return minHeap.length
};