有没有办法使用单个循环比较数组中的每个元素?

用户9211

我需要打印一个int数组的任何两个元素之间的最小差异。

数组的每个元素A均小于其长度。

1 <= A[i] <= A.length;

我已经在Java中尝试了以下给定的方法-但是,当数组大小为〜10 ^ 5时,这需要1秒钟以上的时间才能找到结果。

我认为这可能是一种幼稚的方法。有什么办法可以进一步优化它?能做到O(n)时间复杂吗?

static int findResult(int[] arr)
        {
                 int max =  Integer.MAX_VALUE;
                 HashSet<Integer> hs = new HashSet<Integer>();
                 for(int obj : arr)
                 {
                     hs.add(obj);
                 }
                if(hs.size()==1 )
                {
                    return 0;             // if all elements are same
                }
                 for(int i=0; i<arr.length; i++)
                 {  
                     for(int j=i+1; j<arr.length; j++)
                     {
                         int value = Math.abs(a[i]-a[j]);
                         if(value<max)
                         {
                            max = value;
                         }

                      }         
                }
        return max;  // returns the smallest positive difference
    }
威廉·范昂塞姆

1≤x≤NO(n)的

由于每一个X也认为1≤x≤N,它认为,由于鸽巢原理,或者所有值恰好存在一次,或值存在两次或更多次

在前一种情况下,差异为1(对于大于1个元素的数组),在后一种情况下,结果为0,因为那时有两个项完全相等。

因此,我们可以遍历数组并跟踪数字。如果一个数字已经存在一次,则返回0,否则返回1,例如:

// only if it holds that for all i, 1 <= arr[i] <= arr.length
static int findResult(int[] arr) {
    bool[] found = new bool[arr.length]
    for(int i = 0; i < arr.length; i++) {
        if(found[arr[i]-1]) {
            return 0;
        } else {
            found[arr[i]-1] = true;
        }
    }
    return 1;
}

对于满足n个元素条件的随机数组,在n!/ n n的情况下,它将返回1,而在其他情况下,它将返回0,因此随机输入的平均值为n!/ n n随着n的增大,不存在“冲突”的可能性变得很小,因此,正如@YvesDaoust所说,近似的0可能性很大。

如果没有1≤x≤N为O(n log n)的

如果我们删除约束,我们可以首先对数组进行排序,在这种情况下,我们遍历连续的元素:

static int findResult(int[] arr) {
    Arrays.sort(arr);
    int dmin = arr[1] - arr[0];
    for(int i = 2; i < arr.length; i++) {
        int d = arr[i] - arr[i-1];
        if(d < dmin) {
            if(d == 0) {
                return 0;
            }
            dmin = d;
        }
    }
    return dmin;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有没有办法从存储为常规Observable的数组中返回单个元素?

有没有办法使用Angularjs在HTML元素中显示数组json对象

有没有办法使用 value(forKeyPath:) 访问 KVC 中的数组元素?

有没有办法针对单个元素?

有没有办法在嵌套 for 循环中访问生成器中每个元素的属性?

有没有办法将来自“readline”的用户输入与数组的元素进行比较?

有没有办法为文件夹中的每个图像调用返回单个图像使用 Codeigniter?

有没有办法在没有循环的情况下使用 bash 在数组中搜索相同性?

有没有办法从每个元素中获取所有特定段落?

有没有办法通过 for 循环创建数组元素?

有没有办法使用单个 for 循环索引列表矩阵?

有没有办法减少Flutter中NavigationRail中每个元素的高度?

有没有办法在 C++ 中并行循环遍历向量的所有元素?

有没有办法显示HTML中python数组中的所有元素?

有没有办法选择cheerio中的每个元素?

有没有办法在matlab中根据用户输入比较两个数组

有没有办法准确查看每个 XAML 元素使用多少内存?

有没有办法在使用循环时将函数的输出放入python中的数组中?

有没有办法在android studio中访问数组的所有元素?

有没有办法找到二维数组中输入值的每个索引?

有没有办法比较两个数组并返回具有相同索引的公共元素的新数组?

有没有办法有效地将每个数组值相互比较?

有没有办法使用css在html中隐藏没有id或class的元素?

有没有办法循环直到 VBA 中的多维数组已满?

有没有办法用新值重新填充数组,而不使用 for 循环?

有没有办法显示数组中的哪个元素验证失败?

有没有办法显示数组中的下一个元素?

有没有办法从方法更新/返回数组中的元素?

有没有办法将数组的元素与Ruby中的哈希键匹配?