我有一个链表:override func viewDidAppear(animated: Bool)
{
super.viewDidAppear(animated)
let backgroundImage = UIImage(named: "theImage")
let imageView = UIImageView()
imageView.image = backgroundImage
imageView.contentMode = UIViewContentMode.ScaleAspectFit
self.tableView.backgroundView = imageView
imageView.alpha = 0.0
UIView.animateWithDuration(3.0, animations: { () -> Void in
imageView.alpha = 1.0
})
}
。我希望用最少的移动/写入来对其进行排序。
我只能使用1 3 7 4 5 0 2 6
函数移动该列表的元素,该函数只需在insertBetween(element, after, before)
和element
元素之间插入after
。
例如,第一次运行可能希望在0之后和之前2之前移动1:
before
该列表现在为insertBetween(1, 0, 2)
。
现在它可能想要将7移到最后:3 7 4 5 0 1 2 6
该列表现在为insertBetween(7, 6, None)
。
现在它可能想要将0移到开头:3 4 5 0 1 2 6 7
该列表现在为insertBetween(0, None, 3)
。
此排序算法的唯一优先级是函数0 3 4 5 1 2 6 7
的最少使用次数,因为使用它非常昂贵。我希望用Python实现它。
答案 0 :(得分:1)
不要专注于你移动的元素。它们可以移动到任何地方而不是问题。相反,请关注不移动的元素。那些需要已经排序。因此,如果您有N个元素和长度为L的最长排序子序列,您只需要N-L移动来移动不在该子序列中的N-L元素,并且您无法做得更好。查找排序最长的子序列是一个标准问题,但look here如果您不知道该怎么做。