力扣刷题第五天--数组篇

内容

一、最大连续1的个数

485.最大连续1的个数

给定一个二进制数组 nums , 计算其中最大连续 1 的个数。

思路一

遍历 把每一段1的个数统计出来 取最大值  

go语言标准库并没有提供直接的max函数,需要自己实现一个

//40ms 6.5MB

func findMaxConsecutiveOnes(nums []int) int {
    var count,maxCount int
    for _,v:=range nums{
        if v==1{
           count++
     
        }else{
            count=0
        }
   maxCount=max(maxCount,count)
    }
   return maxCount
}

func max(a,b int)int{
    if a>b{
        return a
    }
    return b
}
思路二 

快慢指针同向滑动 用res来存储最大连续1的个数,如果当前元素为1,fast右移一位,否则先更新res为fast-slow,然后fast++,最后再令left跟上right,要注意的一种情况是,如果最后一位是1的话,这个思路res就没有更新,所以要在循环外面加上一个res的更新语句  // 28ms 6.5MB

func findMaxConsecutiveOnes(nums []int)int{
   slow, fast,res:=0,0,0
   for fast<len(nums){
       if nums[fast]==1{
           fast++
       }else{
        res=max(res,fast-slow)
        fast++
           slow=fast
           
       }
          res=max(res,fast-slow)
   }
   return res
}
func max(a,b int)int{
    if a>b{
        return a
    }
    return b
}
二、提莫攻击

495.提莫攻击

在《英雄联盟》的世界中,有一个叫 “提莫” 的英雄。他的攻击可以让敌方英雄艾希(编者注:寒冰射手)进入中毒状态。

当提莫攻击艾希,艾希的中毒状态正好持续 duration 秒。

正式地讲,提莫在 t 发起攻击意味着艾希在时间区间 [t, t + duration - 1](含 t 和 t + duration - 1)处于中毒状态。如果提莫在中毒影响结束  再次攻击,中毒状态计时器将会 重置 ,在新的攻击之后,中毒影响将会在 duration 秒后结束。

给你一个 非递减 的整数数组 timeSeries ,其中 timeSeries[i] 表示提莫在 timeSeries[i] 秒时对艾希发起攻击,以及一个表示中毒持续时间的整数 duration 。

返回艾希处于中毒状态的  秒数。

思路一

恢复为未中毒的起始时间,即中毒结束时间,为expired 如果t时刻大于等于expired 加上duration的中毒时间 否则说明还在中毒状态又遭受攻击 t时刻加上持续时间减去上次的结束时间 同时更新本次中毒结束时间 t时刻加duration 在if语句外更新  //32ms 6.4MB

func findPoisonedDuration(timeSeries []int, duration int) (ans int){
    expired:=0
    for _,v:=range timeSeries{
        if v>=expired{
            ans+=duration
           
        } else{
             ans+=v+duration-expired
        }
         expired=v+duration
    }
      return 
}
思路二

i+1时刻减去i时刻大于中毒持续时间 则每次都是中毒完在被攻击 每次加duration就可以了  ans是一直在变化的  所以每次得加上原先的ans  //28ms 6.4MB

快了几毫秒 但击败了大部分人

func findPoisonedDuration(timeSeries []int, duration int) int {
    ans:=duration
      for i:=0;i<len(timeSeries)-1;i++{
if timeSeries[i+1]-timeSeries[i]>=duration{
      ans+=duration
           
       }else{
             ans+=timeSeries[i+1]-timeSeries[i]
          }
          
      }
      return ans
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值