前端进阶|第十天 数组分组编程,区间还是连续一网打尽
先看题面:
随机生成一个长度为 10 的整数类型的数组,例如 [2, 10, 3, 4, 5, 11, 10, 11, 20],将其排列成一个新数组,要求新数组形式如下,例如 [[2, 3, 4, 5], [10, 11], [20]]。
看完有点懵,根据他举的例子,数组被分为了三个子数组,但分类的依据却有两种理解,1.按照区间划分,即0-9,10-19,20-29等等,依此类推,以10为阶梯进行分组。2.按照连续区间划分,大小连续的分为一组。
嗯,到底出题人咋想的,不得而知。so 管他呢,写就完了。
我们先按照第一种理解:
// IIFE 生成随机数组 var arr = (function (len) { let temp = [] for (var i = 0; i < len; i++) { temp.push(Math.floor(Math.random() * 100)); } return temp; })(10) console.log(arr); //1.排序 重写sort 排序 arr.sort((a, b) => { return a - b }) console.log(arr); //2去重 利用set不可重复性对数组进行去重 arr = [...new Set(arr)] console.log(arr); //3.区间分组 利用map的key记录阶梯索引 let map = new Map(); arr.forEach((item) => { let key = Math.floor(item / 10) let temp=map[key]; if(!temp) { temp=[]; } temp.push(item); map[key]=temp; }) let arr1=[] for(var key in map) { arr1.push(map[key]); } console.log(arr1);
如果是连续区间其实也可以利用我们已经排序的优势来实现。
//4.连续分组 利用map的key记录分组索引 let map2 = new Map(); let index = 0 arr.forEach((item) => { let temp = map2[index]; if (!temp) { temp = []; temp.push(item); } else { if (item - temp[temp.length - 1] == 1) { temp.push(item); } else { index++; temp = [] temp.push(item); } } map2[index] = temp; }) let arr2 = [] for (var key in map2) { arr2.push(map2[key]); } console.log(arr2);
最终效果如图
以上写法使用的算法都比较传统,有网友提出用reduce函数进行处理,等我学会了再来写一稿。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Java描述设计模式(07):适配器模式
本文源码:GitHub·点这里 || GitEE·点这里 一、适配器模式简介 1、基础概念 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。适配器模式有类适配器模式和对象适配器模式,以及缺省(接口)适配器,三种不同的形式。 2、生活场景 基于适配器模式,把220V的电压,转换为需要的110V电压。 public class C01_InScene { public static void main(String[] args) { CurrentAdapter adapter = new CurrentAdapter() ; System.out.println(adapter.get110VCurrent()) ; } } // 220V电流 class Current220V { public int get220VCurrent (){ return 220 ; } } // 110V电流接口 interface Current110V { int get110VCurrent () ; } // 电流适配器 ...
- 下一篇
深入理解Java线程状态
赞助平台 首页 / 文章管理 / 文章编辑 Java线程状态友情提示:文章每30秒自动保存一次,编辑器支持图片拖动上传或者复制粘贴上传~ 0 线程状态概述 分类 6个状态定义: java.lang.Thread.State New: 尚未启动的线程的线程状态。 Runnable: 可运行线程的线程状态,等待CPU调度。 Blocked: 线程阻塞等待监视器锁定的线程状态。处于synchronized同步代码块或方法中被阻塞。 Waiting: 等待线程的线程状态。下 列不带超时的方式:Object.wait、Thread.join、 LockSupport.park Timed Waiting:具有指定等待时间的等待线程的线程状态。下 列带超时的方式:Thread.sleep、0bject.wait、 Thread.join、 LockSuppor
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2整合Redis,开启缓存,提高访问速度
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19
- CentOS8安装Docker,最新的服务器搭配容器使用