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

来源:互联网 发布:mac 光影魔术手 下载 编辑:程序博客网 时间:2024/05/01 16:34

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

最小的排列

我的第1篇博文,向各位瑟瑟发抖!

背景描述:

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

题目:

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

分析思路:

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

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

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

  2. 链表的比较:

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

解题步骤

<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>
原创粉丝点击