Java:KSum优化
我最近遇到了这个问题,从一对数字中找出了ksum,我得到了解决方案,但只是希望有一个更优化的解决方案:Java:KSum优化,java,Java,我最近遇到了这个问题,从一对数字中找出了ksum,我得到了解决方案,但只是希望有一个更优化的解决方案: public class KSum { public static void kSum(int[] array, int k){ for(int i=0;i<array.length;i++){ for(int j=i+1;j<array.length;j++){ if(k==(array[i]+a
public class KSum {
public static void kSum(int[] array, int k){
for(int i=0;i<array.length;i++){
for(int j=i+1;j<array.length;j++){
if(k==(array[i]+array[j])){
System.out.println("pair=("+array[i]+","+array[j]+")");
}
}
}
}
public static void main(String[] args) {
int[] array={1,2,3,4,5,6,7};
kSum(array, 7);
}
}
公共类KSum{
公共静态void kSum(int[]数组,int k){
对于(int i=0;i一个更有效的解决方案是对输入数组进行排序,并使用两个指针,一个从数组的开头开始,另一个在数组的结尾,在两个方向上遍历整个数组
根据基本逻辑,我们通过每次比较来推进两个指针,直到它们相遇
public static void kSum(int[] array, int K) {
Arrays.sort(array);
int start = 0, end = array.length - 1;
while (start <= end) {
int sum = array[start] + array[end];
if (sum < K) {
++start
} else if (sum > K) {
--end
} else {
System.out.println ("pair=(" + array[start] + "," + array[end] + ")");
++start;
--end;
}
}
publicstaticvoidksum(int[]数组,int K){
数组。排序(数组);
int start=0,end=array.length-1;
while(启动K){
--结束
}否则{
System.out.println(“pair=(“+array[start]+”,“+array[end]+”));
++开始;
--结束;
}
}
在这种情况下,时间复杂度是线性的,因此它是从原始的O(n^2)
优化的
对于这个问题,还有另一个解决方案,使用HashMap
[1]
--
[1]这个站点并不是为了优化工作代码,而是考虑询问,但是如果你走这条路线,请阅读他们的链接和它们的链接,因为他们的站点有高质量和包含/排除标准。我投票把这个问题关为离题,因为它询问的是工作代码。关于“优化”解决方案,你必须给出一个度量,一种判断你所说的优化是什么意思的方法。