离散化可以将无限空间内的有限点映射到有限空间内。
在求解问题过程中涉及元素之间的相对顺序时可用离散化。
Code:
#include<bits/stdc++.h> using namespace std; int a3[1000],a[1000],a2[1000]; int main() { int m,n; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]);//原数组 a2[i]=a[i]; } sort(a2+1,a2+n+1); m=unique(a2+1,a2+n+1)-(a2+1);//排序并去重(仅将重复元素放至序列尾部) for(int i=1;i<=n;i++){ int pos=lower_bound(a2+1,a2+m+1,a[i])-a2; a3[i]=pos;//映射 } for(int i=1;i<=n;i++) printf("%d ",a3[i]);//离散后的数组 return 0; }