leetcode-253-240-239

leetcode239题240题253题

leetcode239题(滑动窗口最大值):

给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。

返回滑动窗口中的最大值。

示例:

示例

解答:
1
2
3
4
5
6
7
8
9
10
11
var maxSlidingWindow = function(nums, k) {
if(nums.length==0){
return [];
}
var result = [];
for(var i=0;i<=nums.length-k;i++){
var tempArr = nums.slice(i,i+k);
result.push(Math.max.apply(null,tempArr));
}
return result;
};

leetcode240题(搜索二维矩阵2):

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:

每行的元素从左到右升序排列。
每列的元素从上到下升序排列。

示例:

示例

解答:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
var searchMatrix = function(matrix, target) {
if(matrix.length==0||matrix[0].length==0){
return false;
}
var row = matrix.length;
var column = matrix[0].length;
var i = row-1;
var j = 0;
while(i>=0&&j<column){
if(target<matrix[i][j]){
if(i==0){
return false;
}
i--;
}else if(target>matrix[i][j]){
if(j==column-1){
return false;
}
j++;
}else{
return true;
}
}
};

leetcode253题(会议室):

给定一个会议时间安排的数组,每个会议时间都会包括开始和结束的时间 [[s1,e1],[s2,e2],…] (si < ei),为避免会议冲突,同时要考虑充分利用会议室资源,请你计算至少需要多少间会议室,才能满足这些会议安排。

示例:

输入: [[0, 30],[5, 10],[15, 20]]

输出: 2

输入: [[7,10],[2,4]]

输出: 1

解答:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
function interval(s,e){
this.start = s;
this.end = e;
}

var minMeetingRooms = function(intervals) {
var starts = [];
var ends = [];
for(var i=0;i<intervals.length;i++){
starts.push(intervals[i].start);
ends.push(intervals[i].end);
}
starts.sort(compare);
ends.sort(compare);
var i=0;
var j=0;
var activemeetings = 0;
var rooms = 0;
while(i<intervals.length&&j<intervals.length){
if(starts[i]<ends[j]){
activemeetings++;
i++;
}else{
activemeetings--;//因为后面会出现此时的starts[i]小于另外一个ends[j],所以仍然会++
//但是由于其实是不需要++的,所以此处添加一个++
j++;
}
rooms = Math.max(rooms,activemeetings);
}
return rooms;
}
function compare(a,b){
return a-b;
}
console.log(minMeetingRooms([new interval(0,30),new interval(5,10),new interval(15,20)]));
分享到