美文网首页
重复值判断

重复值判断

作者: IT_Matters | 来源:发表于2016-06-27 17:09 被阅读144次

题目

请设计一个高效算法,判断数组中是否有重复值。必须保证额外空间复杂度为O(1)。
给定一个int数组A及它的大小n,请返回它是否有重复值。

测试样例:[1,2,3,4,5,5,6],7
返回:true

思路

如果没有空间复杂度的限制,我们应该用哈希的思想去做。但是本题要求空间复杂度必须为O(1)。所以我们先进行排序,再比较相邻的元素是否重复即可。所以我们需要一种空间复杂度为O(1)的排序算法,非递归的快速排序和堆排序都是时间复杂度O(n*lgn),空间复杂度O(1)的。这里我们选用堆排序,代码如下。

import java.util.*;

public class Checker {
    public boolean checkDuplicate(int[] a, int n) {
        heapSort(a);
        for(int i=0;i<n-1;i++){
            if(a[i]==a[i+1]){
                return true;
            }
        }
        return false;
    }
    
    private void heapSort(int []a){
        int hi=a.length-1;
       //建堆
        for(int i=(hi-1)/2;i>=0;i--){
            sink(a,i,hi);
        }
       //下沉排序
        for(int i=hi;i>=0;i--){
            swap(a,0,i);
            sink(a,0,i-1);
        }
    }
    
    private void sink(int[]a,int lo,int hi){
        int child;
        while((child=lo*2+1)<=hi){
            if(child<hi&&a[child]<a[child+1])child++;
            if(a[lo]>=a[child]) break;
            swap(a,lo,child);
            lo=child;
        }
    }

    private void swap(int[] A, int i, int j) {
        int temp = A[i];
        A[i] = A[j];
        A[j] = temp;
    }
        
}

相关文章

  • 重复值判断

    题目 请设计一个高效算法,判断数组中是否有重复值。必须保证额外空间复杂度为O(1)。给定一个int数组A及它的大小...

  • 图解Pandas重复值处理

    图解Pandas重复值处理 pandas中处理重复值使用的是两个函数: duplicated():判断是否有重复值...

  • 数据清洗函数

    数据清洗函数 duplicated() 判断序列元素是否重复, drop_ duplicates() #删除重复值...

  • 泛微实施记录(二)判断明细表数据重复

    重复数据判断 关键API WfForm.bindDetailFieldChangeEvent - 监听值变更事件 ...

  • 重复值判断练习题

    题目 请设计一个高效算法,判断数组中是否有重复值。必须保证额外空间复杂度为O(1)。给定一个int数组A及它的大小...

  • 判断两个 Set 是否相同

    Set可以看做是增强型的数组,它内部的重复值会被自动剔除,而且Set中重复的判断标准是根据值,而不是根据引用地址,...

  • 数组去重的的方法

    1、使用new Set去重 2、使用for嵌套循环删除重复的值 3、indexof判断新数组是否包含这个相同值 ...

  • LeetCode: 存在重复元素

    存在重复元素 English Description 给定一个整数数组,判断是否存在重复元素。 如果任何值在数组中...

  • [LeetCode][Python]217. 存在重复元素

    [LeetCode][Python]217. 存在重复元素 给定一个整数数组,判断是否存在重复元素。 如果任何值在...

  • Neo4j-spring data 基本使用,第三发

    创建索引 CREATE INDEX ON :Customer (userId); 创建索引 用一个属性值判断节点是否重复

网友评论

      本文标题:重复值判断

      本文链接:https://www.haomeiwen.com/subject/ubwzdttx.html