美文网首页
数组中是否存在5(或n)个连续的位置排序后是连续的

数组中是否存在5(或n)个连续的位置排序后是连续的

作者: 疯狂的冰块 | 来源:发表于2017-06-04 02:12 被阅读35次

一个整数数组,元素取值可能是0~65535中的任意一个数,相同数值不会重复出现;0是例外,可以反复出现。设计一个算法,判断这个数组中的5(n)元素是否连续相邻。需要注意以下4点:

(1)数值允许是乱序的,如 8 7 5 0 6。

(2)0可以通配任意数值,如8 7 5 0 6中的0可以通配成9或者4.

(3)0可以多次出现。

(4)全0算连续,只有一个非0算连续。

思路分析:

如果没有0的存在,要组成连续的数列,最大值和最小值的差距必须是4(n-1);存在0的情况下,只要最大值可最小值的差距小于n-1就可以了,缺失的数值可以用0通配。所以找出数列中非0的最大值和非0的最小值,时间复杂度为O(n)。如果非0最大-非0最小+1<n,即非0最大-非0最小<=n-1,则这n个数值连续相邻。否则,不连续相邻。因此,总体复杂度为O(n)。

这一题是小米的面试题目,我当时的想法是这样的,连续的5个位置中,找到最小的那个num,然后计算(num+4+num)*5/2与相邻的这五个数比较是否相同,如果相同则返回ture,否则false,这个方法和上面的复杂度相同,但是上面的算法更优,因为在同一个函数中找到最小值得同时也可以吧最大值找到。

相关文章

  • 数组中是否存在5(或n)个连续的位置排序后是连续的

    一个整数数组,元素取值可能是0~65535中的任意一个数,相同数值不会重复出现;0是例外,可以反复出现。设计一个算...

  • 8. 动态规划

    1. 最大连续子数组和 求数组中连续的一个或多个子数组的最大和,并记录开始和结束位置 1.1 最大子矩阵和 算法思...

  • LeetCode-128-最长连续序列

    最长连续序列 题目描述:给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续...

  • 滑动窗口算法

    题目:给定数组,获取数组中n个连续元素,最大的和。 ``` function maxSumSub(arr, n) ...

  • 每日一题day7-1550. 存在连续三个奇数的数组

    题目: 给你一个整数数组 arr,请你判断数组中是否存在连续三个元素都是奇数的情况:如果存在,请返回 true ;...

  • LeetCode刷题之路 最长连续序列

    最长连续序列【困难】 给定一个未排序的整数数组,找出最长连续序列的长度。 要求算法的时间复杂度为 O(n)。 示例...

  • LeetCode 128. 最长连续序列 | Python

    128. 最长连续序列 题目 给定一个未排序的整数数组,找出最长连续序列的长度。 要求算法的时间复杂度为 O(n)...

  • 128. 最长连续序列

    128. 最长连续序列 给定一个未排序的整数数组,找出最长连续序列的长度。 要求算法的时间复杂度为 O(n)。 示...

  • Android回看——数组

    数组 数组是一个连续的线性表,是用于储存多个相同类型数据的集合。 它在内存中连续存在,类似于这样: 有限的、连续的...

  • leetcode--128--最长连续序列

    题目:给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 进阶:...

网友评论

      本文标题:数组中是否存在5(或n)个连续的位置排序后是连续的

      本文链接:https://www.haomeiwen.com/subject/rmqvfxtx.html