Python實戰之利用資料字典實現井字棋盤,,Java基礎知識點彙總
阿新 • • 發佈:2021-08-10
什麼是 離散化 ???
一些數字,它們的範圍很大(0-1e9),但是個數不多(1-1e5),並且這些數本身的數字大小不重要,重要的是這些數字之間的相對大小
第一種離散化
包含重複元素,並且相同元素離散化後也要相同
蒟蒻程式碼
const int N=1e5 + 5; int book[N],a[N]; int main(){ cin>>n; for(int i=1;i<=n;i++) cin>>a[i], book[i]=a[i]; sort(book+1,book+n+1); // 排序 m=unique(book+1,book+n+1)-book-1; // 去重 for(int i=1;i<=n;i++) a[i]=lower_bound(book+1,book+m+1,a[i])-book; // 一一建立對映關係 }
第二種離散化
複雜度低
- 包含重複元素,並且相同元素離散化後不相同
- 不包含重複元素,並且不同元素離散化後不同
符合這兩個條件的其中一個, 使用
蒟蒻程式碼
struct node{ int x; int idx; bool operator <(const node& n) const{ return x<n.x; } }; const int N=1e5+5; int n; node a[N]; int book[N]; int main(){ cin>>n; for(int i=1;i<=n;i++) cin>>a[i].x, a[i].idx=i; sort(a+1,a+1+n); for(int i=1;i<=n;i++){ book[a[i].idx]=i; // book[i] 表示 原索引為 i 的元素, 離散化後的位置 } for(int i=1;i<=n;i++){ a[i].x=book[a[i].idx]; // 將離散化後的值賦給 a[i].x } // for(int i=1;i<=n;i++) cout<<a[i].idx<<" "; // cout<<endl; // for(int i=1;i<=n;i++) cout<<a[i].x<<" "; return 0; }