京东笔试第二题思路

不知道对不对,反正我按这个做法a了。
1、如果最大的数就在第奇数个位置上,那就不需要方法一
2、如果第二大的数就在第偶数个下标处,那也不需要方法一
3、依次类推,若每个数的大小排序(第几大),都和原本在数组中的下标,奇偶相对应,就完全不用方法一。
4、每有一对不在对应奇数/偶数下标处的,一次方法一就能换回到正确的位置上。

代码思路:用一个TreeMap存< 大小,数组下标  >,遍历这个map就能判断每个数是不是在自己该在的奇数/偶数下标处。不是就count+1。
最后count/=2就可。
全部评论
这份代码过了100%,我自己都不知道为啥能过。你研究研究什么原理,记得告诉我一声 nums = [] n = int(input()) for i in range(n): num = int(input()) nums.append([num, i]) nums = sorted(nums, key=lambda x : x[0]) # print(nums) ans = 0 for i in range(n): ans += 1 if (nums[i][1] - i) % 2 == 1 else 0 print(ans//2)
1 回复 分享
发布于 2024-08-31 14:08 黑龙江
每次使用操作1,不会有两个数的奇偶就发生变化了吗?这样算的话,不用考虑使用操作1之后的数字变化吗?😭没懂
点赞 回复 分享
发布于 2024-08-31 13:24 陕西
我也是这么做的
点赞 回复 分享
发布于 2024-08-31 12:55 上海

相关推荐

评论
1
2
分享

创作者周榜

更多
牛客网
牛客企业服务