演算法之雙指標法(一)

2021-08-17 23:52:01 字數 1888 閱讀 3763

雙指標法在很多場景及演算法中都有使用

主要應用的演算法題如下:

乙個陣列中有奇數也有偶數,將所有奇數放到陣列左邊,將所有偶數放到陣列右邊

int array = ;

int i = 0;

int j = array.lentgh - 1;

while (i < j)

while(iarray[j] & 0x1 == 0)

if(i < j)

}

時間複雜度o(n)

乙個陣列中既有奇數也有偶數,奇數的下標是奇數,偶數的下標是偶數

int array = ;

int even = 0; //偶數

int odd = 1; //奇數

int end = array.length - 1;

while(even <= end && odd <= end)else

}for(int i =0; iprivate

static

void swap(int array, int a, int b)

時間複雜度o(n)

求乙個有序陣列中和等於8的下標

int array = ;

int i = 0;

int j = array.length - 1;

while(i < j)else

if(array[i] + array[j] > 8)else

}

時間複雜度o(n)

兩個有序數組合並且去重合成新陣列

int a = ;

int b = ;

int c = new int[a.length+b.length];

int i = 0; int j = 0; int k = 0;

while(i

< a.

length && j

< b.

length)

else

if(a[i] == b[j])

else

}while(i

< a.

length)

while(j

< b.

length)

for(int m = 0; m[m]; m++)

時間複雜度o(n)

快速排序

int array = ;

sortcore(array, 0, array.length -1);

private

static

void sortcore(int array, int startindex, int endindex)

int boundray = boundray(array, startindex, endindex);

sortcore(array, startindex, boundray - 1);

sortcore(array, boundray + 1, endindex);

}private

static

int boundray(int array, int startindex, int endindex)

array[leftindex] = array[rightindex];

while(leftindex < rightindex && array[leftindex] <= standard)

array[rightindex] = array[leftindex];

}array[leftindex] = standard;

return leftindex;

}

演算法之雙指標法 一

雙指標法在很多場景及演算法中都有使用 主要應用的演算法題如下 乙個陣列中有奇數也有偶數,將所有奇數放到陣列左邊,將所有偶數放到陣列右邊 int array int i 0 int j array.lentgh 1 while i j int even 0 偶數 int odd 1 奇數 int en...

演算法思維 雙指標法

雙指標可分為三類 其中,滑動視窗 已單獨寫了一篇隨筆,可跳轉檢視。在快慢指標中,又有一類典型演算法,叫 floyd s cycle finding algorithm,其又名floyd s hare and tortoise algorithm。在這裡,我們主要談論左右指標和快慢指標。左右指標 主要...

雙指標法LeetCode總結

遍歷物件的過程中,使用兩個指標進行操作,實現相應的目的 經典環形鍊錶 leetcode142 待補充適用於有序陣列,設定陣列左索引與陣列右索引 基本流程是 publicf int nums leetcode11 盛水最多的容器 class solution return max leetcode15...