京东笔试第二题思路
不知道对不对,反正我按这个做法a了。
1、如果最大的数就在第奇数个位置上,那就不需要方法一
2、如果第二大的数就在第偶数个下标处,那也不需要方法一
3、依次类推,若每个数的大小排序(第几大),都和原本在数组中的下标,奇偶相对应,就完全不用方法一。
4、每有一对不在对应奇数/偶数下标处的,一次方法一就能换回到正确的位置上。
代码思路:用一个TreeMap存< 大小,数组下标 >,遍历这个map就能判断每个数是不是在自己该在的奇数/偶数下标处。不是就count+1。
最后count/=2就可。
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,不会有两个数的奇偶就发生变化了吗?这样算的话,不用考虑使用操作1之后的数字变化吗?😭没懂
我也是这么做的
相关推荐