一家日企的筆試題,實驗室乙個師兄投了一家日企的開發崗位,他們的筆試題是二選一,只要最後截止日期前向規定的郵箱傳送**即可,他們會通過驗證**的時間複雜度和空間複雜度來決定是否參加面試。其中一道就是:
輸入乙個整型陣列,假定陣列中前x個數和後y個數的異或值為a,求出a的最大值,並且在最大值情況下的兩個下標。
分析;因為要考慮時間複雜度和空間複雜度,因而肯定不能採用把每種情況都計算一遍,然後求得最大值,只能採用其他辦法,字典樹的思想可以應用。字典樹的乙個典型應用就是比較相同的字首的單詞,(例如在給定大量的單詞中,有band ,banana,bee,ban,abc中,字首為ba的有3個,ban的也有三個,b的有4個,這時我們假定都是小寫單詞,那麼每個節點的子樹有26個,依次為a到z,這樣每乙個單詞都是一條從根節點到葉子節點的路徑,這就是字典樹,在建立完成後,當輸入要查詢的字首時,便可以直接查詢到,例如ba,可以先查詢根節點的第二個子節點是否存在,若存在,則查詢b的乙個子節點是否存在,如果存在就輸出該節點的value值,就是次數,**一會也會貼出來,回到正題)在這裡,字典樹的層高是固定的就是32位,每乙個節點都是0或者1(也可以理解為固定層高的二叉樹),陣列的假設為1、 2、3、4、5;1本身的二進位制存到樹裡面,1、2的異或值也是乙個32位的,存到樹裡面,1、2、3的異或值也存進去,以此類推,直到1、 2、3、4、5。然後從後面開始向前遍歷,先是5,要想總的異或值最大,則要跟5的二進位制表示中0的位置為1,1的位置為0,(5的二進位制為00000000000000000000101,則使其異或值最大的值為1111111111111111111010)先在樹中查詢使5的異或值最大的值,然後再查詢使4、5的異或值最大的值,以此類推,最後輸出最大的異或值,並輸出前後的下標。
#include #include using namespace std;
#define max 2
typedef struct trietrie;
trie *root = new trie();
void creattrie(int *str,int location,int m) //建立字典樹的過程,
else
for (int j=0;jnext[j]=null;
}c_root->next[id]=p;
c_root=c_root->next[id];
} else
}}void binarycout(int m,int n) //求32位的二進位制,並儲存在乙個陣列裡
} trie findtrielocation(int *str) //
else
}
else
else
} }return *f_root;
}int main()
int num[50];
int i=0,length;
int m;
while(cin>>m)
length=i;
int tmp=0;
for (int k=0;k=0;--j) }
cout<
注意一點,因為沒有限制陣列的個數,因而在輸入完成後先ctrl+c,然後回車,這樣就可以出結果,ctrl+c是判斷結束的標識。
最後再附乙個查詢字首的**
#include //字典樹的乙個模板和典型應用
using namespace std;
#define max 26
typedef struct trietrie;
trie *root = new trie();
void creattrie(char *str)
c_root->next[id]=p;
c_root=c_root->next[id];
} else
i++;
}}int findtrie(char *str)
}return f_root->v;
}int main()
char str[20];
while (gets(str)&&str[0]!='\0')
char str1[20];
while (gets(str1))
{ cout<
最後還是煩請多指正喲
CSU 1216 異或最大值 字典樹的應用
題意 給定一些數,求這些數中兩個數的異或值最大的那個值 思路 字典樹的運用,每一次貪心的去找所需要的數字,用ret儲存路上經過節點的資訊 具體看 include include include include include include include include include inclu...
關於區間異或的線段樹
題 題意 倆個操作,操作1 l,r,x 區間 l,r 的數全部異或上x。操作2 l r 輸出區間 l,r 和 分析 對陣列a建線段樹,對於線段樹的每乙個節點進行二進位制拆位,每個位就統計有多少個1,更新操作對於涵蓋區間的二進位制位就等於其長度減去更新前的1的個數 includeusing names...
1720 解碼異或後的陣列
題目描述 未知 整數陣列 arr 由 n 個非負整數組成。經編碼後變為長度為 n 1 的另乙個整數陣列 encoded 其中 encoded i arr i xor arr i 1 例如,arr 1,0,2,1 經編碼後得到 encoded 1,2,3 給你編碼後的陣列 encoded 和原陣列 a...