判断正整数是否连续有什么好办法

狐狸小十 2020-01-14 01:12:16
7个数判断是否连续,以及最大的连续个数
...全文
995 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_46207096 2020-01-18
  • 打赏
  • 举报
回复
首先连续不重复,array 到set,最终长度小于7返回false,等于7继续,对数组升序排序,最小值+6=最大值
qq_36481015 2020-01-17
  • 打赏
  • 举报
回复
直接做个排序完事了
tanta 2020-01-17
  • 打赏
  • 举报
回复
引用 37 楼 qq_36481015 的回复:
直接做个排序完事了

===========================
连续7个数字,排序有什么用?而且时间复杂度高,快速排序是O(nlogn)吧。
zj_zwl 2020-01-16
  • 打赏
  • 举报
回复
最大数-最小数+1 看是否=数字个数
tanta 2020-01-16
  • 打赏
  • 举报
回复
引用 27 楼 nice_cxf 的回复:
给7个从0-12的数,然后判断是否连续?
这个还算简单吧
加2的n-1求和就行,比如12还是加12,3的话加4,4的话加8,13的话加4096
最后求和,如果是255(1+2+4+8+。。。128)的1,2,4,8,16等2的指数倍,就是连续的,否则不连续


===================================================
基本正确。但应该采用位运算。
还有,给定的不一定是0-12,所以,在这之前,应该有个取余操作,然后,取余后的数对应的bit位检测及设置,判断也不应该用加法,而是用与操作,可以一次搞定。
还需要结合滑动窗口。。。
觉海迷津 2020-01-16
  • 打赏
  • 举报
回复
3楼说的对,先排序再判断
千梦一生 2020-01-15
  • 打赏
  • 举报
回复
引用 27 楼 nice_cxf 的回复:
给7个从0-12的数,然后判断是否连续?
这个还算简单吧
加2的n-1求和就行,比如12还是加12,3的话加4,4的话加8,13的话加4096
最后求和,如果是255(1+2+4+8+。。。128)的1,2,4,8,16等2的指数倍,就是连续的,否则不连续

很妙的想法。
nice_cxf 2020-01-15
  • 打赏
  • 举报
回复
给7个从0-12的数,然后判断是否连续? 这个还算简单吧 加2的n-1求和就行,比如12还是加12,3的话加4,4的话加8,13的话加4096 最后求和,如果是255(1+2+4+8+。。。128)的1,2,4,8,16等2的指数倍,就是连续的,否则不连续
hahahaapp 2020-01-15
  • 打赏
  • 举报
回复
循环一遍,时间为N,混一个积分
阿蒙Amon 2020-01-15
  • 打赏
  • 举报
回复
27楼,正确算法。求出最小值,算出应该的和,然后序列求和,比较两个和,就OK
weixin_46198489 2020-01-15
  • 打赏
  • 举报
回复
高手真多啊@学习了……
BoomHusky 2020-01-15
  • 打赏
  • 举报
回复
sort一下排序 ,然后遍历判断 感觉太low了。。。。
weixin_42211717 2020-01-15
  • 打赏
  • 举报
回复
不知道积分到哪里弄。。唉!
runjimmy 2020-01-15
  • 打赏
  • 举报
回复
都是高手,学习了
真相重于对错 2020-01-15
  • 打赏
  • 举报
回复
不上规模谈不上算法.....
  • 打赏
  • 举报
回复
本人想问问大神们,谁能告诉我,黄金宝,三生公司,谢谢老师
寻开心 2020-01-14
  • 打赏
  • 举报
回复
还没有说升序还是降序呢

循环一遍应该可以出结果的
int flag = 0; //是否已经开始计数
int step ; // 1表示升序, -1表示降序
int maxL = 1; // 表示当前最长的连续序列
int curL=0
循环
如果flag是0, 表示还没有开始
如果没有下一个
结束,输出maxL
如果下一个比当前大1
flag=1, step=1, curL=1;
如果下一个比当前的小1
flag=1, step=-1 curL=1;
其他
continue
如果flag是1,表示已经开始了(而且上一个和当前这个是连续的)
curL++
如果没有下一个
curL和maxL输出最大作为结果
如果下一个 = 当前的 + step
继续
否则
maxL和curL比较,更新maxL
如果下一个 = 当前的-step
curL = 1
step = - step
否则
flag=0

大概就这么个思路,应该可以一遍搞定
大米粥哥哥 2020-01-14
  • 打赏
  • 举报
回复
有好方法 用数组存储 然后循环遍历进行判断 设置一个变量存储最大连续个数即可
  • 打赏
  • 举报
回复
引用 6 楼 狐狸小十的回复:
[quote=引用 1 楼 智者知已应修善业 的回复:]
例如?弄个说明的例子出来.判断连续无非就是差1这样的作个记录为判断依据.

就是判断扑克有没有龙,因为数比较小就没遍历数组,而是循环了13次看断没断
我猜想这里有没有什么数学规律,可以套用公式,减少循环[/quote] 可不可以先排序,看看有没有重复,没有重复看最大与最小值差不差六
qq_41176029 2020-01-14
  • 打赏
  • 举报
回复
挨个比较大小呗
加载更多回复(16)

64,643

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧