今天,我在 Coding Ninjas 上提交了一个代码,用于交换长度为 1 的数组中的两个整数。这是我提交的标准方法,花费了 O(1) 时间复杂度:
public class Solution {
public static void swapNumber(int[] a, int[] b) {
// Write your code here.
int temp = a[0];
a[0] = b[0];
b[0] = temp;
}
}
该方法简单高效,运行时间复杂度为 O(1)。然而,它的表现并没有达到预期,没有击败 99% 的其他提交作品。
相比之下,这是使用 Java 中的
Pair
类进行的另一个提交:
import java.util.*;
import java.io.*;
import javafx.util.Pair;
public class Solution {
public static Pair<Integer, Integer> swap(Pair<Integer, Integer> swapValues) {
int s = swapValues.getKey();
int ss = swapValues.getValue();
Pair<Integer, Integer> swap = new Pair<>(ss, s);
return swap;
// Write your code here.
}
}
此代码还交换两个整数,但使用
Pair
类来封装这些值。尽管创建和返回 Pair
对象涉及额外的步骤,但此方法在某种程度上与直接赋值方法的 O(1) 时间复杂度相竞争。
我很好奇使用
Pair
类如何在效率方面与直接赋值方法竞争。如果有人了解为什么 Pair
方法可能表现更好或同样好,我很想了解其根本原因。是由于 JavaFX Pair
类中的一些优化,还是还有其他因素在起作用?
如果您对此有任何了解,请解释一下。我渴望更多地了解这两种方法之间的性能差异。
在这里我发现了为什么会有这样的表现。
在这里如果发现为什么这样更快。
https://github.com/openjdk/jfx/blob/master/modules/javafx.base/src/main/java/javafx/util/Pair.java
它使用哈希表技术。
这使得它比分配更快。
意味着这也很有趣,在这种情况下,获取值表单表比赋值更快。如果您还有其他知识请留言......