有沒有高效點判斷容器中重複元素,和兩個容器相同的演算法?

時間 2021-06-01 14:00:18

1樓:

#include

#include

#include

#include

void

gao();

std::

vector

v2=

;std

::unordered_set

set1(v1

.begin

(),v1

.end

());

std::

unordered_set

set2(v2

.begin

(),v2

.end

());if(

v1.size

()==

set1

.size

())std

::cout

<<"v1中無重複元素"

<

endl

;else

std::

cout

<<"v1中有重複元素"

<

endl;if

(v2.size

()==

set2

.size

())std

::cout

<<"v2中無重複元素"

<

endl

;else

std::

cout

<<"v2中無重複元素"

<

endl;if

(set1

==set2

)std

::cout

<<"容器元素相同"

<

endl

;else

std::

cout

<<"容器元素不相同"

<

endl

;std

::vector

out1

(set1

.begin

(),set1

.end

());

std::

vector

out2

(set2

.begin

(),set2

.end

());

std::

for_each

(out1

.begin

(),out1

.end

(),(

intx

));std

::cout

<

endl

;std

::for_each

(out2

.begin

(),out2

.end

(),(

intx

));std

::cout

<

endl;}

題主我給你寫出來了。

複雜度看 @蕭井陌 的答案。

2樓:雷力明

排序是沒什麼必要了。

就像你自己說的,用set吧。使用set的話,所有的時間開銷幾乎就是建立set的開銷。

1.比較建立的set大小和轉換為set之前的容器的大小就可以知道有沒有重複。時間開銷忽略不計。

2.set本身去掉重複。沒有時間開銷。

3.比較一下兩個set就好。時間開銷也可以忽略不計。

綜上,總的時間開銷就是建立set的時間開銷。

題主說資料量不大,其實我覺得在這種情況下沒有必要追求效率,因為不管你怎麼優化,在cpu看來都是一回事,關鍵是先實現乙個正確的版本。

3樓:陳大白

1.BitSet

2.時間最優hashset ,空間最優排序

3.同2,當然在數量多且元素是其它型別(自定義的類或者字串之類)的時候,資訊指紋才是更好的方法

4樓:

你描述的太模糊了,使用場合,操作方式都沒有,窩就隨便扯點好了。

Q1:如果值域小那就用bit/頻域記一下就好了吧,如果值域太大的話set是跑不掉的排序或者怎麼搞都無所謂啦。。。

Q2:對頻域hash幾下咯。

有沒有瞬間讓你戳中淚點的話?

萌萌 你可不可以原諒我,可不可以再等等我。等等我吧,前路太險惡,世上這麼多人,只有你,是給我最多安全感的伴侶。請不要就這麼放棄我,請你別放棄我。我不再要那些一擊即碎的自尊了,我的自信也全是空穴來風,我要讓你看到,我現在有多卑微。 初老症患者 我問師傅,當年為啥選擇這個行業 刑警 他說,總得有人幹啊。...

有沒有推薦的愛情電影 會戳中淚點的那種?

Soledad The Titanic 最愛的電影沒有之一10歲沒看懂 20歲看明白了什麼是愛情 25歲再看淚流滿面 原來真的有一種愛超越生死輪迴 愛無止境我心永恆 You re going to get out of here.You re going to go on and you re go...

有沒有比較全面一點的各種狗狗病症或誤食中毒的應急急救辦法?

張小黑他姐 吃了毒物怎麼催吐?常見的狗狗吃了會導致生命危險的食物有巧克力 洋蔥 蔥薑蒜 葡萄 提子 果核 啤酒等。不小心吃到要盡快就醫,不要抱著僥倖心理。如過年期間正逢醫院休息,我們在家該如何急救?誤食後四個小時內是最佳的搶救時間,催吐是最直接有效的辦法。1.用筷子或者羽毛刺激喉嚨根部,催吐。2.3...