2021年百度公司普通程序員面試題
- 管理員
- 1472閱讀
- 2021.06.17
?判斷一個括號字符串是否匹配正確,如果括號有多種,怎么做?如(([]))正確,[[(()錯誤。
?用棧來出現,凡是左括號就壓棧,凡是右括號就出棧,最后如果棧為空就匹配正確
?百度Spider如何在不超過抓取限額的情況下使得抓取的網頁價值之和最大,要求一個最佳抓取方案。請詳細描述你的算法思路(可以用偽代碼),并分析時間復雜度和空間復雜度。
?假設每個網頁有價值為wi.
wi的值為浮點數,通過堆實現.
wi為整數,則通過桶式排序記錄每個價值對應的網頁數量
?僅用O(1)的空間,將整數數組按奇偶數分成2部分,數組左邊是奇數、右邊是偶數。(要求:給出完整代碼,盡量高效,簡潔)
?#兩個指針,分別從頭和從尾遍歷數組,詳見代碼,已測試通過
#include
#include
#define bool int
#define false 0
#define true 1
void Reorder(int *pData, unsigned int length, bool (*func)(int));
bool isEven(int n);
void ReorderOddEven_1(int *pData, unsigned int length)
{
????if(pData == NULL || length == 0)
????????return;
????int *pBegin = pData;
????int *pEnd = pData + length - 1;
????while(pBegin < pEnd)
????{
????????// 向后移動pBegin,直到它指向偶數
????????while(pBegin < pEnd && (*pBegin & 0x1) != 0)
????????????pBegin ++;
????????// 向前移動pEnd,直到它指向奇數
????????while(pBegin < pEnd && (*pEnd & 0x1) == 0)
????????????pEnd --;
????????if(pBegin < pEnd)
????????{
????????????int temp = *pBegin;
????????????*pBegin = *pEnd;
????????????*pEnd = temp;
????????}
????}
}
void Reorder(int *pData, unsigned int length, bool
??(*func)(int))
{
????if(pData == NULL || length == 0)
????????return;
????int *pBegin = pData;
????int *pEnd = pData + length - 1;
????while(pBegin < pEnd)
????{
????????//向后移動pBegin
????????while(pBegin < pEnd &&!func(*pBegin))
????????????pBegin ++;
????????// 向前移動pEnd
????????while(pBegin < pEnd &&func(*pEnd))
????????????pEnd --;
????????if(pBegin < pEnd)
????????{
????????????int temp = *pBegin;
????????????*pBegin = *pEnd;
????????????*pEnd = temp;
????????}
????}
}
bool isEven(int n)
{
????return (n & 1) == 0;
}