欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)文章

  • OpenCV實(shí)現(xiàn)區(qū)域分割和區(qū)域生長(zhǎng)

    OpenCV實(shí)現(xiàn)區(qū)域分割和區(qū)域生長(zhǎng)

    區(qū)域分割是圖像處理中一個(gè)重要的任務(wù),本文主要介紹了OpenCV實(shí)現(xiàn)區(qū)域分割和區(qū)域生長(zhǎng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02
  • VC++時(shí)鐘函數(shù)

    VC++時(shí)鐘函數(shù)

    VC中提供了很多關(guān)于時(shí)間操作的函數(shù),編寫程序時(shí)我們可以跟據(jù)定時(shí)的不同精度要求選擇不同的時(shí)間函數(shù)來(lái)完成定時(shí)和計(jì)時(shí)操作
    2015-06-06
  • C++ 實(shí)現(xiàn)靜態(tài)單鏈表的實(shí)例

    C++ 實(shí)現(xiàn)靜態(tài)單鏈表的實(shí)例

    這篇文章主要介紹了C++ 實(shí)現(xiàn)靜態(tài)單鏈表的實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 關(guān)于C++虛函數(shù)與靜態(tài)、動(dòng)態(tài)綁定的問(wèn)題

    關(guān)于C++虛函數(shù)與靜態(tài)、動(dòng)態(tài)綁定的問(wèn)題

    這篇文章主要介紹了C++虛函數(shù)與靜態(tài)、動(dòng)態(tài)綁定,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-10-10
  • C語(yǔ)言示例講解while循環(huán)語(yǔ)句的用法

    C語(yǔ)言示例講解while循環(huán)語(yǔ)句的用法

    在不少實(shí)際問(wèn)題中有許多具有規(guī)律性的重復(fù)操作,因此在程序中就需要重復(fù)執(zhí)行某些語(yǔ)句。一組被重復(fù)執(zhí)行的語(yǔ)句稱之為循環(huán)體,C語(yǔ)言while語(yǔ)句可以是單個(gè)語(yǔ)句,也可以是一個(gè)語(yǔ)句塊,其條件可以是任意表達(dá)式,true是任意非零值,當(dāng)條件為真時(shí),循環(huán)進(jìn)行迭代
    2022-06-06
  • QT自定義QTextEdit實(shí)現(xiàn)大數(shù)據(jù)的實(shí)時(shí)刷新顯示功能實(shí)例

    QT自定義QTextEdit實(shí)現(xiàn)大數(shù)據(jù)的實(shí)時(shí)刷新顯示功能實(shí)例

    TextEdit是我們常用的Qt控件,用來(lái)顯示文本信息,下面這篇文章主要給大家介紹了關(guān)于QT自定義QTextEdit實(shí)現(xiàn)大數(shù)據(jù)的實(shí)時(shí)刷新顯示功能的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • C++右值引用與move和forward函數(shù)的使用詳解

    C++右值引用與move和forward函數(shù)的使用詳解

    為了支持移動(dòng)操作,新標(biāo)準(zhǔn)引入了一種新的引用類型——右值引用(rvalue reference)。所謂右值引用就是必須綁定到右值的引用,這篇文章主要介紹了C++右值引用與move和forward的使用
    2022-08-08
  • C++實(shí)現(xiàn)通訊錄管理系統(tǒng)項(xiàng)目

    C++實(shí)現(xiàn)通訊錄管理系統(tǒng)項(xiàng)目

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)通訊錄管理系統(tǒng)項(xiàng)目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C++?AnimeGAN實(shí)現(xiàn)照片一鍵動(dòng)漫化

    C++?AnimeGAN實(shí)現(xiàn)照片一鍵動(dòng)漫化

    AnimeGAN是是由神經(jīng)網(wǎng)絡(luò)風(fēng)格遷移加生成對(duì)抗網(wǎng)絡(luò)(GAN)而成,它是基于CartoonGAN的改進(jìn),并提出了一個(gè)更加輕量級(jí)的生成器架構(gòu)。本文將介紹如何運(yùn)用AnimeGAN實(shí)現(xiàn)照片一鍵動(dòng)漫化,需要的可以參考一下
    2021-11-11
  • C語(yǔ)言之循環(huán)語(yǔ)句詳細(xì)介紹

    C語(yǔ)言之循環(huán)語(yǔ)句詳細(xì)介紹

    大家好,本篇文章主要講的是C語(yǔ)言之循環(huán)語(yǔ)句詳細(xì)介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12

最新評(píng)論