2018年美团校招前端WEB笔试编程题-最小的排列

2018年美团校招前端WEB笔试编程题

最小的排列

背景描述:

现有两个由0-n组成的排列,那么这两个排列的大小比较规则就是,从左到右挨个比较,若相等则同时比较下一个,否则不等时,大值项所在的排列即为最大的排列 。

题目:

有一个排列,交换排列中两个元素的位置,使得所得得到的排列为最小。

分析思路:

这种比较大小的规则,应该有点熟悉吧,我对此有两种熟悉的场景。

  1. 比较两个字符串的大小:

因为字符串的比较性不像数字表现的那么明显,但是字符其实是有ASCII值的,那么可以从规则开始判断比较大小。具体比较也是如同上面,若相等持续比较下去,否则即可判断出二者大小。

  1. 链表的比较:

学过数据结构都应该知道链表比较大小也是这个道理 (只是应该),相等依次访问进行比较,不等时则判断出大小。

解题步骤

<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>

你可能感兴趣的:(WEB校招,算法)