第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在線等!C++ unordered_map訪問不存在的元素出現(xiàn)了很奇怪的問題求老司機指點!

在線等!C++ unordered_map訪問不存在的元素出現(xiàn)了很奇怪的問題求老司機指點!

哆啦的時光機 2019-09-09 21:29:00
下面的代碼在輸入[1,3,2,2,5,2,3,7]后返回5。classSolution{public:intfindLHS(vector&nums){//注意:子序列不要求連續(xù),子串要求連續(xù)//用哈希表統(tǒng)計一下unordered_mapump;for(intn:nums)if(ump.find(n)==ump.end())ump.insert(make_pair(n,1));elseump[n]++;intans=0;for(autoitem:ump){if(ump.find(item.first+1)!=ump.end())ans=max(ans,ump[item.first+1]+ump[item.first]);if(ump.find(item.first-1)!=ump.end())ans=max(ans,ump[item.first-1]+ump[item.first]);}returnans;}};如果將14,16行的if語句注釋掉,返回的竟然是1?這里明明是求max的操作,無論如何不可能得到比之前的5更小的值吧?這是在做LeetCode594時遇到的問題。另外,即使使用注釋掉了兩個if語句后的代碼,如果將輸入的第一個數(shù)字1改成某些數(shù)字,如數(shù)字8,那么該函數(shù)又能正常返回5了,這是為什么?
查看完整描述

2 回答

?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

這個代碼我看了下,應該是求無序map的連續(xù)兩個key的vaule之和的最大值,打印一下ump=std::unordered_mapwith5elements={[7]=1,[5]=1,[2]=3,[1]=1,[3]=2},可直觀的看到2和3連續(xù),并且ump[2]+ump[3]最大,即為5。
如果去掉兩個if判斷是否存在ump[key],就無法保證存在連續(xù)的key,如ump[7+1]就不存在,根據stakoverflow的描述,它會補充一個默認的值在ump[8];調試時打印ump如下
(gdb)pump
$1=std::unordered_mapwith5elements={[7]=1,[5]=1,[2]=3,[1]=1,[3]=2}
(gdb)pump
$2=std::unordered_mapwith6elements={[7]=1,[5]=1,[2]=3,[8]=0,[1]=1,[3]=2}
(gdb)pump
$3=std::unordered_mapwith7elements={[6]=0,[3]=2,[1]=1,[8]=0,[2]=3,[5]=1,[7]=1}
這時候ump的size會增大,遍歷一個在自增的map結局我也不知道會發(fā)生什么,我這里測試的是執(zhí)行完一輪就跳出for循環(huán)了。
                            
查看完整回答
反對 回復 2019-09-09
  • 2 回答
  • 0 關注
  • 467 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號