最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言雙指針?biāo)惴ㄅ笥堰^(guò)情人節(jié)我過(guò)算法

 更新時(shí)間:2022年02月14日 14:11:15   作者:?jiǎn)虇碳业凝堼? 
這篇文章主要為大家介紹了C語(yǔ)言中雙指針?biāo)惴ǖ氖纠斀猓行枰呐笥芽梢越梃b參考下,希望能夠有所幫助

雙指針

首先咱得知道何為雙指針,聽(tīng)起來(lái)很上流,其實(shí)有手就行。

雙指針,指的是在遍歷對(duì)象的過(guò)程中,不是普通的使用單個(gè)指針進(jìn)行訪問(wèn),而是使用兩個(gè)相同方向(快慢指針)或者相反方向(對(duì)撞指針)的指針進(jìn)行掃描,從而達(dá)到相應(yīng)的目的。

換言之,雙指針?lè)ǔ浞质褂昧藬?shù)組有序這一特征,當(dāng)遇到有序數(shù)組時(shí),應(yīng)該優(yōu)先想到雙指針來(lái)解決問(wèn)題,因兩個(gè)指針的同時(shí)遍歷會(huì)減少空間復(fù)雜度和時(shí)間復(fù)雜度從而在某些情況下能夠簡(jiǎn)化運(yùn)算

在這里插入圖片描述

對(duì)撞指針

類似于相遇問(wèn)題,對(duì)撞指針是指在有序數(shù)組中,將指向最左側(cè)的索引定義為左指針,最右側(cè)的定義為右指針,然后分別從兩側(cè)出發(fā),相向遍歷鏈表,這個(gè)過(guò)程就形象化為對(duì)撞,習(xí)慣上就將左右指針定義為 left 和 right,我們給出一個(gè)大致代碼邏輯:

void hit(int *arr,int arrsize)
{
int* left = arr;
int* right = arr + arrsize -1;
while(left<=right)
{
條件語(yǔ)句;
left++;
條件語(yǔ)句;
right--;
}
}

對(duì)撞指針適用于二分查找,鏈表對(duì)象求和等,也就是說(shuō)當(dāng)你遇到題目給定有序數(shù)組時(shí),應(yīng)該第一時(shí)間想到的思路就是使用對(duì)撞指針。

快慢指針

類似于龜兔賽跑,快慢指針是兩個(gè)鏈表上的指針從同一節(jié)點(diǎn)出發(fā),其中一個(gè)指針前進(jìn)速度比另一個(gè)快,兩個(gè)指針以不同的策略移動(dòng),直到兩個(gè)指針的值達(dá)成某個(gè)條件為止,如圖(ppt繪圖+手殘勿噴):

在這里插入圖片描述

我們同樣將左右指針定義為 slow,fast,要實(shí)現(xiàn)其中一個(gè)指針比另一個(gè)快,我們無(wú)可厚非就兩種方法:

1.同時(shí)起步,fast 比 slow 多走n步;

2.fast 先走,slow后走;

那我們給出他的邏輯代碼:
同時(shí)走:

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++;
}
}

真題實(shí)戰(zhàn)

1.調(diào)整數(shù)組順序使奇數(shù)位于偶數(shù)前面

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;
}

這道題就是典型的對(duì)撞指針,我們遍歷完整個(gè)數(shù)組時(shí),左右指針路程各自一半,只需要 left 尋找奇數(shù),right 尋找偶數(shù)做交換即可。

==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;
}  

這是典型的快慢指針,第一個(gè)指針用來(lái)遍歷數(shù)組元素,判斷是不是要?jiǎng)h除的數(shù),第二個(gè)指針用來(lái)存放數(shù)字。如果第一個(gè)指針指向的是要?jiǎng)h除的元素,那么輸出用來(lái)存放輸出數(shù)組元素個(gè)數(shù)的整形變量sz就自減 1,然后第一個(gè)指針向后移動(dòng)一位,第二個(gè)指針不動(dòng);如果第一個(gè)指針指向的不是要?jiǎng)h除的數(shù),那么就把這個(gè)數(shù)放到第二個(gè)指針指向的位置,然后第一個(gè)指針和第二個(gè)指針都向后移動(dòng)一位。重復(fù)操作直到第一個(gè)指針遍歷整個(gè)數(shù)組,此方法的時(shí)間復(fù)雜度是O(n)。

今天就到這里了,摸了家人們,情人節(jié)快樂(lè)!更多關(guān)于C語(yǔ)言雙指針?biāo)惴ǖ馁Y料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 如何利用C語(yǔ)言實(shí)現(xiàn)最簡(jiǎn)單的HTTP服務(wù)器詳解

    如何利用C語(yǔ)言實(shí)現(xiàn)最簡(jiǎn)單的HTTP服務(wù)器詳解

    這篇文章主要給大家介紹了關(guān)于如何利用C語(yǔ)言實(shí)現(xiàn)最簡(jiǎn)單的HTTP服務(wù)器的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C語(yǔ)言具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • c++版線程池和任務(wù)池示例

    c++版線程池和任務(wù)池示例

    這篇文章主要介紹了c++版線程池和任務(wù)池,實(shí)現(xiàn)任務(wù)執(zhí)行完畢線程退出.在linux下壓力測(cè)試通過(guò)
    2014-03-03
  • C語(yǔ)言使用四種方法初始化結(jié)構(gòu)體

    C語(yǔ)言使用四種方法初始化結(jié)構(gòu)體

    這篇文章說(shuō)明了什么是結(jié)構(gòu)體,介紹了結(jié)構(gòu)體的概念和使用優(yōu)點(diǎn),在C語(yǔ)言中如何使用和初始化結(jié)構(gòu)體方法,通過(guò)詳細(xì)的代碼展開進(jìn)行說(shuō)明,希望該篇文章對(duì)你有所幫助
    2021-06-06
  • C/C++可變參數(shù)函數(shù)的實(shí)現(xiàn)

    C/C++可變參數(shù)函數(shù)的實(shí)現(xiàn)

    這篇文章主要介紹了C/C++可變參數(shù)函數(shù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • VC6.0常用快捷鍵大全

    VC6.0常用快捷鍵大全

    這篇文章主要介紹了VC6.0常用快捷鍵大全,非常實(shí)用,需要的朋友可以參考下
    2014-08-08
  • C語(yǔ)言類的基本語(yǔ)法詳解

    C語(yǔ)言類的基本語(yǔ)法詳解

    大家好,本篇文章主要講的是C語(yǔ)言類的基本語(yǔ)法詳解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • C++算法系列之日歷生成的算法代碼

    C++算法系列之日歷生成的算法代碼

    日歷算法首先要知道日歷的編排規(guī)則,也就是歷法。所謂歷法,指的就是推算年、月、日的時(shí)間長(zhǎng)度和它們之間的關(guān)系,指定時(shí)間序列的法則。
    2018-05-05
  • 詳解OpenMP的線程同步機(jī)制

    詳解OpenMP的線程同步機(jī)制

    在本篇文章當(dāng)中主要給大家介紹?OpenMP?當(dāng)中線程的同步和互斥機(jī)制,在?OpenMP?當(dāng)中主要有三種不同的線程之間的互斥方式。下面就來(lái)和大家來(lái)討論一下OpenMP當(dāng)中的互斥操作,需要的可以參考一下
    2023-01-01
  • C語(yǔ)言基于graphics.h實(shí)現(xiàn)圣誕樹

    C語(yǔ)言基于graphics.h實(shí)現(xiàn)圣誕樹

    這篇文章主要介紹了圣誕樹代碼,c語(yǔ)言編程,基于graphics.h實(shí)現(xiàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • C語(yǔ)言實(shí)現(xiàn)棧及棧的詳解

    C語(yǔ)言實(shí)現(xiàn)棧及棧的詳解

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)棧及棧的詳解,一種特殊的線性表,其只允許在固定的一端進(jìn)行插入和刪除元素操作,進(jìn)行數(shù)據(jù)插入和刪除操作的一端稱為棧頂,另一端稱為棧底,需要的朋友可以參考下
    2023-07-07

最新評(píng)論

红安县| 樟树市| 昌平区| 荔浦县| 台安县| 涞水县| 塔河县| 孝义市| 滁州市| 德安县| 连城县| 墨玉县| 辽阳市| 仁寿县| 高淳县| 镇坪县| 山东省| 奇台县| 韶关市| 梁河县| 扶余县| 资源县| 祁连县| 江山市| 金湖县| 台前县| 大港区| 荆州市| 金堂县| 双流县| 淮滨县| 天台县| 铁岭县| 申扎县| 项城市| 灵石县| 佛坪县| 册亨县| 特克斯县| 乳山市| 南城县|