当前位置: 首页 > news >正文

在线做qq空间的网站网站托管维护

在线做qq空间的网站,网站托管维护,合肥做网站价格,有什么做户外活动的网站吗原题:128. 最长连续序列 题解: 官方题解:. - 力扣(LeetCode)题解,最长连续序列 :哈希表 官方解题思路是先去重,然后判断模板长度的数值是否存在,存在就刷新&#xff0c…

原题:128. 最长连续序列

题解:

官方题解:. - 力扣(LeetCode)题解,最长连续序列 :哈希表

官方解题思路是先去重,然后判断模板长度的数值是否存在,存在就刷新,最终找到最大值。

这里我自己研究了下,实际也是暴力解法。纯暴力解法会超时,这里利用了二分法查找的理念

  • 首先去重
  • 然后排序
  • 固定begin,然后找最大的end,返回max=end-begin+1使用二分法理念进行查找
  • 依次遍历,在end-begin<curmax已经找到的最大值,返回curmax +1

自己尝试了下,部分通过,有些边界值不太好控制,而且输入里面有负数,也不太好计算。

还有一种解题方法,就是在官方题解上做个变化,

  • 首先去重
  • 然后排序
  • 依次遍历,找到满足nums[i + 1] = nums[i] + 1的最长子数组,返回其长度。

代码:

func longestConsecutive(nums []int) int {// 如果数组为空,或者只有一个元素,直接返回数组长度if len(nums) <= 1 {return len(nums)}// 去重numSet := map[int]bool{}for _, num := range nums {numSet[num] = true}// 排序numTemp := make([]int, 0)for num := range numSet {numTemp = append(numTemp, num)}sort.Ints(numTemp)// fmt.Printf("numTemp %v\n", numTemp)// 暴力解法longestStreak := 0for begin := range numTemp {// 当剩余的个数,小于当前最大长度,则后面不可能有满足条件的更大的值,返回if begin+longestStreak > len(numTemp) {return longestStreak + 1}temp := BinarySearchMatch(numTemp, begin, longestStreak)if longestStreak < temp {longestStreak = temp}}return longestStreak + 1
}func BinarySearchMatch(numTemp []int, begin, cur int) int {longestStreak := cur// 当前最大可用差值curMaxDiff := len(numTemp) - begin - 1// 使用二分法的理念,查询满足条件的数据for end := len(numTemp) - 1; end > begin; {// fmt.Printf("begin %v, end %v, curMaxDiff %v\n", begin, end, curMaxDiff)// 索引差值超过最大值,返回,end超过数组范围,返回if curMaxDiff >= len(numTemp) || end >= len(numTemp) {break}// 差值为0时,有可能会遗漏一个,判断end的下一个是否满足条件if curMaxDiff == 0 {if end < len(numTemp)-1 && numTemp[end+1]-numTemp[begin] == end+1-begin {longestStreak = end + 1 - begin}if end > begin && numTemp[end-1]-numTemp[begin] == end-1-begin {longestStreak = end - 1 - begin}if end > begin && numTemp[end]-numTemp[begin] == end-begin {longestStreak = end - begin}break}// 数值差值valDiff := numTemp[end] - numTemp[begin]// 索引差值indexDiff := end - begin// 二分法找到合适的索引end// 索引差值 < 数值差值,数值太大了,中间有不连续的,往前移动curMaxDiff/2if valDiff > indexDiff && indexDiff != 0 {curMaxDiff = curMaxDiff / 2end = end - curMaxDiffcontinue}// 索引差值 > 数值差值,这种不可能存在,因为已经去重了// 索引差值 = 数值差值,后面可能还有满足条件的,继续找if valDiff == indexDiff {// 刷新最大值if longestStreak > valDiff {break}longestStreak = valDiff// end后移curMaxDiff/2curMaxDiff = curMaxDiff / 2end = end + curMaxDiffcontinue}}return longestStreak
}

第二种方法

func longestConsecutive(nums []int) int {// 如果数组为空,或者只有一个元素,直接返回数组长度if len(nums) <= 1 {return len(nums)}// 去重numSet := map[int]bool{}for _, num := range nums {numSet[num] = true}// 排序numTemp := make([]int, 0)for num := range numSet {numTemp = append(numTemp, num)}sort.Ints(numTemp)//fmt.Printf("numTemp %v\n", numTemp)// 暴力解法longestStreak := 0for num := range numTemp {if num < len(numTemp)-1 && numTemp[num]+1 == numTemp[num+1] {currentNum := numcurrentStreak := 1for currentNum < len(numTemp)-1 && numTemp[currentNum]+1 == numTemp[currentNum+1] {currentNum++currentStreak++}if longestStreak < currentStreak {longestStreak = currentStreak}}}return longestStreak
}

http://www.ritt.cn/news/17607.html

相关文章:

  • 自己做网站教学视频教程seo免费推广
  • 咋样做网站搭建网站的步骤和顺序
  • 最好科技广州网站建设微信scrm
  • 好知网做网站百度人工服务24小时电话
  • 营销型网站建设818gx网球排名即时最新排名
  • 建筑公司电话号码哪里有整站优化
  • 广州建站网站前十名app推广项目
  • 做网站买了域名之后临沂头条新闻今日头条
  • 做一个网站flash收多少钱苏州关键词优化搜索排名
  • seo网站排名优化服务seo网络优化是做什么的
  • 贵州人才网最新招聘建筑类广州seo外包多少钱
  • 温州网站推广驭明苏州网站制作推广
  • 西安集团网站建设磁力天堂
  • wordpress 学习群惠州市seo广告优化营销工具
  • 怎么做网站反向链接百度地图导航2021最新版
  • web课程设计网站模版报个计算机培训班多少钱
  • 垂直b2b电子商务网站有哪些注册百度账号免费
  • 网站建设发展前景一个新手如何推销产品
  • 怎么推广自己的物流公司网站如何做优化推广
  • 2008如何添加iis做网站关键词分类工具
  • Java除了做网站开发哈能做啥网站推广模式
  • 接单做网站的百度竞价推广方案的制定
  • 乐清网站优化推广杭州百度首页优化
  • 怎么用node做网站怎么快速优化关键词
  • 外贸经济平台代销到哪里买苏州seo关键词优化价格
  • 视觉差 网站免费观看行情软件网站下载
  • wordpress多站批量发布手游推广平台有哪些
  • 深圳专业做网站建网站域名购买哪个网站好
  • 深圳外贸招聘效果好的关键词如何优化
  • php教育视频网站开发百度软件优化排名