-
Notifications
You must be signed in to change notification settings - Fork 3.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
第 67 题:随机生成一个长度为 10 的整数类型的数组,例如 [2, 10, 3, 4, 5, 11, 10, 11, 20],将其排列成一个新数组,要求新数组形式如下,例如 [[2, 3, 4, 5], [10, 11], [20]]。 #113
Comments
我眉头一皱,又不会………… |
我起的早, 我先来吧 受思维惯性, 以为是求连续, 好吧, 修改了一波
|
区间分类
|
|
// 随机生成一个长度为10的数组
function buildArr() {
var _arr = [];
for(var i=0; i<10; i++) {
_arr.push(Math.floor(Math.random() * 20))
}
return _arr;
}
// 排序去重
function sortArr(a) {
var _arr = [];
for(var i=0; i<a.length; i++) {
if(_arr.indexOf(a[i]) < 0) {
_arr.push(a[i]);
}
}
_arr.sort(function(item1, item2) {
return item1 - item2;
});
return _arr;
}
// 整合
function intoArr(a) {
if(a.length < 0)
return [];
var _arr = [];
var _idx = 0;
function p(item) {
if(!_arr[_idx]) {
_arr[_idx] = [];
}
_arr[_idx].push(item);
}
for(var i=0; i<a.length; i++) {
if(i == 0 || a[i] - a[i-1] == 0 || a[i] - a[i-1] == 1) {
p(a[i]);
}
else {
_idx++;
p(a[i]);
}
}
return _arr;
}
var arr = buildArr(); // 生成长度为10的数组
console.log('生成数组', arr);
arr = sortArr(arr); // 排序去重
console.log('排序去重', arr);
arr = intoArr(arr); // 整合
console.log('整合数组', arr); |
|
我发现楼上的朋友们和我想的不太一样啊,我理解的题目意思是把连续的元素组成一个数组,比如
|
// 隨機生成 Array
function randomArray(length = 10, max = 100) {
return Array.from({ length }, () => ~~(Math.random() * max))
}
// 10位分組
function newArray(array) {
return array
.reduce((acc, c) => {
let i = ~~(c / 10)
if (!acc[i]) acc[i] = []
acc[i].push(c)
return acc
}, [])
.filter(c => !!c)
.map(arr => Array.from(new Set(arr)).sort())
}
// 連續數列分組
function continueArray(array) {
return Array.from(new Set(array))
.sort((a, b) => a - b)
.reduce(
(acc, c, i, arr) => {
if (i === 0) acc[0].push(c)
else {
if (arr[i - 1] !== c - 1) acc.push([])
acc[acc.length - 1].push(c)
}
return acc
},
[[]]
)
}
let a = randomArray(10, 20)
newArray(a)
continueArray(a) |
|
连续元素分类
|
function Test(){ let a = Array.from(new Set(new Array(10).fill(1).map(_ => Math.ceil(Math.random() * 10)))).sort((a, b) => a - b); let result = [[a[0]]]; if(a.length === 1){ } a.reduce((prev, next) => { if(next - prev === 1){ result[result.length - 1].push(next); }else{ result.push([next]); return next; }) } |
[...new Set([...Array(10)].map(x = >parseInt(Math.random() * 10)))].sort((x, y) = >x - y).reduce(function(acc, cur, index, source) { |
去重后还要保证数组的长度是不是10... |
function create() {
let arr = [];
for(let i = 0; i< 10; i++) {
arr.push(Math.floor(Math.random() * 100))
}
arr = [...new Set(arr)]
arr = arr.sort(function(a,b){return a-b})
return arr;
}
function sort(arr) {
let newArr = [];
let dict = {};
let length = 0;
let keyArr = [];
arr.forEach((ele) => {
let key = Math.floor(ele/10)
keyArr = [];
for(let i in dict) {
keyArr.push(i * 1)
}
if(keyArr.indexOf(key) > -1) {
newArr[dict[key]].push(ele)
} else {
newArr[length] = [ele]
dict[key] = length
length ++;
}
})
return newArr;
}
function transform() {
let arr = create();
let sortArr = sort(arr)
return sortArr;
}
console.log(transform()) |
// 随机生成长度为 10 的整数
let arr = function randomArray() {
let arr = []
for(let i = 0; i < 10; i++) {
arr.push(Math.floor(Math.random() * 100))
}
return arr
}()
// 排序
arr.sort((a,b) => a-b )
// 去重
arr = [...new Set(arr)]
// 连续值存一个数组,不连续的单独存一个数组
let resultArr = [], newArr = [arr[0]], index = 0
for(let i = 1; i < arr.length; i++) {
if(arr[i] == arr[i -1] + 1) {
newArr.push(arr[i])
} else {
resultArr.push(newArr)
newArr = [arr[i]]
index++
}
}
console.log(arr) // [36, 37, 44, 50, 57, 61, 62, 78, 79]
console.log(resultArr) // [[36, 37], [44], [50], [57], [61, 62]] |
let arr = [20, 10, 11, 10, 2, 3, 1, 1];
console.log(
Object.values(
[...new Set(arr)].sort((a, b) => a - b).reduce((obj, val) => {
let key = parseInt(val / 10);
Array.isArray(obj[key]) ? obj[key].push(val) : obj[key] = [val]
return obj
}, {})
)
) //[[1,2,3],[10,11],[20]] 菜鸟见解,轻喷 |
const randomArr = []; |
function randomNumber(len) {
const max = 20;
const arr = [];
for (let i = 0; i < len; i++) {
arr.push(Math.floor(Math.random() * max));
}
const sorted = [...new Set(arr)].sort((a, b) => a - b); // 去重排序
return sorted;
}
function sort(arr) {
let dict = {};
let length = 0;
arr.forEach(i => {
let key = Math.floor(i / 10);
if (Reflect.has(dict, key)) {
dict[key].push(i);
} else {
dict[key] = [i];
length++;
}
});
dict.length = length;
return Array.from(dict);
}
const res = randomNumber(10);
console.log(sort(res)); |
|
const arr = Array.from({
length: 10
}, () => ~~(Math.random() * 50)) //创建数据
.sort((a, b) => a - b), //排序
arr1 = [...new Set(arr.map(i => ~~(i / 10)))] //划分区域
.map(i => arr.filter(a => ~~(a / 10) === i)) //数据划分 |
// 生成随机数组 // 生成map // 结果 |
/**
题目:随机生成一个长度为 10 的整数类型的数组,例如 [2, 10, 3, 4, 5, 11, 10, 11, 20],将其排列成一个新数组,要求新数组形式如下,例如 [[2, 3, 4, 5], [10, 11], [20]]。
理解:把连续的数字从小到大放到一个数组中
*/ //生成随机数
let arr = Array.from({length:10},()=>~~(Math.random()*20));
//[2, 10, 3, 4, 5, 11, 10, 11, 20]
[...new Set(arr)].sort((a,b)=>a-b).reduce((a,b)=>{
var l= a.slice(-1)[0];
l&& l.slice(-1)[0] + 1 == b ? l.push(b) : a.push([b]);
return a;
},[]) // [[2,3,4,5],[10,11],[20]] |
比较通俗的解法~
|
以为求连续 + 1 |
arr没有去重 |
你这个数组最后一个值是没有放到结果数组里面去的? |
|
/**
* 返回 min 到 max 之间的随机整数,包括 min 和 max
*/
function getRandomInt(min, max) {
const MIN = Math.ceil(min);
const MAX = Math.floor(max);
return Math.floor(Math.random() * (MAX - MIN + 1)) + MIN;
}
/**
* 返回指定长度的数组,数组元素为[0, 99]的随机整数
*/
function getRandomArray(length) {
return Array.from({ length }, item => getRandomInt(0, 99));
}
/**
* 返回处理后的数组,包括排序、去重和分类
*/
function getProcessedArray(array) {
const sortedArray = [...array].sort((a, b) => a - b);
const uniqueSortedArray = [...(new Set(sortedArray))];
const hash = {};
let result = [];
uniqueSortedArray.forEach((val, i) => {
const key = Math.floor(val / 10);
if (!hash[key]) {
hash[key] = [uniqueSortedArray[i]];
}
else {
hash[key].push(uniqueSortedArray[i]);
}
})
for (let key in hash) {
result.push(hash[key]);
}
return result;
}
// 测试
const array = getRandomArray(10);
console.log(array);
console.log(getProcessedArray(array)); // 纯函数
console.log(array); // 不改变原数组 |
既然用到了sort就不用set去重了,双reduce搞定 const arrange = arr => {
return arr
.sort((a, b) => a - b)
.reduce(
(acc, cur) => (acc[acc.length - 1] === cur ? acc : acc.concat([cur])),
[],
)
.reduce(
(acc, cur) => {
return ~~(acc[acc.length - 1][0] / 10) === ~~(cur / 10)
? (acc[acc.length - 1].push(cur), acc)
: (acc.push([cur]), acc);
},
[[]],
);
}; |
function swift(arr) { |
这是来自QQ邮箱的假期自动回复邮件。
您好,我最近正在休假中,无法亲自回复您的邮件。我将在假期结束后,尽快给您回复。
|
这是一封自动回复邮件。您好,你的邮件我已收到,会尽快给您回复,祝您生活愉快!
|
const categoriezSequenceList = (numberList) => {
const sortedList = Array.from(new Set(numberList)).sort((a, b) => a-b);
const result = [];
const end = sortedList.length;
for (let i=0; i<end; i++) {
const sequenceList = [sortedList[i]];
for (let j=i+1; j<end && sortedList[j] - sortedList[i] === 1; j++) {
sequenceList.push(sortedList[j]);
i = j;
}
result.push(sequenceList);
}
return result;
}
const generateArray = (length, cap) => {
return Array.from({length}).map(() => Math.floor(Math.random()*cap))
}
const inputList = [2, 10, 3, 4, 5, 11, 10, 11, 20];
const resultList = categoriezSequenceList(inputList);
console.log((resultList)); |
这是来自QQ邮箱的假期自动回复邮件。
您好,我最近正在休假中,无法亲自回复您的邮件。我将在假期结束后,尽快给您回复。
|
这是一封自动回复邮件。您好,你的邮件我已收到,会尽快给您回复,祝您生活愉快!
|
const arr = [2, 10, 3, 4, 5, 11, 10, 11, 20, 1, 33, 31]
const fn = (numArr, pre) => {
const newNumArr = [...new Set(numArr)].sort((a, b) => a-b)
let res = []
const maxNum = Math.max(...newNumArr)
const length = Math.round(maxNum / pre) + 1
for(let i = 0; i < length; i++){
const newArr = newNumArr.filter(item => item < pre*(i+1) && item >= pre*i)
res.push(newArr)
}
return res
}
const result = fn(arr, 10)
console.log("result", result) |
// [2, 10, 3, 4, 5, 11, 10, 11, 20] => [[2, 3, 4, 5], [10, 11], [20]]
let a = [2, 10, 3, 4, 5, 11, 10, 11, 20];
let res = [];
[...new Set(a)].sort().forEach(item => {
let index = Math.floor(item/10);
if (!res[index]) {
res[index] = [item];
} else {
res[index].push(item);
}
})
console.log(res); |
这是一封自动回复邮件。您好,你的邮件我已收到,会尽快给您回复,祝您生活愉快!
|
这是来自QQ邮箱的假期自动回复邮件。
您好,我最近正在休假中,无法亲自回复您的邮件。我将在假期结束后,尽快给您回复。
|
|
|
|
function randomMath(n) { |
这是来自QQ邮箱的假期自动回复邮件。
您好,我最近正在休假中,无法亲自回复您的邮件。我将在假期结束后,尽快给您回复。
|
这是一封自动回复邮件。您好,你的邮件我已收到,会尽快给您回复,祝您生活愉快!
|
闲的发慌 |
这是一封自动回复邮件。您好,你的邮件我已收到,会尽快给您回复,祝您生活愉快!
|
const arr = [2, 10, 3, 4, 5, 11, 10, 11, 20];
const res = [];
for (let item of arr) {
const index = Math.floor(item / 10);
if (!res[index]) {
res[index] = [];
} else {
if (res[index].includes(item)) continue;
}
res[index].push(item);
}
console.log(res); |
这是来自QQ邮箱的假期自动回复邮件。
您好,我最近正在休假中,无法亲自回复您的邮件。我将在假期结束后,尽快给您回复。
|
// 生成随机数
var genRandomNum = (min,max) => Math.floor(Math.random() * (max - min + 1)) + min;
// 生成数组
function genArray(size,min,max){
//去重
var array = new Set();
// 生成指定长度数组
while(array.size < size){
array.add(genRandomNum(min,max))
}
// 排序
array = Array.from(array).sort((a,b) => (a-b));
// 构建hash
var map = new Map();
// 放入hash
array.forEach(v => {
let index = Math.floor(v / 10);
if(map.has(index)){
map.set(index, map.get(index).concat(v));
}else{
map.set(index, [v]);
}
})
// 输出结果
return Array.from(map.values())
} |
这是一封自动回复邮件。您好,你的邮件我已收到,会尽快给您回复,祝您生活愉快!
|
这是来自QQ邮箱的假期自动回复邮件。
您好,我最近正在休假中,无法亲自回复您的邮件。我将在假期结束后,尽快给您回复。
|
// 随机生成一个长度为 10 的整数类型的数组,
// 例如 [2, 10, 3, 4, 5,8, 11, 10, 11, 15,20],
// 将其排列成一个新数组,要求新数组形式如下,例如 [[2, 3, 4, 5, 8], [10, 11, 15], [20]]
const generateRandomInteger = (min, max) => {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
const generateIntegerArray = (min, max, len) => {
return Array.from(new Array(len), x => generateRandomInteger(min, max))
}
const transformTo2DArray = (arr) => {
console.log(arr);
arr.sort((a,b) => a - b);
const result = [];
const obj = {};
arr.map((i) => {
const intNum = Math.floor( i / 10);
if(!obj[intNum]) obj[intNum] = [];
obj[intNum].push(i);
});
for(let key in obj) {
result.push(obj[key])
}
console.log(result);
}
transformTo2DArray(generateIntegerArray(0, 100, 20)) |
这是来自QQ邮箱的假期自动回复邮件。
您好,我最近正在休假中,无法亲自回复您的邮件。我将在假期结束后,尽快给您回复。
|
let arr = [2, 10, 3, 4, 5, 11, 10, 11, 20]
arr = Array.from(new Set(arr))
arr.sort((a,b) => a - b)
let index = 0
let lenth = arr.length
let ret = [[]]
while(index < lenth) {
let lastLen = ret.length - 1
if (index === 0) {
ret[lastLen].push(arr[index])
index++
continue
}
if (arr[index] - arr[index - 1] === 1) {
ret[lastLen].push(arr[index])
} else {
ret.push([])
lastLen = ret.length - 1
ret[lastLen].push(arr[index])
}
index++
} |
function randomArray() {
let arr = [];
for (let i = 0; i < 10; i++) {
let t = Math.floor(Math.random() * 100);
let index = Math.floor(t / 10);
if (!arr[index]) {
arr[index] = [];
}
arr[index].push(t);
}
return arr.filter(Boolean);
} |
这是来自QQ邮箱的假期自动回复邮件。
您好,我最近正在休假中,无法亲自回复您的邮件。我将在假期结束后,尽快给您回复。
|
这是一封自动回复邮件。您好,你的邮件我已收到,会尽快给您回复,祝您生活愉快!
|
这是来自QQ邮箱的假期自动回复邮件。 您好,您的邮件我已经收到,我会尽快给您回复,谢谢。
|
No description provided.
The text was updated successfully, but these errors were encountered: