【问题标题】:219. Contains Duplicate II - Why solution using binary search works on unsorted array?219. Contains Duplicate II - 为什么使用二进制搜索的解决方案适用于未排序的数组?
【发布时间】:2020-12-22 09:53:28
【问题描述】:

问题: 给定一个整数数组和一个整数 k,找出数组中是否有两个不同的索引 i 和 j 使得 nums[i] = nums[j] 和绝对i 和 j 的差值最多为 k。

示例 1:

输入:nums = [1,2,3,1], k = 3 输出:true

我使用 HashSet(java) 解决了它。

但是当我浏览一些提交的解决方案时,下面的一个引起了我的注意:

 public boolean containsNearbyDuplicate(int[] nums, int k) 
    {
        int len = nums.length;
        
        for(int i=0; i<len; i++) 
        {
            int j = Arrays.binarySearch(nums, nums[i]);// Y this works as array is not sorted. Copied sol from submitted solution
            if(i != j && Math.abs(i-j) <= k) 
            {
                return true;
            }
        }
        
        return false;
    }
  1. 输入数组未排序,这也是此代码有效的原因,也是公认的解决方案。
  2. 如果问题是至少而不是最多的差异,那么如何解决它?

【问题讨论】:

  • 那段代码完整吗?

标签: arrays algorithm data-structures binary-search


【解决方案1】:

你怀疑这个解决方案的正确性,你是对的。这不是一个健全的算法。如果它通过了测试用例,那就说明测试不够彻底。

这是一个反例:

[9, 9, 1, 2, 3]
1

代码将返回false,而它应该返回true

很明显,如果执行二进制搜索以找到 9,将不会找到它,因为它会查找数组的后半部分。

【讨论】:

  • 现在他们添加了这个测试用例(我认为在看完这篇文章后我添加了标签 leetcode)。谢谢!
猜你喜欢
  • 2018-06-28
  • 1970-01-01
  • 2020-06-06
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
  • 2021-02-04
  • 2019-08-09
  • 2013-11-22
相关资源
最近更新 更多