当然,在电话采访中我被问到了一个问题,其他问题都很好,但我仍然不确定最佳答案。
起初我认为它闻起来有点基数的味道,但因为你不能只使用相邻的交换,当然不能。
所以我认为它更像是一种冒泡排序类型的算法,这是我试图做的,但“最大交换次数”位让它非常棘手(连同他的词汇部分,但我想这只是一个比较方面的问题)
我想我的算法会是这样的(当然现在我有比面试时更好的想法!)
int index = 0;
while(swapsLeft>0 && index < arrays.length)
{
int smallestIndex = index;
for(int i=index; i < index + swapsLeft)
{
// of course < is not correct, we need to compare as string or "by radix" or something
if(array[i]) < array[smallestIndex]
smallestIndex = i;
}
// if found a smaller item within swap range then swap it to the front
for(int i = smallestIndex; i > index; i--)
{
temp = array[smallestIndex];
array[smallestIndex] = array[index];
array[index] = temp
swapsLeft--;
}
// continue for next item in array
index ++; // edit:could probably optimize to index = index + 1 + (smallestIndex - index) ?
}
这看起来对吗?
谁是更好的解决方案,我很好奇一种有效/正确的方法来做到这一点。