2021-07-01:最长连续序列。一个未排序的arr,找出数字连续的最长序列的长度。输入:[100,4,1,20,3,2,50],输出:4。解释:最长数字连续序列是[1,2,3,4],所以长度是4。
2021-07-01:最长连续序列。一个未排序的arr,找出数字连续的最长序列的长度。输入:[100,4,1,20,3,2,50],输出:4。解释:最长数字连续序列是[1,2,3,4],所以长度是4。
福大大 答案2021-07-01:
连续区间头表,map1[5]=3,是5,6,7。
连续区间尾表,map2[5]=3,是3,4,5。
求map1中的value最大值,就是需要的返回值。
时间复杂度:O(N)。
空间复杂度:O(N)。
代码用golang编写。代码如下:
package main
import "fmt"
func main() {
arr := []int{100, 4, 1, 20, 3, 2, 50}
ret := longestConsecutive(arr)
fmt.Println(ret)
}
func longestConsecutive(nums []int) int {
map0 := make(map[int]int)
ans := 0
for _, num := range nums {
if _, ok := map0[num]; !ok {
map0[num] = 1
preLen := 0
posLen := 0
if _, ok := map0[num-1]; ok {
preLen = map0[num-1]
}
if _, ok := map0[num+1]; ok {
posLen = map0[num+1]
}
all := preLen + posLen + 1
map0[num-preLen] = all
map0[num+posLen] = all
ans = getMax(ans, all)
}
}
return ans
}
func getMax(a int, b int) int {
if a > b {
return a
} else {
return b
}
}
执行结果如下:

2021-07-01:最长连续序列。一个未排序的arr,找出数字连续的最长序列的长度。输入:[100,4,1,20,3,2,50],输出:4。解释:最长数字连续序列是[1,2,3,4],所以长度是4。的更多相关文章
- 【leetcode-03】给定一个字符串,请你找出其中不含有重复字符的最长子串的长度
开个新坑,leetcode上面做题目.下面是题目描述: <!-- 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度. 示例 1: 输入: "abcabcbb" 输出 ...
- 2021.07.17 题解 CF1385E Directing Edges(拓扑排序)
2021.07.17 题解 CF1385E Directing Edges(拓扑排序) CF1385E Directing Edges - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) ...
- [原]Java面试题-输入一个整型数组,找出最大值、最小值,并交换。
[Date]2013-09-19 [Author]wintys (wintys@gmail.com) http://wintys.cnblogs.com [Content]: 1.面试题 输入一个整型 ...
- 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序,比如: input: 1,7,-5,9,-12,15 ans: -5,-12,1,7,9,15 要求时
#include <iostream> using namespace std; void txsort(int* arr, int len) { if (!arr || len == 1 ...
- pojg2744找一个最长的字符串x,使得对于已经给出的字符串中的任意一个y,x或者是y的子串,或者x中的字符反序之后得到的新字符串是y的子串。
http://poj.grids.cn/practice/2744 描述现在有一些由英文字符组成的大小写敏感的字符串,你的任务是找到一个最长的字符串x,使得对于已经给出的字符串中的任意一个y,x或者是 ...
- Java实现 LeetCode 581 最短无序连续子数组(从两遍搜索找两个指针)
581. 最短无序连续子数组 给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序. 你找到的子数组应是最短的,请输出它的长度. 示例 1: 输入: ...
- 使用T-SQL找出执行时间过长的作业
有些时候,有些作业遇到问题执行时间过长,因此我写了一个脚本可以根据历史记录,找出执行时间过长的作业,在监控中就可以及时发现这些作业并尽早解决,代码如下: SELECT sj.name , ...
- hdu1298 T9(手机输入法,每按一个数字,找出出现频率最高的字串,字典树+DFS)
Problem Description A while ago it was quite cumbersome to create a message for the Short Message Se ...
- 一起来刷《剑指Offer》-- 题目一:找出数组中重复的数字(Python多种方法实现)
数组中重复的数字 最近在复习算法和数据结构(基于Python实现),然后看了Python的各种"序列"--比如列表List.元组Tuple和字符串String,后期会写一篇博客介绍 ...
- LeetCode练习3 找出一个字符串中最大不重复子字符串的长度
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...
随机推荐
- 把OSC_IN/OSC_OUT引脚作为GPIO端口PD0/PD1
外部振荡器引脚OSC_IN/OSC_OUT可以用做GPIO的PD0/PD1,通过设置复用重映射和调试I/O配置寄存器(AFIO_MAPR)实现.这个重映射只适用于36. 48和64脚的封装(100脚和 ...
- SDK测试标准
测试分类 具体测试项 测试内容 测试方法 文档测试 接口清单 接口清单是否完整,正确,包含提供给开发者的协议所有字段的定义和解释 人工检查 更新说明 要说明新增,删除的接口定义 Demo示例 显示如何 ...
- 对于如何在IDEA中给Terminal添加git的详解
具体步骤 1.配置本机环境变量 进入到环境变量的设置界面,然后找到下面的Path变量,双击点开: 然后新建一个变量,路径定义到git的目录下面的bin目录下: 2.WIN+R,然后输入cmd,进入终端 ...
- Feign报错:The bean 'xxxxx.FeignClientSpecification' could not be registered.
解决方法: spring: main: allow-bean-definition-overriding: true 参考博客:https://www.cnblogs.com/lifelikeplay ...
- 消息队列RabbitMQ业务场景应用及解决方案
目录 0. 博客参考 1. 背景 2. 技术选型 3. 消息队列的几个常见问题 4. 代码功能开发及测试 4.1 生产者 4.2 消费者 5. 源代码 6.补充:消息的顺序性 0. 博客参考 http ...
- Firefox、Edge下无法使用jQuery的css("margin")、css("padding”)和css("border")获取值
今天遇到了浏览器的迷惑行为,在Edge上使用jQuery的css("margin")获取值,发现获取的是空值,换了Firefox也是如此.看了jquery官方原话,发现如下一段话R ...
- Java 计算两个日期的时间间隔
@Test public void durationTest(){ Temporal begin = LocalDateTime.of(2000,1,1,0,0); Temporal end = Lo ...
- day13-SpringBoot整合MyBatis/Plus
SpringBoot整合MyBatis/Plus 1.SpringBoot整合MyBatis 1.1整合案例 需求:整合SpringBoot和Mybatis,向数据库中查询数据. 项目结构: 1.1. ...
- 桌面应用自动化winappdriver
桌面应用自动化winappdriver 关于winappdriver 介绍 WinAppDriver全称是Windows Application Driver,它提供了一些API,使得用户可以像sel ...
- ACM-学习记录-DP-1
DPL_1_A: Coin Changing Problem 每次均有两种选择,即选择当前的,即为在当前状态+1,否则维持原来的T[j+d[i]] #include<iostream> # ...