Java 交换的进一步优化

Java 交换的进一步优化,java,algorithm,data-structures,computer-science,Java,Algorithm,Data Structures,Computer Science,在一次采访中,我被问到一个问题,交换两个变量,我给出了以下代码: package com.main; public class Test { public static void main(String[] args) { int var1 = 6, var2 = 10; System.out.println("Before Swap var1 = "+var1+" and var2 = "+var2);

在一次采访中,我被问到一个问题,交换两个变量,我给出了以下代码:

package com.main;

public class Test {

    public static void main(String[] args) {
        int var1 = 6, var2 = 10;
        System.out.println("Before Swap var1 = "+var1+" and var2 = "+var2);
        int temp = var1;
        var1 = var2;
        var2 = temp;
        System.out.println("After Swap var1 = "+var1+" and var2 = "+var2);
    }

}

不过,采访者表示,可以进一步优化。它的时间复杂度是O(1)&空间复杂度也是O(1)。还有什么可以优化的呢?

没有。面试官是个白痴

他们在找这个。他们这样做很可笑,而期望被采访者明白这一点是愚蠢的,因此我称他们为白痴。我不建议你用真正的代码来写。我不会建议您主动“不知道”某件事,因为所有的知识都是有价值的,但考虑到您永远不应该在实际代码中这样做,并且这将对性能产生的影响是您永远无法衡量的,知道这一点的价值非常低:

var1 = var1 ^ var2;
var2 = var1 ^ var2;
var1 = var1 ^ var2;
这看起来很时髦,但尝试一下,你会发现它“有效”

实际上,如果有什么区别的话,它可能比你写的要慢,但是解释为什么需要一年的时间来研究CPU和管道是如何工作的


在解释上述操作的原因时,请在web上搜索按位异或的功能(
^
在java中是按位异或),选择一些示例数字,例如4和5,并试一试。一步一步地看。或者在网上搜索解释,大量的博客文章解释了这种情况。

您可以使用按位异或运算符来避免辅助空格

FYR代码:

int var1 = 6, var2 = 10;
var1 = var1 ^ var2 ^ (var2 = var1);
System.out.println("After Swap var1 = "+var1+" and var2 = "+var2);
替代品

交换变量有多种方法,例如使用加法和减法或乘法和除法等算术运算符。我发现这些方法和GFG有助于理解各种方法的优缺点


空间和时间方面的复杂性仍然与渐进分析相同。

他们可能在寻找“聪明”(贬义)的解决方案
x=x^y;y=x^y;x=x^y。请注意,这是一个糟糕的代码。你的已经是O(1),非常容易阅读,适用于任何类型。参考号:。永远不要在真正的代码中这样做。避免那些希望你在面试中这样做的公司。这只是为了聪明而聪明的代码。优化代码的方法是。。。让JIT为你做这件事。编译器在微观优化方面比您要好得多,如果这部分代码确实是一个瓶颈,那么不管怎样,您的解决方案和面试官的解决方案都会被同一个机器代码所束缚。