<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
雙指標演演算法
演演算法思想
雙指標,指的是在遍歷物件的過程中,不是普通的使用單個指標進行存取,而是使用兩個相同方向(快慢指標)或者相反方向(對撞指標)的指標進行掃描,從而達到相應的目的。
換言之,雙指標法充分使用了陣列有序這一特徵,從而在某些情況下能夠簡化一些運算。
今天帶大家來學習演演算法中雙指標的應用場景。
2.1 解題思路
利用雙指標,定義一個指標i和一個指標j
讓i開始走,固定住j,然後我們利用一個輔助陣列來記錄下每個字元出現的次數。
比如對於字串“abcabcdd”,當i走到第二個a的時候,a出現了兩次,這時候讓j開始向前走,走到b。
這時候i和j之間的字串是bca。沒有重複的,i可以繼續走,j繼續固定。
i走到b的時候b出現兩次。這時候要移動j直至沒有字元出現次數超過兩次。如此反覆直到i走到字串結尾。
2.2 程式碼實現
class Solution { public: /** * 程式碼中的類名、方法名、引數名已經指定,請勿修改,直接返回方法規定的值即可 * * * @param s string字串 * @return int整型 */ int lengthOfLongestSubstring(string s) { int len = s.length(); int S[128]; memset(S,0x00, sizeof(S)); int ans = 0; for(int i=0,j=0;i<len;++i) { S[s.at(i)]++; while(S[s.at(i)]>1) { S[s.at(j)]--; j++; } ans=max(ans,i-j+1); //更新區間最大長度 } return ans; } };
2.3 程式碼解析
首先定義陣列S[128],利用memset函數來初始化該陣列。
memset:作用是在一段記憶體塊中填充某個給定的值,它是對較大的結構體或陣列進行清零操作的一種最快方法。
for迴圈裡宣告i,j 為0,先讓字串的第一個字元對應的整數作為陣列S的下標,該位置元素值加一;
如果沒有重複字元,ans遞增;如果有重複字元今後進入while迴圈,隨著j的遞增,之前陣列裡為一的元素值都會減一,為2的元素值也會減一併變為一;
接著j固定,i繼續增長,再有重複字元就會重複上述操作,最終通過max函數得到最大的無重複子字串長度。
2.1 解題思路
根據題目可知該陣列是升序排列,那我們可以用兩個指標:一個在左邊界,一個在右邊界。
如果陣列下標對應的值相加比num小,那麼就讓左邊指標遞增,反之則右邊指標遞減。
如果左右指標相等,說明沒有滿足條件的數對,返回空陣列。
如果存在該數對,利用push_back方法插入陣列並返回即可
2.2 程式碼實現
class Solution { public: vector<int> FindNumbersWithSum(vector<int> array,int sum) { int left,right; int i,j,k; vector<int> res; left=0; right=array.size()-1; //如果陣列為空,返回空陣列 if(array.empty()){ return res; } while(array[left]+array[right]!=sum && left!=right){ if(array[left]+array[right]<sum){ left+=1; }else if(array[left]+array[right]>sum){ right-=1; } } //如果不存在該數對,返回空陣列 if(left==right){ return res; } //如果存在 res.push_back(array[left]); res.push_back(array[right]); return res; } };
本題思路確定後程式碼比較好理解,就沒有分析部分了。
這兩道題都是雙指標的解法:第一題相當於是相鄰指標,第二題則是雙端指標,各有特色。
到此這篇關於詳解C語言中雙指標演演算法的使用的文章就介紹到這了,更多相關C語言 雙指標演演算法內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45