C語言找出陣列中的特定元素的演算法解析

2022-10-04 01:54:08 字數 1079 閱讀 3246

問題描述:乙個程式設計客棧int陣列,裡面資料無任何限制,要求求出所有這樣的數a[i],其左邊的數都小於等於它,右邊的數都大於等於它。能否只用乙個額外陣列和少量其www.cppcns.com它空間實現。

思路:如果能用兩個輔助陣列,那麼相對來說簡單一點,可定義陣列min和陣列max,其中min[i]表示自a[i]之後的最小值(包括a[i]),max[i]表示自a[i]之前元素的最大值。有了這兩個輔助陣列後,對於a[i],如果它大於max[i-1]並且小於min[i+1],那麼就符合要求。

但是題目要求是只用乙個額外陣列,其實max陣列可以省去,完全可以邊判斷邊計算,這是因為max[i]是自左往右計算的,而判斷時也是自左往右,兩個過程正好可以合起來。只需用乙個變數max儲存一下當前的最大值即可。下面給出兩種方法的**實現。

參考**:

//函式功能 : 找元素

//函式引數 : parray指向陣列,len為陣列的元素個數

//返回值 : 無

void findelements_solution1(int *parray, int len)

找出陣列中兩個只出現一次的數字(陣列)

問題描述:乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是o(n),空間複雜度是o(1)。

思路:如果只有乙個數字只出現一次,而其他都出現兩次,則直接將所有數字做一次異或運算即可,因為相等的數字異或一下結果為0。如果有兩個數字只出現一次,而其他數字出現了兩次。該怎麼辦呢?《程式設計之美》一書提供了一種方法,即先將所有數字做一次異或運算,得到乙個數字,然後以該數字的某非0位作為過濾位,將陣列分成兩個部分,此時只出現一次的數字會被分到不同的部分。現在問題就轉為只出現一次的情況,對每部分分別做異或運算即可。

參考**:

//函式功能 : 找出陣列中兩個只出現一次的數字

//函式引數 : arr為源陣列,len為陣列元素個數,result用來存放結果

//返回值 : 無

void findisolatetwo(int *arr, int len, int *result)

}本文標題: c語言找出陣列中的特定元素的演算法解析

本文位址:

找出陣列中重複的元素

方法一 使用位圖法,再申請乙個陣列b,用b a i 儲存a i 的重複次數 方法二 使用map對映表。map是乙個容器。第乙個元素為關鍵字key,第二個元素為關鍵字的值。這裡是map的基本用法 include include using namespace std bool findmostfreq...

python 找出陣列重複的元素

從頭掃到尾,只要當前元素值與下標不同,就做一次判斷,numbers i 與numbers numbers i 相等就認為找到了重複元素,返回true,否則就交換兩者,繼續迴圈。直到最後還沒找到認為沒找到重複元素。coding utf 8 def repeat num arraya list int ...

PHP實現刪除陣列中的特定元素

方法1 1 2 arr1 array 1,3,5,7,8 3 key array search 3,arr1 4 if key false 5 array splice arr1,key,1 6var dump arr1 7 返回結果 array 4 方法2 1 2 arr2 array 1,3,5...