首页 > 试题广场 >

奇怪的排序问题

[编程题]奇怪的排序问题
  • 热度指数:1199 时间限制:C/C++ 5秒,其他语言10秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
操场上有 n个人排成一队,这 n 个人身高互不相同,可将他们的身高视为一个 1 到 n 的排列。
这时需要把队伍变成升序,也就是从矮到高排序。
每次可以选择一个人,让这个人和在他身后的人比高矮,如果比对方高,则交换位置并继续下一次比较,直到比对方矮或者已经在队尾。
现在给出数 n 和一个 1 到 n 的排列,求最少的选择次数,使数组变为升序。

示例1

输入

4,[4,1,2,3]

输出

1

备注:
n<=10^6
数据包含一个整数n和一个含有n个元素的数组,表示从队头到队尾的人的身高。
输出一个整数表示答案。
头像 小洋芋热爱NLP
发表于 2021-07-25 21:30:52
- 题目描述:- 题目链接:https://www.nowcoder.com/practice/60ed9956450b42f193d48053bcca7087?tpId=196&&tqId=37679&rp=1&ru=/activity/oj&qru=/ta 展开全文
头像 ZiRuio
发表于 2021-10-07 16:30:51
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param n int整型 * @param a int整型一维数组 * @param aLen int a数组长度 * @return int整型 */ int wwork(int 展开全文
头像 摩金
发表于 2020-12-21 01:25:54
链接:https://ac.nowcoder.com/acm/contest/10166/B来源:牛客网 题目描述操场上有n个人排成一队,这n个人身高互不相同,可将他们的身高视为一个1到n的排列。这时需要把队伍变成升序,也就是从矮到高排序。每次可以选择一个人,让这个人和在他身后的人比高矮,如果比对方 展开全文
头像 凉水冲泡面
发表于 2020-12-18 21:48:47
链接:https://ac.nowcoder.com/acm/contest/10166/B来源:牛客网 题目描述操场上有n个人排成一队,这n个人身高互不相同,可将他们的身高视为一个1到n的排列。这时需要把队伍变成升序,也就是从矮到高排序。每次可以选择一个人,让这个人和在他身后的人比高矮,如果比对方 展开全文
头像 开朗米其罗
发表于 2021-06-21 10:51:10
思路 在有序队列中找出位置不对的几个数,而不是在无序中找有序的数。 方案 用 tmp 记录最后一个(可能是最大的数),从后往前找,前大后小,就算一个,如果前一个更小,就更新 tmp,让它保持已知的最小。 实现 class Solution: def wwork(self , n , a ): 展开全文
头像 想做大牛的蠢牛
发表于 2021-07-23 23:20:30
1、从数组后面往前进行维护有序队列。并维护有序队列的最小值。 2、如果有序队列前一个数字比有序队列的最小值大,则需要进行一次选择使队列成为有序队列。 3、直到数组头,循环结束。 import java.util.*; public class Sol 展开全文

问题信息

难度:
8条回答 3538浏览

热门推荐

通过挑战的用户

查看代码