360笔试 探险钥匙开门
小X在一片大陆上探险,有一天他发现了一个洞穴,洞穴里面有n道门,打开每道门都需要对应的钥匙,编号为i的钥匙能用于打开第i道门,而且只有在打开了第i (i≥1)道门之后,才能打开第i+1道门,一开始只能打开第1道门。幸运的是,小X在外面探索的途中,每天都能发现一把能打开这n道门中其中一道门的钥匙,每天找完钥匙后他都会去打开所有能打开的门。现在给出他每天找到的钥匙编号,请问每道门分别在哪一天被打开。
输入:
第一行包含一个正整数n ,表示门的数量。
接下来一行包含n个正整数a1,a2,...,an,其中ai表示第i天他找到的钥匙的编号,能够打开第ai道门,数据保证a1-an为1-n的一个排列。
输出:
输出一行n个数s1,s2,...,sn,其中si表示第i道门在第si天被打开。
样例:
输入:
5
5 3 1 2 4
输出:
3 4 4 5 5
解法:按照题意模拟即可:先在数组内记下已经获得过钥匙的门,利用指针flag记录目前所在的位置,每天不断开门(每开一个门,输出一个数)直到不能开为止。
function tanxian(n, a) { let res = [] let doors = new Array(n+1).fill(0) //创建一个6位的全是0的门的集合,表示一开始都没钥匙 console.log(doors) let flag = 1 //待开的第flag道门 for(let i=0; i<n; i++){ //i是天数 doors[a[i]] = 1 //第i天找到钥匙,就将第a[i]道门置1 while(doors[flag] == 1 && flag <= n){ // res.push(i+1) flag++ } } return res } let n = 5 let a = [5,3,1,2,4] console.log(tanxian(n,a))