91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Two Sum系列問(wèn)題的核心思想

算法與數(shù)據(jù)結(jié)構(gòu) ? 來(lái)源:算法與數(shù)據(jù)結(jié)構(gòu) ? 2019-11-27 16:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Two Sum系列問(wèn)題在 LeetCode 上有好幾道,這篇文章就挑出有代表性的兩道,介紹一下這種問(wèn)題怎么解決。

TwoSum I

這個(gè)問(wèn)題的最基本形式是這樣:給你一個(gè)數(shù)組和一個(gè)整數(shù)target,可以保證數(shù)組中存在兩個(gè)數(shù)的和為target,請(qǐng)你返回這兩個(gè)數(shù)的索引。

比如輸入nums = [3,1,3,6],target = 6,算法應(yīng)該返回?cái)?shù)組[0,2],因?yàn)?3 + 3 = 6。

這個(gè)問(wèn)題如何解決呢?首先最簡(jiǎn)單粗暴的辦法當(dāng)然是窮舉了:

這個(gè)解法非常直接,時(shí)間復(fù)雜度 O(N^2),空間復(fù)雜度 O(1)。

更好一點(diǎn)的解法,可以通過(guò)一個(gè)哈希表減少時(shí)間復(fù)雜度:

這樣,由于哈希表的查詢時(shí)間為 O(1),算法的時(shí)間復(fù)雜度降低到 O(N),但是需要 O(N) 的空間復(fù)雜度來(lái)存儲(chǔ)哈希表。不過(guò)綜合來(lái)看,是要比暴力解法高效的。

我覺(jué)得 Two Sum 系列問(wèn)題就是想教我們?nèi)绾问褂霉1硖幚韱?wèn)題。我們接著往后看。

TwoSum II

稍微修改一下上面的問(wèn)題,要求我們?cè)O(shè)計(jì)一個(gè)類,擁有兩個(gè) API

classTwoSum{ //向數(shù)據(jù)結(jié)構(gòu)中添加一個(gè)數(shù)number publicvoidadd(intnumber); //尋找當(dāng)前數(shù)據(jù)結(jié)構(gòu)中是否存在兩個(gè)數(shù)的和為value publicbooleanfind(intvalue); }

如何實(shí)現(xiàn)這兩個(gè) API 呢,我們可以仿照上一道題目,使用一個(gè)哈希表輔助find方法:

進(jìn)行find的時(shí)候有兩種情況,舉個(gè)例子:

情況一:如果連續(xù) add 了[3,2,3,5],那么freq是{3:2,2:1,5:1},執(zhí)行find(6),由于 3 出現(xiàn)了兩次,3 + 3 = 6,所以返回 true。

情況二:freq是{3:2,2:1,5:1},執(zhí)行find(7),那么key為 2,other為 5 時(shí)算法可以返回 true。

除了上述兩種情況外,find只能返回 false 了。

對(duì)于這個(gè)解法的時(shí)間復(fù)雜度呢,add方法是 O(1),find方法是 O(N),空間復(fù)雜度為 O(N),和上一道題目比較類似。

但是對(duì)于 API 的設(shè)計(jì),是需要考慮現(xiàn)實(shí)情況的。比如說(shuō),我們?cè)O(shè)計(jì)的這個(gè)類,使用find方法非常頻繁,那么每次都要 O(N) 的時(shí)間,豈不是很浪費(fèi)費(fèi)時(shí)間嗎?對(duì)于這種情況,我們是否可以做些優(yōu)化呢?

是的,對(duì)于頻繁使用find方法的場(chǎng)景,我們可以進(jìn)行優(yōu)化。我們可以參考上一道題目的暴力解法,借助哈希集合來(lái)針對(duì)性優(yōu)化find方法:

這樣sum中就儲(chǔ)存了所有加入數(shù)字可能組成的和,每次find只要花費(fèi) O(1) 的時(shí)間在集合中判斷一下是否存在就行了,顯然非常適合頻繁使用find的場(chǎng)景。

三、總結(jié)

對(duì)于 TwoSum 問(wèn)題,一個(gè)難點(diǎn)就是給的數(shù)組無(wú)序。對(duì)于一個(gè)無(wú)序的數(shù)組,我們似乎什么技巧也沒(méi)有,只能暴力窮舉所有可能。

一般情況下,我們會(huì)首先把數(shù)組排序再考慮雙指針技巧。TwoSum 啟發(fā)我們,HashMap 或者 HashSet 也可以幫助我們處理無(wú)序數(shù)組相關(guān)的簡(jiǎn)單問(wèn)題。

另外,設(shè)計(jì)的核心在于權(quán)衡,利用不同的數(shù)據(jù)結(jié)構(gòu),可以得到一些針對(duì)性的加強(qiáng)。

最后,如果 TwoSum I 中給的數(shù)組是有序的,應(yīng)該如何編寫算法呢?答案很簡(jiǎn)單,前文雙指針技巧匯總寫過(guò):

int[]twoSum(int[]nums,inttarget){ intleft=0,right=nums.length-1; while(lefttarget){ right--;//讓sum小一點(diǎn) } } //不存在這樣兩個(gè)數(shù) returnnewint[]{-1,-1}; }

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 存儲(chǔ)
    +關(guān)注

    關(guān)注

    13

    文章

    4798

    瀏覽量

    90084
  • 數(shù)組
    +關(guān)注

    關(guān)注

    1

    文章

    420

    瀏覽量

    27372

原文標(biāo)題:Two Sum 問(wèn)題的核心思想

文章出處:【微信號(hào):TheAlgorithm,微信公眾號(hào):算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    從氣體賦能到微觀霧化:深度解析AAFI技術(shù)如何破解重油發(fā)動(dòng)機(jī)燃燒難題

    空氣輔助燃油噴射技術(shù),本質(zhì)上屬于雙流體霧化技術(shù)范疇。其核心思想在于,利用一股高速流動(dòng)的壓縮氣體(氣相工質(zhì))與液態(tài)燃油(液相工質(zhì))發(fā)生強(qiáng)烈的相互作用,通過(guò)氣動(dòng)剪切力、界面不穩(wěn)定性以及氣泡膨脹等多重物理機(jī)制,將燃油破碎成微細(xì)液滴,從而實(shí)現(xiàn)高效霧化。
    的頭像 發(fā)表于 01-14 10:50 ?337次閱讀
    從氣體賦能到微觀霧化:深度解析AAFI技術(shù)如何破解重油發(fā)動(dòng)機(jī)燃燒難題

    一文說(shuō)透了如何實(shí)現(xiàn)單片機(jī)的多任務(wù)并發(fā)!

    資源,并且避免出現(xiàn)資源爭(zhēng)搶和堵塞的情況。 在單片機(jī)多任務(wù)并發(fā)中,常見(jiàn)的任務(wù)調(diào)度方式有兩種: 1. 時(shí)間片輪轉(zhuǎn)法 時(shí)間片輪轉(zhuǎn)法是多任務(wù)并發(fā)中最基本的調(diào)度算法之一,它的核心思想是輪流分配 CPU 時(shí)間片
    發(fā)表于 01-06 06:46

    CW32L012的PID溫度控制——算法基礎(chǔ)

    PID 控制算法是比例(Proportional)- 積分(Integral)- 微分(Derivative) 控制的簡(jiǎn)稱,是工業(yè)控制、嵌入式系統(tǒng)中最經(jīng)典、應(yīng)用最廣泛的閉環(huán)控制算法。它的核心思想
    的頭像 發(fā)表于 01-05 16:27 ?2026次閱讀
    CW32L012的PID溫度控制——算法基礎(chǔ)

    2CL 系列二極管核心優(yōu)勢(shì)

    高壓電子設(shè)備的整流核心元件,高壓超快恢復(fù)核心——2CL 系列
    的頭像 發(fā)表于 12-19 14:14 ?439次閱讀

    卸荷槽結(jié)構(gòu)創(chuàng)新:運(yùn)動(dòng)學(xué)法卸荷槽對(duì)齒輪泵容積效率提升機(jī)理及流量脈動(dòng)抑制研究

    基于運(yùn)動(dòng)法的卸荷槽設(shè)計(jì)核心思想是:從齒輪嚙合的運(yùn)動(dòng)規(guī)律出發(fā),精確分析困油容積的變化特性,以此為指導(dǎo)設(shè)計(jì)卸荷槽的位置、形狀和尺寸。與傳統(tǒng)方法相比,運(yùn)動(dòng)法考慮了齒輪嚙合過(guò)程中的連續(xù)運(yùn)動(dòng)特性,能夠更精準(zhǔn)地預(yù)測(cè)困油容積的變化趨勢(shì),從而實(shí)現(xiàn)卸荷槽的精準(zhǔn)設(shè)計(jì)。
    的頭像 發(fā)表于 11-25 10:16 ?621次閱讀
    卸荷槽結(jié)構(gòu)創(chuàng)新:運(yùn)動(dòng)學(xué)法卸荷槽對(duì)齒輪泵容積效率提升機(jī)理及流量脈動(dòng)抑制研究

    航空混合電推進(jìn)系統(tǒng)構(gòu)型分析與性能收益研究:串聯(lián)與并聯(lián)技術(shù)的路徑對(duì)比與展望

    混合電推進(jìn)系統(tǒng)的核心思想是將產(chǎn)生動(dòng)力的裝置與產(chǎn)生推力的裝置分離,通過(guò)電能分配與能量管理,使燃?xì)鉁u輪發(fā)動(dòng)機(jī)始終工作在最佳工況點(diǎn),同時(shí)通過(guò)分布式推進(jìn)改善飛機(jī)氣動(dòng)特性。
    的頭像 發(fā)表于 10-31 10:39 ?682次閱讀
    航空混合電推進(jìn)系統(tǒng)構(gòu)型分析與性能收益研究:串聯(lián)與并聯(lián)技術(shù)的路徑對(duì)比與展望

    實(shí)現(xiàn)環(huán)境計(jì)算真正的瓶頸究竟在哪里

    20世紀(jì)90年代初,計(jì)算機(jī)科學(xué)家Mark Weiser提出了“泛在計(jì)算”的理念,其核心思想是讓技術(shù)融入日常生活環(huán)境中[1]。盡管智能家居組件、傳感器網(wǎng)絡(luò)和智能設(shè)備取得了進(jìn)展,但環(huán)境計(jì)算這一概念依然難以實(shí)現(xiàn)。如今,我們已經(jīng)擁有了硬件基礎(chǔ)和連接能力。那么,真正的瓶頸究竟在哪里?
    的頭像 發(fā)表于 09-10 16:21 ?828次閱讀

    【「DeepSeek 核心技術(shù)揭秘」閱讀體驗(yàn)】+看視頻+看書籍+國(guó)產(chǎn)開(kāi)源大模型DeepSeekV3技術(shù)詳解--1

    Cache 瓶頸問(wèn)題。 我們將結(jié)合左側(cè)的架構(gòu)圖和右側(cè)的數(shù)學(xué)公式,一步步進(jìn)行推導(dǎo)和解釋。 1. 技術(shù)背景和核心思想 問(wèn)題: 標(biāo)準(zhǔn)的 Transformer 在處理長(zhǎng)文本時(shí),需要緩存所有過(guò)去 token
    發(fā)表于 08-23 15:20

    從入門級(jí)到旗艦款,全志T系列核心板怎么選?

    面對(duì)FET113i-S核心板、FET527N-C核心板和FET536-C核心板三款主流明星產(chǎn)品,工程師該如何選擇?本文將從核心配置、功能特性到行業(yè)適配性進(jìn)行全方位解析,助您找到匹配項(xiàng)目
    的頭像 發(fā)表于 06-27 08:06 ?1760次閱讀
    從入門級(jí)到旗艦款,全志T<b class='flag-5'>系列</b><b class='flag-5'>核心</b>板怎么選?

    鴻蒙5開(kāi)發(fā)寶藏案例分享---應(yīng)用性能優(yōu)化指南

    頓,打造絲滑應(yīng)用! **1. 控制狀態(tài)刷新 ** ? 核心思想 :狀態(tài)變量是UI刷新的觸發(fā)器,濫用會(huì)導(dǎo)致性能劣化。優(yōu)化策略 : 精簡(jiǎn)狀態(tài)變量 : 普通變量別用 <span class
    發(fā)表于 06-12 17:17

    北京君正如何借力開(kāi)源實(shí)現(xiàn)戰(zhàn)略轉(zhuǎn)型

    核心思想:指令集自主是生態(tài)可控的前提,君正如何借力開(kāi)源實(shí)現(xiàn)戰(zhàn)略轉(zhuǎn)型。
    的頭像 發(fā)表于 05-19 16:15 ?1122次閱讀

    相位累加器的實(shí)現(xiàn)原理

    標(biāo)題中所提到的DDS,我感覺(jué)這兩個(gè)放一起也可以,因?yàn)镈DS的核心思想就是使用的相位累加器。那么這玩意兒的作用是啥?簡(jiǎn)單來(lái)說(shuō)就是在FPGA工作主頻之下,可以生成任意頻率的周期信號(hào)出來(lái)。
    的頭像 發(fā)表于 05-16 13:56 ?1125次閱讀
    相位累加器的實(shí)現(xiàn)原理

    3568系列核心板:散熱難題這樣解決,你學(xué)會(huì)了嗎?

    在智能硬件領(lǐng)域,高性能核心板的散熱設(shè)計(jì)至關(guān)重要。本文將介紹ZLG致遠(yuǎn)電子3568系列核心版的高性能特性及其散熱解決方案,幫助您更好地了解產(chǎn)品優(yōu)勢(shì)。3568系列
    的頭像 發(fā)表于 05-15 11:34 ?871次閱讀
    3568<b class='flag-5'>系列</b><b class='flag-5'>核心</b>板:散熱難題這樣解決,你學(xué)會(huì)了嗎?

    完整版—單片機(jī)編程思想(推薦下載?。?/a>

    單片機(jī)的編程思想,希望能幫助大家寫出簡(jiǎn)明的代碼 內(nèi)容簡(jiǎn)介 以單片機(jī)裸環(huán)境為基礎(chǔ),為編程者定義了一個(gè)微操作系統(tǒng)(MOS)的編程環(huán)境,并面向應(yīng)用中不斷提高的需求對(duì)編程策略進(jìn)行了深度剖析與研究,從而分離
    發(fā)表于 04-16 15:06

    2x30W,60W無(wú)濾波器的高效模式-D類立體聲音頻功率放大器-IML6603

    ?D類立體聲音頻功率放大器的工作原理?基于脈寬調(diào)制(PWM)技術(shù)。其核心思想是將輸入的模擬信號(hào)轉(zhuǎn)換為脈沖流,并通過(guò)開(kāi)關(guān)晶體管(通常是MOSFET)進(jìn)行放大。
    的頭像 發(fā)表于 03-25 09:32 ?904次閱讀
    2x30W,60W無(wú)濾波器的高效模式-D類立體聲音頻功率放大器-IML6603