对数组进行排序时将匹配元素保留在其位置

问题描述 投票:0回答:1

我正在尝试按降序对 6 个整数的数组进行排序(javascript),但在对其他值进行排序时将匹配值保留在其位置。下面贴出一个例子来帮助解释这个问题:

输入:4、2、5、4、7、3 输出:4,7,5,4,3,2

另一个具有多个匹配值的示例:

输入:3,4,3,4,2,8 输出:3,4,3,4,8,2

如果没有匹配值:

输入: 6, 2, 9, 5, 3, 4 输出: 9, 6, 5, 4, 3, 2

首先,您需要检查是否有任何值匹配,以及哪些值匹配。我不太确定在这种情况下如何做到这一点。我也不确定如何对数组中除匹配值之外的所有其他值进行排序。预先感谢!

我尝试对数组的长度运行一个 for 循环,检查每个数字以查看是否有任何匹配项,但这会导致重复的值并且无法更接近解决方案

javascript arrays sorting
1个回答
0
投票

您可以使用 2 个地图和 1 个集合来收集值和索引以进行排序和推送到:

const arr = [4, 2, 5, 4, 7, 3];

const found = new Map, indices = new Map, deleted = new Set;

for(let i = 0; i < arr.length; i++){
  const v = arr[i]; 
  if(deleted.has(v)) continue;
  if(found.has(v)){
    deleted.add(v);
    indices.delete(found.get(v));
    continue;
  }
  found.set(v, i);
  indices.set(i, v);
}

const result = [...arr];
const indices2 = [...indices.keys()];
[...indices.values()].sort((a, b) => b - a).forEach((a, i) => result[indices2[i]] = a);

console.log(...result);

© www.soinside.com 2019 - 2024. All rights reserved.