离散化模版



import java.util.*;

public class Discretizing {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		List<Integer> values = new ArrayList<Integer>();
		// 存储所有待离散化的值
		ArrayList<Integer> alls = new ArrayList<>();

		int n = sc.nextInt();
		for (int i = 0; i < n; i++) {
			values.add(sc.nextInt());
		}
		// 使用Hashset去除重复元素,并转化为List
		alls = new ArrayList<>(new HashSet<>(values));
		Collections.sort(alls); //将所有值排序
		int k = sc.nextInt();
		System.out.print(find(k,alls));

	}

	//二分查找求出x对应的离散化的值
	public static int find(int x, ArrayList<Integer> alls) {
		int l = 0, r = alls.size();
		while (l < r) {
			int mid = l + r >> 1;
			if (alls.get(mid) >= x) {
				r = mid;
			} else
				l = mid + 1;
		}

		return r + 1; //映射到1,2,3···n
	}

}