Java 从数组中删除奇数出现值
Java 从数组中删除奇数出现值,java,Java,import java.util.*; 类解决方案{ 公共int解决方案(int[]A){ ArrayList B=新的ArrayList(); for(int i=0;i
import java.util.*;
类解决方案{
公共int解决方案(int[]A){
ArrayList B=新的ArrayList();
for(int i=0;i 对于(int j=1;j由于嵌套循环,您的代码的运行时间是O(n^2)
,因此对于大型输入来说太慢
在外循环的每次迭代中,检测并消除一对相等的元素。这意味着该循环将有(n-1)/2次迭代
在每次迭代中,您的内部循环可能会迭代数组的所有剩余元素,因此在最坏的情况下,内部循环的第一次执行将有n次迭代,第二次执行将有n-2次迭代,依此类推
因此,总运行时间受
n + n - 2 + n - 4 + ... + 3 = (n + 3)*(n - 1)/4 = O(n^2)
我建议您使用HashSet
存储您遇到的元素(如果不存在),如果存在则删除它们。这将需要线性时间(O(n)
)
类解决方案{
公共int解决方案(int[]A){
Set=newhashset();
for(int i=0;i更快的解决方案是使用按位异或(^):
类解决方案{
公共int解决方案(int[]A){
int结果=0;
for(int i=0;i
输入是什么,预期结果与实际结果是什么,为什么会预期结果?您是否调试了代码?(我不会访问外部链接来了解您的问题)我无法获取输入样本,因为它们位于CoDibility站点内部!CoDibility站点只提供我的代码结果t。t,因此,我无法调试。如果我可以调试,我就不会使用堆栈溢出!我在第一行添加代码结果的图片!我无法仅上载图像文件,因此我建议上载图像文件以进行链接缺少)
在这里(!set.add(A[i])Thx!!我将使用此代码并向您报告结果,如果您得到满分!!但我想知道我的代码在哪里,为什么wrong@Eran是的,我完全理解你的代码!而且对你很有感觉!所以我相信我的代码中没有错误的代码,只是性能不好。对吗?@Eran thx!我真的非常感谢你!我看到你了到目前为止,我第一次使用你的代码。我可以学习新技能,我可以用你的技能解决另一个问题!thx!thx!我可以理解你的代码!如果按位异或执行相同的数字,结果将变为0。因此,最后将保留没有对的数字!正确吗?这对研究编码世界非常有帮助@신상택 是的,你完全正确,这将是解决你问题的最快方法。
n + n - 2 + n - 4 + ... + 3 = (n + 3)*(n - 1)/4 = O(n^2)
class Solution {
public int solution(int[] A) {
Set<Integer> set = new HashSet<Integer>();
for(int i = 0; i < A.length; i++){
if (!set.add(A[i])) { // add will return false if A[i] is already in the Set,
// in which case we know we found a pair of equal numbers,
// so we remove that number
set.remove(A[i]);
}
}
return set.iterator().next(); // according to the problem description, there should
// be exactly one element left
}
}