直线滑行能够移除多少个箭头

题目描述:

在游戏口袋妖怪中,有时会碰到这样的关卡:在地面上有一些箭头,当你踩上这个箭头时你就会被迫按箭头指示的方向传送。现在你的面前有一行由这样的箭头组成的装置,每个箭头都是指向左或者指向右的,如: img

你可以从任意的位置进入这个装置,当你踏上某个格子后,就会被按该格子箭头指示的方向传送,然后该格子的箭头就会消失。你会一直按这个方向前进直到碰到另一个有箭头的格子,然后你的前进方向会改为该格子的箭头方向,同时该格子的箭头也会消失。当你往一个方向前进但前面没有包含箭头的格子时,你就会被传送出这个装置。在上图中,如果你一开始进入第2个格子(从左往右),你会按如下过程移动:1. 向右移动并移除第2个格子的箭头;2. 向左移动并移除第3个格子的箭头;3. 向右移动并移除第1个格子的箭头;4. 向右移动并移除第4个格子的箭头;5. 向左移动并移除第5个格子的箭头;6. 移出装置。请你计算你最多能够移除多少个箭头。

输入描述

第一行包含一个整数n,表示格子的个数。1≤n≤105

第二行包含一个由’>’和’<’构成的长度为n的字符串。

输出描述

输出对应的答案。

样例输入

7
>><><<<

样例输出

7

提示

Input Sample 2
7
<<><<>>
Output Sample 2
5

题目来自于:https://www.acmcoder.com/#/practice/code

计算出来,用作跟程序结果对比
['>', '>', '<', '>', '<', '<', '<']
0   3
1   5
2   6
3   7
4   7
5   6
6   4

1、首先要循环arr.length次,内计算从每个位置能够移除的箭头数

2、从 j= i 位置开始移除,每经过一个位置count+1,然后把该项删除,挪动 j 位置

3、在count+1和删除的过程中还需要做判断进行其他操作

  • 若当前位置是 ‘<’ 时,
    当前位置是首位,则 count +1 跳出循环结束
    否则删除当前位置数据, count +1 ,并往左移一个位置,即 j-1
  • 若当前位置是 ‘>’ 时,
    当前位置是首位,则 count +1 跳出循环结束
    否则删除当前位置数据, count +1 ,不需移动位置,删除当前位置后,j即为被删位置的后一位

4、整理数据,求出最多移除的箭头。

var printOut = function(str){
  let arr = str.split('')
  let resarr = [] 
  //1、首先要循环`arr.length`次,
  for(i=0;i<arr.length;i++){
    let temparr = [...arr]
    resarr.push([i]);
    let j=i;
    let count = 0;
    while(j<temparr.length){
      let firstson = temparr[j];
      if(firstson==='<'){
         if(j===0){
           j=temparr.length
         }else{
     	   	 temparr.splice(j,1);
           j--;
         }
      }else{
         if(j===temparr.length-1){
            j=temparr.length
         }else{
     	   	  temparr.splice(j,1);
         }
      }
      count++;
    } 
    resarr[i].push(count)
  }
  resarr.forEach(item=>{
    
  })
  console.log(resarr)
  //4、整理数据,求出最多移除的箭头。
  let maxlength = 0
  resarr.forEach(item=>{
     maxlength = item[1]>maxlength ? item[1] : maxlength
  })
  console.log(maxlength)
}
printOut('>><><<<')

结果:

//resarr
(7) [Array(2), Array(2), Array(2), Array(2), Array(2), Array(2), Array(2)]
0: (2) [0, 3]
1: (2) [1, 5]
2: (2) [2, 6]
3: (2) [3, 7]
4: (2) [4, 7]
5: (2) [5, 6]
6: (2) [6, 4]
length: 7
//maxlength
7
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值