gpt4 book ai didi

java - 数组相关问题的时间复杂度

转载 作者:行者123 更新时间:2023-12-02 11:24:33 25 4
gpt4 key购买 nike

给出一个由N个整数组成的非空数组A。该数组包含奇数个元素,并且数组的每个元素都可以与具有相同值的另一个元素配对,但一个未配对的元素除外。

例如,在数组 A 中:

A[0] = 9 A[1] = 3 A[2] = 9 A[3] = 3 A[4] = 9 A[5] = 7 A[6] = 9索引 0 和 2 处的元素值为 9,索引 1 和 3 处的元素值为 3,索引 4 和 6 处的元素值为 9,索引 5 处的元素的值为 7 并且未配对。编写一个函数:

class Solution { public int Solution(int[] A); }

给定一个由满足上述条件的 N 个整数组成的数组 A,返回未配对元素的值。

例如,给定数组 A:

A[0] = 9 A[1] = 3 A[2] = 9 A[3] = 3 A[4] = 9 A[5] = 7 A[6] = 9该函数应返回 7,如上面示例中所述。

为以下假设编写一个有效的算法:

N是[1..1,000,000]范围内的奇数;数组 A 的每个元素都是 [1..1,000,000,000] 范围内的整数;A 中除一个值外的所有值都出现偶数次。

我的解决方案

我的解决方案在这些情况下失败了,我愿意来自SO社区的指导我如何思考这个问题,以便我能够克服这些失败

class Solution {
public int solution(int[] A) {
int[] result = new int[(int) Math.ceil((double)A.length/2)];
for(int x = 0 ; x < result.length ; x++ ){
result[x] = -1;
}
for(int x = 0 ; x < A.length ; x++ ){
for(int y = 0 ; y < result.length ; y++){
if(result[y] > -1 && result[y]== A[x])
{
result[y] = -2;
break;
}
if(result[y] == -1 )
{
result[y] = A[x];
break;
}
}
}

for(int x = 0 ; x < result.length ; x++ ){
if(result[x] > -1){
return result[x];
}
}
return -1;
}
}

失败

中等随机测试 n=100,003被杀了。已达到硬限制:7.000 秒。

大随机测试 n=999,999,多次重复被杀了。已达到硬限制:14.000 秒。

大随机测试 n=999,999被杀了。已达到硬限制:19.000 秒。

最佳答案

如果保证输入只有一个不成对的元素,则通过对所有元素进行异或来识别它是非常简单的。

int x = A[0];
for ( int i = 1; i < A.length; i++ )
x = x ^ A[i];

结果值是未配对的值。

示例:

public static void main (String[] args) throws java.lang.Exception
{
int[] A = {9, 3, 9, 2, 4, 2, 4, 7, 3};
int x = A[0];
for ( int i = 1; i < A.length; i++ )
x = x ^ A[i];
System.out.println(x);
}

输出为 7。

时间复杂度为O(n)

这是有效的,因为数字与其自身的异或为零。

关于java - 数组相关问题的时间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61753979/

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