总体思路:

  • 1,2,3分别代表不同颜色,只有3种颜色,所以只需用到3个指针i,j,k;
  • i,j都执行0,k指向数组最后一位,其中j还表示当前所遍历的值,3个指针划分出4个区域:
    - [0,i)放的是1
    - [i,j)放的是2
    - [j,k)放的是未划分的数
    - [k,length-1]放的是3
  • 然后就是从0开始遍历,判断当前值是哪个数,进行相应的指针移动或数字对调。
let str = '321322111231';
var sanseqi = function(ss){//对于所传参数是字符串,要分离成数组,并对数组每个元素转为Number类型let arr = ss.split('').map(Number);//由于只是对3个不同的数归为一起//所以设置3个指针i,j,k,其中//[0,i)放的是1,[i,j)放的是2,[j,k)放的是未划分的数,[k,length-1]放的是3let i =0;let j = 0;let k = arr.length - 1;//因为k左边的数是未划分的,而j指的是当前正在遍历的数,所以只要j<=k即表明还有数未划分while(j <= k){//当前值为2if(arr[j] === 2){//因为[i,j)放的是2,即指针j左边的都是2,所以指针j要右移一位j++;console.log(arr);//当前值为1}else if(arr[j] === 1){//因为[0,i)放的是1,即指针i左边的都是1,而当前值为1,//所以指针i,j所指的值对调,即可保证1连续,所以i要右移一位,j也要右移一位,指向下一个数[arr[i],arr[j]] = [arr[j],arr[i]];i++;j++;console.log(arr);//当前值为3}else{//因为[j,k)放的是未划分的数,即指针k左边的都是未划分的数,而当前值为3,//所以指针j,k所指的值对调,即可保证3连续,所以k要左移一位,因为k右部的都是3[arr[j], arr[k]] = [arr[k], arr[j]];k--;console.log(arr);}}return arr;
}
console.log(sanseqi(str));

控制台打印的结果,执行的整个过程,如图:

最后说一下写代码中途出现的小问题:
1、let i,j = 0;
这样结果是不对的,出现了undefined,因为相当于i是undefined,
应该这样let i =0,j = 0;

2、表达式函数的遍历用let声明,后续报错Uncaught SyntaxError: Identifier ‘sanseqi’ has already been declared
应该用var来声明

3、对于其他的一些遍历,尽量用let声明,不然报错Uncaught SyntaxError: Identifier ‘str’ has already been declared
at :1:1

算法:JavaScript实现 三色旗 代码详解相关推荐

  1. 微信小程序 获取手机号 JavaScript解密示例代码详解

    刚开始开发微信小程序的时候,想着实现手机验证码登入,后来查阅资料得知,发给用户的短信是要自己付费的.后来想想,微信获取用户的手机号一样可以保证手机号码的真实性,因为手机号既然可以绑定微信,那么肯定是被 ...

  2. 《机器学习实战》kNN算法及约会网站代码详解

    使用kNN算法进行分类的原理是:从训练集中选出离待分类点最近的kkk个点,在这kkk个点中所占比重最大的分类即为该点所在的分类.通常kkk不超过202020 kNN算法步骤: 计算数据集中的点与待分类 ...

  3. [机器学习与scikit-learn-15]:算法-决策树-分类问题代码详解

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址: 目录 第1章 scikit-learn对决策树的支持 1.1 决策树的基本原理 1.2 决策树的 ...

  4. 标准oc算法的推导与99行代码详解

    文章目录 标准oc算法的推导与代码详解 问题描述 OC算法的数学描述 结果展示 OC算法的matlab代码及注释 参考文献 标准oc算法的推导与代码详解 对于变密度的参数化方法,设计变量x为材料相对密 ...

  5. js php base64,JavaScript实现Base64编码与解码的代码详解

    本篇文章给大家分享的是jJavaScript实现Base64编码与解码的代码详解,内容挺不错的,希望可以帮助到有需要的朋友 一.加密解密方法使用//1.加密 var str = '124中文内容'; ...

  6. 【OpenCV/C++】KNN算法识别数字的实现原理与代码详解

    KNN算法识别数字 一.KNN原理 1.1 KNN原理介绍 1.2 KNN的关键参数 二.KNN算法识别手写数字 2.1 训练过程代码详解 2.2 预测分类的实现过程 三.KNN算法识别印刷数字 2. ...

  7. kmeans python interation flag_机器学习经典算法-logistic回归代码详解

    一.算法简要 我们希望有这么一种函数:接受输入然后预测出类别,这样用于分类.这里,用到了数学中的sigmoid函数,sigmoid函数的具体表达式和函数图象如下: 可以较为清楚的看到,当输入的x小于0 ...

  8. MeanTeacher文章解读+算法流程+核心代码详解

    MeanTeacher 本博客仅做算法流程疏导,具体细节请参见原文 原文 原文链接点这里 Github 代码 Github代码点这里 解读 论文解读点这里 算法流程 代码详解 train_transf ...

  9. 天津理工大学《操作系统》实验二,存储器的分配与回收算法实现,代码详解,保姆式注释讲解

    天津理工大学<操作系统>实验二,存储器的分配与回收算法实现,代码详解,保姆式注释讲解 实验内容 1. 本实验是模拟操作系统的主存分配,运用可变分区的存储管理算法设计主存分配和回收程序,并不 ...

  10. DDA画线算法+代码详解-直线扫描算法之一

    #DDA画线算法+代码详解-直线扫描算法之一 本文目录结构如下 1.直线扫描算法简介 2.DDA直线扫描算法 2.1 公式推理 1.求斜率K: 2.当|K| <= 1 时 3.当|K| > ...

最新文章

  1. HTTP详解(1)-工作原理【转】
  2. 解决TensorBoard训练集和测试集指标只能分开显示的问题(基于Keras)
  3. 【深度学习】Transformer 向轻量型迈进!微软与中科院提出两路并行的 Mobile-Former...
  4. Dijkstra算法——最短路径(转)
  5. 从零开始搭二维激光SLAM --- Karto的后端优化与回环检测功能对比测试与分析
  6. MAX DotNet 透明界面效果代码实例 转自CG++原帖
  7. 宽凳公司关于无人驾驶高精地图的看法(2018.8)
  8. 无限打开计算机cmd,影子系统无限蓝屏cmd怎么解决
  9. Parsed mapper file:项目启动不起来
  10. 触动人心:如何设计优秀的iPhone应用
  11. docker安装和入门教程
  12. [软考]挣值管理EVM详细解释及应用,实例讲解收集(信息系统项目管理师-成本管理)...
  13. uniapp vue 身份证号校验
  14. 陀螺仪程序---可直接用
  15. 分布式技术一周技术动态 2015.12.13
  16. 第四章——确定性推理
  17. 二维图形的变换(矩阵形式)
  18. 面试阿里!妹子终面,阿里面试官问:有没有男朋友? 结果...
  19. FY3b MWRI亮温数据处理
  20. 赋能企业安全 H3C F1000-C8160云防火墙微评测

热门文章

  1. 使用ffmpeg转码MP4至m3u8格式并切片,以及自动检测切片m3u8脚本编写
  2. 010-win10任务栏假死—重启“Windows资源管理器”。
  3. Python 多线程输出混乱
  4. 轻音乐-Bandari(班得瑞)
  5. 如何快速删除百度相关搜索中的关键词?
  6. python开发录屏软件_Python移动端录屏库
  7. Android录屏技术方案
  8. zic - 时区编辑器
  9. Vue的一些知识汇总---希望对你有用
  10. 暴走英雄坛服务器维护,《暴走英雄坛》4月29日更新公告