美文网首页
小球排序算法题的4种实现

小球排序算法题的4种实现

作者: 牛油果大虾 | 来源:发表于2020-01-21 16:24 被阅读0次
在一个字符串数组中有红、黄、蓝三种颜色的球,且个数不相等、顺序不一致,请为该数组排序。使得排序后数组中球的顺序为:黄、红、蓝。
例如:红蓝蓝黄红黄蓝红红黄红,排序后为:黄黄黄红红红红红蓝蓝蓝。
//方法一:遍历取每个球的个数,用对象value保存,输出新遍历字符串
        var str = '红蓝蓝黄红黄蓝红红黄红'
        function sortBalls(str){
            var obj = {'黄':0,'红':0,'蓝':0},res='';
            for(let i=0,length = str.length;i<length;i++){
                obj[str.charAt(i)]++
            }
            for(let key in obj){
                var str="";
                for(var j=0;j<obj[key];j++){
                    res+=key
                }
            }
            return res
        }
        sortBalls(str)
 //方法2:涉及排序就可联想到sort,但sort使用整数,如果为字符会转为unicode编码,可用颜色为key,代号为value,value为数字

        function sortBalls(str){
            var obj={'黄':0,'红':1,'蓝':2};
            return str.split('').sort((a,b)=>{return obj[a]-obj[b]}).join('');
        }
//方法3:创建对应种类个数数组,分别push.合并
        function sortBalls(str){
            // or Array.from({length:3}.fill([]),[[],[],[]];
            var arr = Array.from({length:3},item=>item=[]);
            //创建hash表,按排序顺序设置value
            var hashObj = {'黄':0,'红':1,'蓝':2};
            //遍历字符将元素放入对应下标子数组
            for(var i=0,length=str.length;i<length;i++){
                var item=str.charAt(i);
                arr[hashObj[item]].push(item);
            }
            return arr.reduce((pre,cur)=>pre+=cur.join(''),'')
        }
//方法四:用str的matchAll,matchAll为ES新增加API,返回不可重启的迭代器RegExpStringIterator {},需用...orArray.from转为数组可观察
        function sortBall(str){
            return ['黄','红','蓝'].map((o)=>o.repeat([...'红蓝蓝黄红黄蓝红红黄红'.matchAll(o)].length)).join('')
        }
引申:可联想到常用快排或者归并排序方式实现

相关文章

  • 小球排序算法题的4种实现

    在一个字符串数组中有红、黄、蓝三种颜色的球,且个数不相等、顺序不一致,请为该数组排序。使得排序后数组中球的顺序为:...

  • 京东高级java现场三面,包含:算法、数据库、设计模式、java

    京东技术面试(一): 算法面试: 二叉树怎么实现的 知道哪些排序算法 快排怎么实现 堆排序怎么实现 一道算法题:两...

  • 数据结构&算法(一)

    一、Java实现快速排序算法 二、Java实现折半插入排序算法 三、Java实现冒泡排序算法

  • 三大排序算法

    归并排序[稳定的排序算法] 递归实现 非递归实现 快速排序[不稳定的排序算法] 堆排序[不稳定的排序算法]

  • 排序算法详细代码实现

    算法分类 算法时间复杂度 选择排序 插入排序 C++实现 Python实现 冒泡排序 Python实现 归并排序 ...

  • 前端算法学习-第一篇

    冒泡排序算法 冒泡排序算法是最慢的排序算法之一,也是最容易实现的排序算法。之所以叫冒泡排序是因为使用这种算法排序时...

  • 算法-选择排序

    算 法:选择排序算法时间复杂度: 选择排序算法概述 选择排序伪代码 选择排序实现 选择排序算法概述 排序算法有许...

  • 七大排序算法之冒泡排序

    七大排序算法之冒泡排序 @(算法笔记)[排序算法, 冒泡排序, C++实现] 冒泡排序介绍 冒泡排序是七大排序算法...

  • 七大排序算法之快速排序

    七大排序算法之快速排序 @(算法笔记)[排序算法, 快速排序, C++实现] [TOC] 快速排序的介绍: 快速排...

  • 算法-冒泡排序

    算 法:冒泡排序算法时间复杂度: 冒泡排序算法概述 冒泡排序伪代码 冒泡排序实现 冒泡排序算法概述 冒泡排...

网友评论

      本文标题:小球排序算法题的4种实现

      本文链接:https://www.haomeiwen.com/subject/utpezctx.html