在乙個 int 陣列裡查詢這樣的數,它大於等於左側所有數,小於等於右側所有數。直觀想法是用兩個陣列 a、b。a[i]、b[i]分別儲存從前到 i 的最大的數和從後到 i 的最小的數,乙個解答:這需要兩次遍歷,然後再遍歷一次原陣列,將所有 data[i]>=a[i-1]&&data[i]<=b[i]的 data[i]找出即可。給出這個解答後,面試官有要求只能用乙個輔助陣列,且要求少遍歷一次。
利用乙個輔助陣列,記錄每乙個元素右側的最小值是多少 rightmin 。在順序遍歷 儲存當前最大值, 即左邊最大的 ,那麼若兩者相等 ,則滿足 , 當前值大於左邊所有 ,又是右邊最小 ,小於右邊所有。
#include using namespace std;
#define max(a,b) a>b?a:b
#define min(a,b) a= 0;i--)
rightmin[i] = min(data[i],rightmin[i+1]);
left_max = 0;
for(int i = 0;i < len;i++)
}int main();
solve(data,7);
}
查詢滿足大於左邊小於右邊的數
找出陣列中所有滿足這樣條件的數字 1 數字左邊的數都不大於它 對第乙個數字沒有這個要求 2 數字右邊的數都不小於它 對最後乙個數字沒有這個要求 使用乙個陣列rightmin 記錄原始陣列array i 右邊 包括自己 的最小值。假設原始陣列為array 則rightmin 然後遍歷陣列,維持乙個前面...
陣列中和等於K的數對
1001 陣列中和等於k的數對 基準時間限制 1 秒 空間限制 131072 kb 分值 5 難度 1級演算法題 給出乙個整數k和乙個無序陣列a,a的元素為n個互不相同的整數,找出陣列a中所有和等於k的數對。例如k 8,陣列a 所有和等於8的數對包括 1,9 0,8 2,6 3,5 input 第1...
藍橋杯 大於等於n的最小完全平方數
資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 輸出大等於n的最小的完全平方數。若乙個數能表示成某個自然數的平方的形式,則稱這個數為完全平方數 tips 注意資料範圍 輸入格式 乙個整數n 輸出格式 大等於n的最小的完全平方數 樣例輸入 樣例輸出 資料規模和約定 n是32位有符號...