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

内容

一、最大连续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
    评论
好的,关于力扣刷题C++常用操作,我可以给你一些常见的操作和技巧: 1. 使用 STL 容器和算法库:STL(Standard Template Library)是 C++ 标准库中的一个重要组成部分,包含了许多常用的容器和算法。在力扣刷题中,使用 STL 可以大大提高代码的效率和可读性。例如,vector 可以用来存储动态数组,sort 可以用来排序等等。 2. 使用 auto 关键字:auto 关键字可以自动推导变量类型,可以减少代码量和提高可读性。例如,auto x = 1; 可以自动推导出 x 的类型为 int。 3. 使用 lambda 表达式:lambda 表达式是 C++11 中引入的一种匿名函数,可以方便地定义一些简单的函数对象。在力扣刷题中,使用 lambda 表达式可以简化代码,例如在 sort 函数中自定义比较函数。 4. 使用位运算:位运算是一种高效的运算方式,在力扣刷题中经常会用到。例如,左移运算符 << 可以用来计算 2 的幂次方,右移运算符 >> 可以用来除以 2 等等。 5. 使用递归:递归是一种常见的算法思想,在力扣刷题中也经常会用到。例如,二叉树的遍历、链表的反转等等。 6. 使用 STL 中的 priority_queue:priority_queue 是 STL 中的一个容器,可以用来实现堆。在力扣刷题中,使用 priority_queue 可以方便地实现一些需要维护最大值或最小值的算法。 7. 使用 STL 中的 unordered_map:unordered_map 是 STL 中的一个容器,可以用来实现哈希表。在力扣刷题中,使用 unordered_map 可以方便地实现一些需要快速查找和插入的算法。 8. 使用 STL 中的 string:string 是 STL 中的一个容器,可以用来存储字符串。在力扣刷题中,使用 string 可以方便地处理字符串相关的问题。 9. 注意边界条件:在力扣刷题中,边界条件往往是解决问题的关键。需要仔细分析题目,考虑各种边界情况,避免出现错误。 10. 注意时间复杂度:在力扣刷题中,时间复杂度往往是评判代码优劣的重要指标。需要仔细分析算法的时间复杂度,并尽可能优化代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值