方法一 直接排序
显然,最暴力的解法是按照距离排序,然后依次输出坐标。
本解法可以使用哈希表优化,即使用坐标作 key,使用距离作 value,然后按照距离排序,这样就不会因为多次对同一下标进行比较而重复计算距离
无论如何优化,核心仍然是直接排序,时间复杂度不会优于 O(RClog(R*C))
java箭头函数,lambda表达式
Comparator接口实现排序
class Solution {
public int[][] allCellsDistOrder(int R, int C, int r0, int c0) {
int[][] sol = new int[R*C][2];
for (int i = 0; i < R; i++){
for (int j = 0; j < C; j++){
int t = i*C + j;
sol[t] = new int[]{i,j};
}
}
Arrays.sort(sol, new Comparator<int[]>(){
public int compare(int[] arr1, int[] arr2){
int dis1 = Math.abs(arr1[0] - r0) + Math.abs(arr1[1] - c0);
int dis2 = Math.abs(arr2[0] - r0) + Math.abs(arr2[1] - c0);
return dis1 - dis2;
}
});
return sol;
}
}
注意:Arrays.sort(…Comparator…) 得到的顺序
方法二 桶排序(未解)
日期
2020-11-17