首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
山柴贩
浙江大学 Java
https://www.nowcoder.com/questionTerminal/adc291e7e79f452c8b59243a5ce68d3a 和这个题类似的
点赞
回复
分享
发布于 2018-04-02 16:17
接下来的路才真正的开始
武汉科技大学 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
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 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
Juliiii
中山大学 C++
头条的算法题真是一题比一题惊心
点赞
回复
分享
发布于 2018-04-02 15:13
已删除
一个数前面有比它大的数,那么这个大的数必须移一次 找出所有需要移的数,按从小打到依次往后移 用stack来实现
点赞
回复
分享
发布于 2018-04-02 15:45
小罐球
浙江大学 算法工程师
//找到从最小值开始的最长有序序列,动规遍历一遍,碰到更小的值归零? 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
海量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
加满油go
华南理工大学 算法工程师
我觉得思想可能是首先从最小的数查找,从它开始查看下一个是否是比它大的最小的数,如果是继续寻找,如果不是,1则找到比它大的最小的数把排到最后,然后比他大的都要排一次最后,所以我觉得总次数为:假如前m个数为紧挨升序排列,则最小排列次数为(n-m),n为总个数。
点赞
回复
分享
发布于 2018-04-02 19:00
尤里卡斯特
楼主
华南理工大学 算法工程师
头条的算法题,真难!
点赞
回复
分享
发布于 2018-04-02 19:42
=..=
腾讯_天美_研发工程师(准入职)
空间是O(1)应该是有条件的,猜测是数字从1-n连续,其实就是给了你排好序的数组,把链表遍历一遍,记录不需要变的个数count,n-count就行了
点赞
回复
分享
发布于 2018-04-02 19:55
已删除
你有没有问条件,比如这n个数范围,是范围内随机数,还是1-n,是有重复还是没有重复数字,单链表还是双向链表,条件不同,做法就不同
点赞
回复
分享
发布于 2018-04-02 21:28
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
还没有回复哦~
相关推荐
11-27 00:58
南京大学 Web前端
秋招面试要会撒谎,别太老实了
参加面试时,回答问题要有技巧。比如,问我为何选择这份工作时,我会说我对这个领域充满热情,大学时就专注于相关学习,觉得这份工作与我的背景非常契合。还有,虽然我性格文静,但我在与同事相处时会倾听,确保理解他们的需求。我的职业规划分为三个阶段,第一阶段是提升自己,第二阶段希望能参与核心业务,第三阶段则是争取更多机会。准备面试其实不难,只要提前了解考察内容,做好准备,就能顺利拿下offer!
CADILLAC_:
转人工
牛客创作赏金赛
点赞
评论
收藏
分享
11-27 15:27
北京交通大学 商家运营
运营“偷感很重”
啊啊啊我现在…… 一边在工位上明目张胆地刷小红书…… 一边轻轻地奔溃了…… 为什么,我的工作看起来这么像摸鱼啊!! 作为运营我的工作内容之一是发小红书, 而发小红书要有网感, 于是为了培养网感, 我开始沉默地在工位上划起了小红书。。 为了表现我正在努力加速成长, 我拿出了3台设备,平板、电脑和手机, 开始沉默且眼花缭乱地三管齐下划小红书。。 但是突然我觉得很不对劲, 好像我越努力, 看起来就越猖狂。。。 救,到底要怎样才能让我看起来偷感不那么重啊!!! 我真在上班! 我真在上班。吗?
投递小红书等公司10个岗位 >
点赞
评论
收藏
分享
11-12 16:37
湖南大学 安卓
难评的pdd
#打工人锐评公司红黑榜#pdd真的是又爱又恨。先说一下薪资待遇:pdd算法岗开的有50-60,应该是到手,确实很可观。加班情况:但是加班挺严重的,可以说拿命换钱。工作环境:也是发最新款的苹果电脑。人际关系:大家平时相处的很愉快,同事之间也会互相投喂。虽然pdd现在体量超过了tb,加班情况也没以前那么严重了,但是感觉还是挺那啥的。附上一张我朋友的工资待遇情况表,仅供参考。
努力奋斗的小林:
讨厌用mac 真的反人类
拼多多集团-PDD公司氛围 520人发布
打工人锐评公司红黑榜
点赞
评论
收藏
分享
11-18 15:57
门头沟学院 Java
还得是dy评论区
最终归宿是测开:
这个重邮的大佬在重邮很有名的,他就喜欢打92的脸,越有人质疑他,他越觉得爽😂
点赞
评论
收藏
分享
11-27 19:55
已编辑
门头沟学院 前端工程师
三方已签,秋招结束,我的碎碎念
自收到三方签订的邮件那一刻起,我的秋招正式结束了。虽然九月底就结束了最后一面,但是后面的泡池子、等开奖也等的心力憔悴。直到这一刻,感觉一切落定,未来暂不知是否光明,但是我对它充满期待。这是我对秋招的最后一个总结帖了。相比起上一次阶段性小结,基本都知道最终的结果了(除了京东还在泡)总共拿了6个意向/oc:1.字节-抖音(已签)2.美团-到家(已拒)3.百度-能力平台(已拒)4.滴滴-用户增长(已拒)5.快手-用户增长(保温)6.顺丰-顺丰科技(已拒)感慨一下今年的薪资今年最让我感到惊讶的一点是薪资。一开始我和身边的同学都对团子不报期待,想着用它保底,开水团的名号没少听,往年的薪资也确实不尽人意,...
别看我了哥们:
Xy✌🏻还需要攒结婚奶粉钱,我这种***丝该咋办
上班苦还是上学苦呢?
如果可以选,你最想去哪家公司
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
招聘动态
查看更多
阿里云管培生
2025届校园招聘
富士通(西安)
2025校园招聘
全站热榜
1
...
校招两方/三方违约模板
2.7W
2
...
从露宿街头到百万级种子轮融资②——我的实习期都经历了什么
7954
3
...
秋招圆满结束!!
6644
4
...
秋招结束!!!
3190
5
...
今年谨慎等华为
3047
6
...
【发帖有奖💰】爆料秋招开奖进展❗
2956
7
...
大家怎么看待计算机的各个方向
2956
8
...
秋招也许结束了
2614
9
...
入职1年,胖了15斤是什么体验
2259
10
...
避雷浙江大应科技,恶人应该有恶报!!
2235
正在热议
#
拼多多求职进展汇总
#
240568次浏览
2050人参与
#
实习,投递多份简历没人回复怎么办
#
2447337次浏览
34795人参与
#
阿里云管培生offer
#
65327次浏览
1766人参与
#
25届秋招总结
#
424830次浏览
4292人参与
#
虾皮求职进展汇总
#
100380次浏览
809人参与
#
地方国企笔面经互助
#
7362次浏览
18人参与
#
北方华创开奖
#
67950次浏览
558人参与
#
ai智能作图
#
35313次浏览
434人参与
#
中兴求职进展汇总
#
470969次浏览
2453人参与
#
我在牛爱网找对象
#
75228次浏览
556人参与
#
双非有机会进大厂吗
#
106143次浏览
1333人参与
#
实习想申请秋招offer,能不能argue薪资
#
37949次浏览
313人参与
#
机械求职避坑tips
#
24197次浏览
252人参与
#
发工资后,你做的第一件事是什么
#
10536次浏览
52人参与
#
25届机械人为了秋招做了哪些准备?
#
26796次浏览
366人参与
#
投格力的你,拿到offer了吗?
#
47862次浏览
337人参与
#
我的实习求职记录
#
6144070次浏览
84084人参与
#
投递实习岗位前的准备
#
1193577次浏览
18510人参与
#
机械人怎么评价今年的华为
#
158438次浏览
1354人参与
#
在职场上,你最讨厌什么样的同事
#
6474次浏览
96人参与
#
实习与准备秋招该如何平衡
#
725904次浏览
8568人参与
#
华为工作体验
#
112460次浏览
871人参与
牛客网
牛客企业服务