标签:开始 pre 颜色 number i++ idt ons var width
房间中有 n 枚灯泡,编号从 1 到 n,自左向右排成一排。最初,所有的灯都是关着的。
在 k 时刻( k 的取值范围是 0 到 n - 1),我们打开 light[k] 这个灯。
灯的颜色要想 变成蓝色 就必须同时满足下面两个条件:
灯处于打开状态。
排在它之前(左侧)的所有灯也都处于打开状态。
请返回能够让 所有开着的 灯都 变成蓝色 的时刻 数目 。
示例 1:

输入:light = [2,1,3,5,4]
输出:3
解释:所有开着的灯都变蓝的时刻分别是 1,2 和 4 。
示例 2:
输入:light = [3,2,4,1,5]
输出:2
解释:所有开着的灯都变蓝的时刻分别是 3 和 4(index-0)。
示例 3:
输入:light = [4,1,2,3]
输出:1
解释:所有开着的灯都变蓝的时刻是 3(index-0)。
第 4 个灯在时刻 3 变蓝。
示例 4:
输入:light = [2,1,4,3,6,5]
输出:3
示例 5:
输入:light = [1,2,3,4,5,6]
输出:6
提示:
n == light.length
1 <= n <= 5 * 10^4
light 是 [1, 2, ..., n] 的一个排列。
/**
* @param {number[]} light
* @return {number}
*/
// 亮灯的个数 == 当前亮灯的最大编号
var numTimesAllBlue = function(light) {
let m =1, cnt =0;
for(let i=0;i<light.length;i++){
m=Math.max(light[i],m);
// 亮灯的个数 = i+1
// m 当前亮灯的最大编号
if(m==i+1)
cnt++;
}
return cnt;
};
/*
// 参观过的标记为true, 什么时候能一顺溜的都是true且 === 亮灯的最大编号
var numTimesAllBlue = function(light) {
let cur = 0, ans = 0, maxi = 0;
let vis = new Array(50000);
light.forEach(x=>{
vis[x] = true;
maxi = Math.max(maxi, x);
while (vis[cur + 1])
++cur;
if (cur == maxi) ++ans;
})
return ans
}
*/
/*
// 亮灯的个数 == 当前亮灯的最大编号
var numTimesAllBlue = function(light) {
let m =1, cnt =0;
for(let i=0;i<light.length;i++){
m=Math.max(light[i],m);
// 亮灯的个数 = i+1
// m 当前亮灯的最大编号
if(m==i+1)
cnt++;
}
return cnt;
};
*/
/**
* 这个当时竞赛的时候怎么搞都超时,关键还是在应用亮灯的最大编号。
// 当时最开始还以为只要左边连续就计数,后来一想还要右边连续,就写了个这,超时
var numTimesAllBlue = function(light) {
// let arr = [];
let res = 0;
let len = light.length;
let ls = new Array(len).fill(0);
let max = -1;
light.forEach((l, i)=>{
if(l-1 >max){
max = l-1
}
ls[l-1] = 1
let flag = true;
let sub = ls.slice(0, l-1);
let sub1 = ls.slice(l-1, max);
// console.log(sub)
if(sub.some(s=>s!==1) || sub1.some(e=>e!==1)){
flag = false;
}
if(flag){
// arr.push(i)
res++
}
// console.log(arr, ‘----‘)
})
return res;
};
*/
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/bulb-switcher-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
标签:开始 pre 颜色 number i++ idt ons var width
原文地址:https://www.cnblogs.com/zhangzs000/p/12442164.html