演算法找陣列中的特定元素
一個 int 陣列,裡面資料無任何限制,要求求出所有這樣的數 a[i],
其左邊的數都小於等於它,右邊的數都大於等於它。
能否只用一個額外陣列和少量其它空間實現。
思路:如果能用兩個輔助陣列,那麼相對來說簡單一點,可定義陣列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)
- {
- if(pArray == NULL || len <= 0 )
- return ;
- int *pMin = new int[len];
- int *pMax = new int[len];
- int i;
- pMax[0] = pArray[0];
- for(i = 1; i //計算自i往前最大值的輔助陣列
- pMax[i] = (pMax[i-1] >= pArray[i])? pMax[i-1]: pArray[i];
- pMin[len-1] = pArray[len-1];
- for(i = len - 2; i >= 0; i--) //計算自i開始最小值的輔助陣列
- pMin[i] = (pMin[i+1] <= pArray[i])? pMin[i+1]: pArray[i];
- if(pArray[0] <= pMin[0]) //檢查第1個元素是否滿足條件
-
cout<
' ' ; - for(i = 1; i
- {
- if(pArray[i] >= pMax[i-1] && pArray[i] <=pMin[i+1]) //滿足這個關係式的元素符合要求
-
cout<
' ' ; - }
- if(pArray[len-1] >= pMax[len-1]) //檢查第len個元素是否滿足條件
-
cout<
-
cout<
- delete [] pMin;
- delete [] pMax;
- pMin = pMax = NULL;
- }
相關文章
- 【Java】尋找陣列中“主要元素”Java陣列
- 尋找陣列中第K大的元素陣列
- 【.Net】從字串陣列中尋找數字的元素字串陣列
- (七)一個尋找陣列中眾數的演算法陣列演算法
- 演算法尋找陣列中的第二大數演算法陣列
- 旋轉陣列中的最小元素陣列
- 陣列中每個陣列元素出現的次數陣列
- 找一個陣列中特別的數陣列
- js如何將陣列中的元素清空JS陣列
- jQuery元素在陣列中的索引位置jQuery陣列索引
- for in語句遍歷陣列中的元素陣列
- js如何遍歷陣列中的元素JS陣列
- 找到兩個陣列中的公共元素陣列
- 尋找兩個有序陣列的中位數陣列
- js如何獲取指定陣列元素在陣列中的索引值JS陣列索引
- 如何將一個陣列中的元素插入另一個陣列陣列
- 尋找兩個正序陣列中的中位數陣列
- 調整陣列元素順序演算法陣列演算法
- 力扣演算法題:尋找兩個正序陣列的中位數力扣演算法陣列
- 尋找陣列的中心索引陣列索引
- java陣列中重複元素的去重Java陣列
- 查詢陣列中第K大的元素陣列
- JavaScript獲取元素在陣列中的位置JavaScript陣列
- js刪除陣列中重複的元素JS陣列
- js刪除陣列中的重複元素JS陣列
- js刪除陣列元素中的指定值JS陣列
- PHP從陣列中刪除元素的方法PHP陣列
- JS] JS 之刪除陣列中的元素JS陣列
- 刪除陣列中的元素(連結串列)陣列
- 陣列中的第K個最大元素陣列
- 如何去除有序陣列中的重複元素陣列
- 返回陣列中的最大元素個數陣列
- 陣列元素逆序陣列
- 如果陣列中存在 item,則返回元素在陣列中的位置,否則返回 -1陣列
- java陣列元素的引用Java陣列
- 陣列元素的數量陣列
- 統計陣列元素中每個元素出現的次數陣列
- iOS 判斷陣列array中是否包含指定的元素,取出該元素在array中的下標+陣列方法詳解...iOS陣列