<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
首先咱得知道何為雙指標,聽起來很上流,其實有手就行。
雙指標,指的是在遍歷物件的過程中,不是普通的使用單個指標進行存取,而是使用兩個相同方向(快慢指標)或者相反方向(對撞指標)的指標進行掃描,從而達到相應的目的。
換言之,雙指標法充分使用了陣列有序這一特徵,當遇到有序陣列時,應該優先想到雙指標來解決問題,因兩個指標的同時遍歷會減少空間複雜度和時間複雜度從而在某些情況下能夠簡化運算
類似於相遇問題,對撞指標是指在有序陣列中,將指向最左側的索引定義為左指標,最右側的定義為右指標,然後分別從兩側出發,相向遍歷連結串列,這個過程就形象化為對撞,習慣上就將左右指標定義為 left 和 right,我們給出一個大致程式碼邏輯:
void hit(int *arr,int arrsize) { int* left = arr; int* right = arr + arrsize -1; while(left<=right) { 條件語句; left++; 條件語句; right--; } }
對撞指標適用於二分查詢,連結串列物件求和等,也就是說當你遇到題目給定有序陣列時,應該第一時間想到的思路就是使用對撞指標。
類似於龜兔賽跑,快慢指標是兩個連結串列上的指標從同一節點出發,其中一個指標前進速度比另一個快,兩個指標以不同的策略移動,直到兩個指標的值達成某個條件為止,如圖(ppt繪圖+手殘勿噴):
我們同樣將左右指標定義為 slow,fast,要實現其中一個指標比另一個快,我們無可厚非就兩種方法:
1.同時起步,fast 比 slow 多走n步;
2.fast 先走,slow後走;
那我們給出他的邏輯程式碼:
同時走:
void speed(int *arr) { int* fast = arr; int* slow = arr; while(slow<fast) { 條件; slow++(非條件下fast++); } }
先後走:
void speed(int *arr) { int* slow =arr; int* fast = arr; while(條件1) { slow++; } while(條件2) { fast++; } }
1.調整陣列順序使奇數位於偶數前面
int* reOrderArray(int* array, int arrayLen, int* returnSize ) { *returnSize = arrayLen; int* left = array; int* right = array + arrayLen - 1; while (left < right)//(1) { while (left < right && *left % 2 == 1)//(2) left++; while (left < right && *right % 2 == 0)//(3) right--; if (left < right)//(4) { int tmp = *left; *left = *right; *right = tmp; } left++; right--; } return array; }
這道題就是典型的對撞指標,我們遍歷完整個陣列時,左右指標路程各自一半,只需要 left 尋找奇數,right 尋找偶數做交換即可。
==Ps.==這裡的* returnSize
2.Leetcode 真題:移除元素
int removeElement(int* nums, int numsSize, int val) { int* p1 = nums; int* p2 = nums; int sz = numsSize; for (; p1 < nums + numsSize; p1++) { if (*p1 != val) { *p2 = *p1; *p2++; } else sz--; } return sz; }
這是典型的快慢指標,第一個指標用來遍歷陣列元素,判斷是不是要刪除的數,第二個指標用來存放數位。如果第一個指標指向的是要刪除的元素,那麼輸出用來存放輸出陣列元素個數的整形變數sz就自減 1,然後第一個指標向後移動一位,第二個指標不動;如果第一個指標指向的不是要刪除的數,那麼就把這個數放到第二個指標指向的位置,然後第一個指標和第二個指標都向後移動一位。重複操作直到第一個指標遍歷整個陣列,此方法的時間複雜度是O(n)。
今天就到這裡了,摸了家人們,情人節快樂!更多關於C語言雙指標演演算法的資料請關注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