1. 程式人生 > 其它 >整數離散化模板

整數離散化模板

技術標籤:離散化

整數離散化步驟

下面是將一組離散的資料(儲存的是原來資料的陣列下標) 離散化後對映到一個連續陣列,陣列中儲存的是原來的陣列下標

vector<int> alls ; // 儲存所有待離散化的值(此處為位置下標)
sort( alls.begin(), alls.end() ) // 將所有值排序
alls.erase( unique(alls.begin(), alls.end()), alls.end() ) ; // 去掉重複元素; unique函式返回的是去重後最後一個元素的後一個位置,erase刪掉此位置開始直到最後一個位置即end的所有元素

// 二分求出 x 離散化後的值(位置下標)
int find( int x ){ // x為原來的陣列下標 int l = 0, r = alls.size() - 1 ; while(l<r){ int mid = l+r >> 1 ; if( alls[mid] >= x ) r = mid ; else l = mid + 1 ; } return r + 1 ; // 使下標從1開始, 1...n ; 返回離散化後的下標 } // 擴充套件 : unique 函式的實現 vector<int>::iterator unique(vector<int> &a){
int j = 0 ; for( int i = 0; i < a.size(); i++ ) if( !i || a[i] != a[i-1] ) a[j++] = a[i] ; // a[0] ~ a[j-1] 所有a中不重複的數 return a.begin() + j ; // 返回的是最後一個元素的後一個位置 }