【发布时间】:2019-04-05 06:46:15
【问题描述】:
我有一个算法来解决教授必须按班级分数对学生进行排序的问题,例如 1 表示好,0 表示坏。交换次数最少,只有相邻的学生可以交换。例如,如果学生按顺序 [0,1,0,1] 给出,则只需进行一次交换即可执行 [0,0,1,1] 或在 [0,0,0,0,1,1] 的情况下, 1,1] 不需要交换。
从问题描述中我立即知道这是一个经典的最小相邻交换问题或计数反转问题,我们可以在归并排序中找到。我尝试了自己的算法以及列出的here 或this site,但没有一个通过所有测试。
当我尝试以相反的顺序对数组进行排序时,通过的测试用例数量最多。我还尝试根据数组的第一个元素是 0 还是 1 按顺序对数组进行排序。例如,第一个元素是 1,那么我应该按降序对数组进行排序,否则按照学生的升序排序在任何分组中,仍然没有工作。有些测试用例总是失败。问题是当我按升序对它进行排序时,一个在反向排序的情况下失败的测试用例与其他一些测试用例一起传递,但不是全部传递。所以我不知道我做错了什么。
【问题讨论】:
-
所有数组元素都是0还是1?没有其他值?
-
也许问题没有解决特定的顺序,你必须选择 - 0011 或 1100 会更好?
-
请分享“没有通过所有测试”中使用的测试
-
@GPS 是的,所有元素都是 0 或 1,没有其他值。不,我没有失败的测试用例。它对我隐藏。这正是我很难找出问题所在的原因。
-
@MBo 0011 或 1100 都可以,具体取决于哪个有最小交换。这就是我尝试按 asc/desc 顺序排序的原因。
标签: algorithm sorting mergesort