2018年美团校招前端WEB笔试编程题
最小的排列
背景描述:
现有两个由0-n组成的排列,那么这两个排列的大小比较规则就是,从左到右挨个比较,若相等则同时比较下一个,否则不等时,大值项所在的排列即为最大的排列 。
题目:
有一个排列,交换排列中两个元素的位置,使得所得得到的排列为最小。
分析思路:
这种比较大小的规则,应该有点熟悉吧,我对此有两种熟悉的场景。
- 比较两个字符串的大小:
因为字符串的比较性不像数字表现的那么明显,但是字符其实是有ASCII值的,那么可以从规则开始判断比较大小。具体比较也是如同上面,若相等持续比较下去,否则即可判断出二者大小。
- 链表的比较:
学过数据结构都应该知道链表比较大小也是这个道理 (只是应该),相等依次访问进行比较,不等时则判断出大小。
解题步骤
<script>
// 用于交换
function swap(order,p1,p2){
var temp = order[p2];
order[p2] = order[p1];
order[p1] = temp;
}
//现有一个序列,经交换两个位置后,为最小排列
function GetMinOrder(order){
var min=parseInt(order);
// 两层循环有点眼熟啊,有点像简单选择排序的算法
for(var i=0;i<order.length;i++){
for(var j=i+1;j<order.length-1;j++){
swap(order,i,j);
if(min>parseInt(order)){
min = parseInt(order);
}
swap(order,i,j);
}
}
console.log(min); //打印最小的排列
}
GetMinOrder('43512');
</script>