我正试图解决一个算法问题。这个问题看起来很有挑战性。但是我认为可以通过缩短阵列来解决..。
问题描述
任务。在一条线上给你一组点,在一条线上给一组段。目标是为每个点计算包含此点的段数。
输入格式。第一行包含两个非负整数s和p,分别定义一行上的段数和点数。下一行包含两个整数ai,bi定义I-段ai,bi.下一行包含定义点x1,x2,的p整数。。。、xp.
约束。1≤,≤50000;−108≤≤≤108用于所有0≤<;−108≤≤108,用于所有0≤<。
输出格式.输出p非负整数k0,k1 .。。,k(p-1),其中ki是包含xi的片段数。
样本1。 输入: 2 3 0 5 7 10 1 6 11 输出:
1 0 0
在这里,我们有两个部分和三个点。第一点仅在第一部分,而其余两点不在所有给定部分之外。
我想通过使用的JS来创建一个函数,通过比较数组的第一项来缩短数组的项,并在最佳时间复杂度中返回该shortedArray。我怎么能这么做?
示例:
let segments = [[ [ 1, 'L' ], [ 2, 'R' ] ], [ [ 0, 'L' ], [ 15, 'R' ] ], [ [ 7, 'L' ], [ 10, 'R' ] ] ] ;
let points = [ [ 1, 'P' ], [ 6, 'P' ], [ 11, 'P' ] ] ;
newArray应该是:
shortedArray = [[0,'L'],[1,'L'],[1,'P'],[2,'R'],[6,'P'],[7,'L'],[10,'R'],[11,'P'],[15,'R']] ;
我已经从数组中删除了小苞片,并使它们变得基本。
示例
我不知道如何将段数组转换为下面的
segments = [ [ 0, 'L' ], [ 15, 'R' ], [ 7, 'L' ], [ 10, 'R' ] ] ;
发布于 2022-05-27 08:25:21
您可以使用flat()
和sort()
的组合对其进行归档。您必须使用平面,因为您的第一个数组有另一个结构作为第二个。
const segments = [ [ [ 0, 'L' ], [ 15, 'R' ] ], [ [ 7, 'L' ], [ 10, 'R' ] ] ] ;
const points = [ [ 1, 'P' ], [ 6, 'P' ], [ 11, 'P' ] ];
const a = [...segments.flat(),...points].sort((a, b) => a[0] - b[0])
console.log(a)
flat()
对象/阵列/平面
sort()
对象/数组/排序
发布于 2022-05-27 08:58:05
使用Array.prototype.concat将数组连接到一个数组中,然后根据其第一个值对该数组进行排序。
const
segments = [ [ [ 0, 'L' ], [ 15, 'R' ] ], [ [ 7, 'L' ], [ 10, 'R' ] ] ],
points = [ [ 1, 'P' ], [ 6, 'P' ], [ 11, 'P' ] ],
result = [].concat(...segments, points).sort(([a], [b]) => a - b);
console.log(result);
其他相关文件:
https://stackoverflow.com/questions/72402398
复制相似问题