Leetcode 961:重复N次元素

题目描述

在大小为2N的数组A中有N+1个不同的元素,其中一个元素重复了N次。返回重复了N次的那个元素。

示例1

输入:[1,2,3,3]

输出:3

示例2

输入:[2,1,2,5,3,2]

输出:2

示例3 

输入:[5,1,5,2,5,3,5,4]

输出:5

解题思路

本题最容易想到是对原始序列进行排序,然后通过判断中间位置元素是否与最后一个元素相等判断重复出现N次的元素。时间复杂度是O(nlogn)。虽然本题可以通过,但是在面试中很有可能被问到能否在O(N)时间复杂度内完成。考虑数字的排序情况,例如示例3:可以看成先放好 1,2,3,4 ,然后相当于在5个空格中插入4个5,所有可能出现的情况可以分为三类:出现两个5相邻;没有相邻的情况,但是第一个位置和第三个位置元素相等,或第一个位置和最后位置相等;重复的元素全部出现在偶数位置上。

O(NlogN):

int repeatedNTimes(vector<int>& A) {
        sort(A.begin(),A.end());
        return A[A.size()/2]==A[A.size()-1]?A[A.size()/2]:A[A.size()/2-1];
    }

O(N):

int repeatedNTimes(vector<int>& A) {
        int i,len = A.size();
        for(i=0;i<len - 1;i++){
            if(A[i] == A[i+1]) return A[i];
        }
        if(A[0] == A[2] || A[0] == A[A.size()-1]) return A[0];
        return A[1];
    }

猜你喜欢

转载自blog.csdn.net/weixin_35338624/article/details/88080661
今日推荐