首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
尤里卡斯特
2018-04-02 15:20
已编辑
华南理工大学 算法工程师
关注
已关注
取消关注
头条面试的算法题,怎么解?
头条面试的时候问的算法题:
给定一个乱序的链表,现在有一个操作:可以把链表任意位置的值移动到链表的最后。求链表排序所需要的最少操作次数。
样例:
假如链表的值为:5 1 2 3 那么最少的操作次数为1,直接把5移到最后即可,输出为1.
再比如 链表值为 5 2 1 3 ,那么应该先把2移到最后,再把3移到最后,再把5移到最后,这样输出的结果为3.
怎么解?
#实习#
#面经#
提示
全部评论
推荐
最新
楼层
DmcDante
上海交通大学 Java
把链表所有值扔到一个最小堆,count计数为0,遍历链表找到和最小堆堆顶元素相等的节点,最小堆出堆,count计数+1,检测当前堆顶是否和下一个节点相等,相等的话重复上述操作,不相等说明链表中从最小节点开始符合全局有序的序列长度为count,需要移动的最小次数是总数n-count 如5 2 1 3 ,第一次堆顶为1,找到链表中1的位置,下一个堆顶元素为2,但是节点的下一个元素为3,不相等,所以最小移动次数为4-1=3,代码中注意下边界条件检测等问题应该就ok
点赞
回复
分享
发布于 2018-04-02 15:23
接下来的路才真正的开始
武汉科技大学 C++
举例:5 4 8 9 1 7 6 2 3 本质上就是找到最小的数,然后从最小的数开始一直到后面的最长有序序列。 首先找到最小数1。1左边的肯定要移动,直接不用管。 5 4 8 9 1 6 7 2 3 从1开始,6大于1,标记f1为5,即已排序的下标;标记f2为5,即为已遍历的下标。 7大于6,标记f1为6,f2为6。 2小于6,标记f1位5,f2为7,且序列变为5 4 8 9 1 2 7 2 3 3大于2,标记f1位6,f2为8,且序列变为5 4 8 9 1 2 3 2 3 最后用标记f1,即最后需要找的序列,减去最小数的下标,即为他的长度,也就是最小的数开始一直到后面的最长有序序列的长度m。所以最后的结果为 N(总长度)-m。
@尤里卡斯特
中间查找比较的时候可以用二分优化下。。
点赞
回复
分享
发布于 2018-04-03 10:17
lzslzslzs
山东农业大学 C++
先遍历一遍找到最小值min1,记录下来。 然后再次遍历,找到min1左边部分的最小值min2。 记录min1右边部分有多少个数大于min2,记为cnt。 最后结果即为 左边部分数量+cnt 时间复杂度为O(n),;使用了3个int(longlong),空间复杂度为常数阶
点赞
回复
分享
发布于 2018-04-03 00:39
接下来的路才真正的开始
武汉科技大学 C++
时间空间要求? 假设 5 4 8 9 1 7 6 3 首先找到排序 1 3 4 5 6 7 8 9 然后和原始数列进行对比发现,从最小数1开始。 发现只有1 3满足要求,即1 3不动, 其他数从小到大依次往后移。 所需移动次数未8-2=6,移动如下: 5 8 9 1 7 6 3 4 8 9 1 7 6 3 4 5 8 9 1 7 3 4 5 6 8 9 1 3 4 5 6 7 9 1 3 4 5 6 7 8 1 3 4 5 6 7 8 9
点赞
回复
分享
发布于 2018-04-02 16:43
山柴贩
浙江大学 Java
https://www.nowcoder.com/questionTerminal/adc291e7e79f452c8b59243a5ce68d3a 和这个题类似的
点赞
回复
分享
发布于 2018-04-02 16:17
anonk
鄂州职业大学 C++
5 -> 1 -> 2 -> 3 提供参考思路,时间复杂度O(n), 空间复杂度O(1) 1. 找链表的最小值,比如1,指针为lo,count=1 2. 找lo前面的最小值为5,查找一次就ok 3. 从lo开始往后找,找lo后面的最小值为2,对比2和5,比前面的最小值5小,count++,lo设置为2,重复第3步 4. 如果第3步中向后遍历的值比5大,可以结束了,答案就是 链表长度-count。
点赞
回复
分享
发布于 2018-04-03 10:21
已删除
你有没有问条件,比如这n个数范围,是范围内随机数,还是1-n,是有重复还是没有重复数字,单链表还是双向链表,条件不同,做法就不同
点赞
回复
分享
发布于 2018-04-02 21:28
=..=
腾讯_天美_研发工程师(准入职)
空间是O(1)应该是有条件的,猜测是数字从1-n连续,其实就是给了你排好序的数组,把链表遍历一遍,记录不需要变的个数count,n-count就行了
点赞
回复
分享
发布于 2018-04-02 19:55
尤里卡斯特
楼主
华南理工大学 算法工程师
头条的算法题,真难!
点赞
回复
分享
发布于 2018-04-02 19:42
加满油go
华南理工大学 算法工程师
我觉得思想可能是首先从最小的数查找,从它开始查看下一个是否是比它大的最小的数,如果是继续寻找,如果不是,1则找到比它大的最小的数把排到最后,然后比他大的都要排一次最后,所以我觉得总次数为:假如前m个数为紧挨升序排列,则最小排列次数为(n-m),n为总个数。
点赞
回复
分享
发布于 2018-04-02 19:00
海量hc
中山大学 算法工程师
双指针?空间复杂度O(1)我也不知道 def f(nums): sortnums = sorted(nums) n = len(nums) i = nums.index(min(nums)) j = 0 if i == n - 1: return n - 1 while i < n and j < n: if nums[i] == sortnums[j]: i = i + 1 j = j + 1 else: i = i + 1 return n - j
点赞
回复
分享
发布于 2018-04-02 18:00
小罐球
浙江大学 算法工程师
//找到从最小值开始的最长有序序列,动规遍历一遍,碰到更小的值归零? int count; int curmin = 0; int dp[N]; for(int i = 0; i < N; i++){ if(a[i] > curmin){ if(a[i] > a[i] - 1){ dp[i] = dp[i - 1] + 1; } else{ dp[i] = dp[i - 1]; } } else{ curmin = i; dp[i] = 0; } } count = N - dp[N-1];
点赞
回复
分享
发布于 2018-04-02 17:30
已删除
一个数前面有比它大的数,那么这个大的数必须移一次 找出所有需要移的数,按从小打到依次往后移 用stack来实现
点赞
回复
分享
发布于 2018-04-02 15:45
Juliiii
中山大学 C++
头条的算法题真是一题比一题惊心
点赞
回复
分享
发布于 2018-04-02 15:13
暂无评论,快来抢首评~
相关推荐
2025-11-29 15:31
复旦大学 Java
日常看一下面经:美团实习一二面面经
3.23 一面1.讲讲字符串常量池,什么时候会创建新的字符串对象,什么时候不会?2.讲讲多态,手撕多态的示例3.Mysql的索引什么情况下会失效?4.讲讲新版本中的Mysql优化器5.讲讲hashmap的底层实现,和hashtable有什么区别?是线程安全的吗?6.讲讲ConcurrentHashMap是如何实现线程安全的7.讲讲ConcurrentHashMap底层树化阈值为什么是8?链表化为什么是6?是10行不行?8.讲讲HTTPS中的SSL/TLS握手流程9.为什么需要使用客户端,服务器随机数配合预主密钥生成最终密钥?不能直接用预主密钥吗?10.讲讲数组和ArrayList的区别11.讲...
点赞
评论
收藏
分享
2025-11-27 18:20
门头沟学院 Java
阿里控股后端日常实习一面面经
手撕: 题目:给定一个只包含数字的字符串 `s`,复原它并返回所有可能的 IP 地址格式。有效 IP 地址规则:- 由四个整数组成,每个整数位于 `0` 到 `255` 之间。- 整数不能含有前导 `0`(例如 `01` 不合法)。- 整数之间用 `'.'` 分隔场景题:1.讲一下bi平台的业务流程2.限流的底层算法3.什么是令牌桶限流?4.多级缓存体系是怎么实现的?5.权限校验如何设计?(我回答的是使用Spring AOP实现了一个拦截器)6.Spring AOP的底层是如何实现的?7.Java并发编程介绍一下?8.并发编程的底层是如何实现的?9.JVM提供的默认线程池都有什么?
点赞
评论
收藏
分享
2025-12-04 09:36
复旦大学 Java
Redis刷题题库
1.Redis为什么快? 基于内存操作:Redis的绝大部分操作在内存里就可以实现,数据也存在内存中,与传统的磁盘文件操作相比减少了IO,提高了操作的速度。高效的数据结构:Redis有专门设计了STRING、LIST、HASH等高效的数据结构,依赖各种数据结构提升了读写的效率。采用单线程:单线程操作省去了上下文切换带来的开销和CPU的消耗,同时不存在资源竞争,避免了死锁现象的发生。I/O多路复用:采用I/O多路复用机制同时监听多个Socket,根据Socket上的事件来选择对应的事件处理器进行处理。2.为什么Redis是单线程?单线程指的是:网络请求模块使用单线程进行处理,其他模块仍用多个线程...
点赞
评论
收藏
分享
2025-12-12 20:46
已编辑
门头沟学院 Java
石家庄 Java开发 小厂线上面经
Q.自我介绍Q.你上线的项目是自己从零开发的吗Q.谈谈你的项目经历,是个人开发还是团队合作Q.数据加密是怎么做的Q.如何预防恶意攻击的Q.你在项目中遇到的实际问题,怎么解决的Q.你的项目的商业价值体现在哪Q.在你学的这些技术中,哪些能带来有商业价值Q.前端掌握程度Q.了解网络安全吗Q.你倾向于哪种模式,个人开发还是团队合作Q.我看你能力和逻辑都很好,为什么不去像北京这样一线城市深造呢Q.用过ai编程工具吗Q.你认为如何判断一个ai是否好用Q.你什么时候确立职业目标的Q.现在大学生普遍有个现象,一股脑扎进考公考研大队,你对此看法Q.我们现在要设计一个企业的管理系统,你有什么实现思路吗Q.还有什么想问我们的Q.你的期望薪资还有一些忘记了,没问八股,问了很多项目相关的
查看15道真题和解析
点赞
评论
收藏
分享
2025-11-23 20:54
复旦大学 Java
大厂面试常见场景题,看看有没有你遇到过的?
TrackStar9:
场景真是一生之敌
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
你会和mentor进行deeptalk吗?
2974
2
...
双非本2025秋招总结:65w+SSP三选一,最终还是“有鹅选鹅”|附面试心路历程
2253
3
...
学院本 末 211 硕勇闯 java 后端实习美团 oc 逆袭指南
1606
4
...
牛客运营们,我保证这是我最后一次消费烤肠了!
1430
5
...
27届学院本一段中厂一段中大厂实习,简历求锐评
1010
6
...
元旦前被裁员了
850
7
...
我的牛客年度报告
736
8
...
实习两周遭劝退,隔天就招新人,合理吗?
717
9
...
2025年牛客年度作者丨颁奖典礼✨
701
10
...
27前端已没招
701
创作者周榜
更多
正在热议
更多
#
实习没人带,苟住还是跑路?
#
16734次浏览
313人参与
#
AI时代,哪些岗位最容易被淘汰
#
25581次浏览
217人参与
#
我们是不是被“优绩主义”绑架了?
#
11799次浏览
322人参与
#
秋招被确诊为……
#
280077次浏览
1587人参与
#
牛客2025仙途报告
#
47803次浏览
527人参与
#
每个月的工资都是怎么分配的?
#
81536次浏览
662人参与
#
字节出了豆包coding模型
#
8239次浏览
70人参与
#
对2025年忏悔
#
7974次浏览
153人参与
#
春招前还要继续实习吗?
#
9811次浏览
112人参与
#
为了秋招你都做了哪些准备?
#
30021次浏览
528人参与
#
离家近房租贵VS离家远但房租低,怎么选
#
14234次浏览
132人参与
#
2025秋招体验点评
#
86328次浏览
719人参与
#
非技术2024笔面经
#
452419次浏览
4920人参与
#
一人说一家双休的公司
#
11447次浏览
128人参与
#
牛友的国庆旅行碎片
#
26525次浏览
128人参与
#
我的第一个1024节
#
17145次浏览
251人参与
#
职场新人生存指南
#
492250次浏览
9518人参与
#
面试官问过你最刁钻的问题是什么?
#
13557次浏览
122人参与
#
工作后会跟朋友渐行渐远吗
#
54454次浏览
395人参与
#
毕业租房也有小确幸
#
152889次浏览
4533人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务