gpt4 book ai didi

java - 基于两个数组按值对数组进行排序

转载 作者:行者123 更新时间:2023-12-02 16:13:21 25 4
gpt4 key购买 nike

我目前有2个阵列,功率和能量:

int[] power = [20, 10, 50, 10, 30, 5];
powerIndex 0 1 2 3 4 5
int[] energy = [20, 5, 15, 3, 10, 30];
energyIndex 0 1 2 3 4 5

我想要一个数组,其中功率数组的索引已排序(从最低到最高),并且如果功率数相同,则使用较少能量的功率应该获得第一个位置。所以基本上我想要的输出是:

int[] result = [5, 3, 1, 0, 4, 2]

这是我到目前为止的代码:

        int[] result = new int[power.length];
int answerIndex = 0;
int tempSmallest = Integer.MAX_VALUE;
int lastNumberSaved = 0;
int posWithSmallerPower = 0;


while (answerIndex < power.length) {

for (int i = 0; i < power.length; i++) {
int current = power[i];
if (tempSmallest > current && current > lastNumberSaved) {
tempSmallest = current;
posWithSmallerPower = i;
}

if (tempSmallest >= current && current > lastNumberSaved) {
if (current != lastNumberSaved && energy[posWithSmallerPower] > energy[i]) {
tempSmallest = current;
posWithSmallerPower = i;
}
}
}
answer[answerIndex] = posWithSmallerPower;
answerIndex++;
lastNumberSaved = tempSmallest;
tempSmallest = Integer.MAX_VALUE;
}

return answer;

我得到的是:[5,3,0,4,2,2]。再说一遍,我应该得到什么:[5,3,1,0,4,2]

我在处理具有相同编号的异能时遇到了麻烦。我确实在第二个数组中比较了它们的能量,实际上我首先获得了索引 3 中的功率,但随后代码完全忘记了也具有相同数字 (10) 的第二个功率。

我该如何实现这一目标?谢谢!

最佳答案

对于实现 Comparable 接口(interface)的临时数据结构来说,这似乎是一个很好的用例。 javadoc for Comparable解释了这是如何很好地工作的,但这是一个例子:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

public final class Main {

private static class Entry implements Comparable<Entry> {
private final int power;
private final int energy;
private final int index;

public Entry(int power, int energy, int index) {
this.power = power;
this.energy = energy;
this.index = index;
}

@Override
public int compareTo(Entry o) {
if (this.power != o.power) {
return this.power - o.power;
}
return this.energy - o.energy;
}
}

public static void main(String[] args) {
int[] power = {20, 10, 50, 10, 30, 5};
int[] energy = {20, 5, 15, 3, 10, 30};

List<Entry> entries = new ArrayList<>();
for (int i = 0; i < power.length; i++) {
entries.add(new Entry(power[i], energy[i], i));
}

Collections.sort(entries);
List<Integer> result = entries.stream()
.map(entry -> entry.index)
.collect(Collectors.toList());
System.out.println(result);
}
}

哪些输出:

[5, 3, 1, 0, 4, 2]

关于java - 基于两个数组按值对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59187712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com