zoukankan      html  css  js  c++  java
  • [LeetCode No.1030] 距离顺序排列矩阵单元格

    题目

    题解

    题解一:
    最容易的方法就是直接用二维数组存储矩阵的点,然后使用自定义的Arrays.sort()方法进行排序(int compare(T o1, T o2) 是“比较o1和o2的大小”。返回“负数”,意味着“o1比o2小”;返回“零”,意味着“o1等于o2”;返回“正数”,意味着“o1大于o2”。)

    package No1030;
    
    import java.util.*;
    
    class Solution {
        public static int[][] allCellsDistOrder(int R, int C, int r0, int c0) {
    		int [][]answer = new int[R*C][];
    		
    		for(int i=0;i<R;i++){
    			for(int j=0;j<C;j++){
    			answer[i*C+j] = new int[]{i,j};
    			}
    		}
    		
    		Arrays.sort(answer,new Comparator<int[]>(){
    			@Override
    			public int compare(int[] o1, int[] o2) {
    				return Math.abs(o1[0]-r0)+Math.abs(o1[1]-c0)-Math.abs(o2[0]-r0)-Math.abs(o2[1]-c0);
    			}
    			
    		});
        	
        	return answer;
        	
        }
       
        public static void main(String[] args){
        	int [][] answer = allCellsDistOrder(1, 2, 0, 0);
        	for(int i[]:answer){
        		System.out.print(i[1]);
        	}
        }
    }
    
    

    题解二:
    实际在枚举所有点时,我们可以直接按照哈曼顿距离分桶。这样我们就可以实现线性的桶排序。
    关于桶排序https://blog.csdn.net/qq_27124771/article/details/87651495

    package No1030;
    
    import java.math.*;
    import java.util.*;
    
    public class Solution2 {
        public int[][] allCellsDistOrder(int R, int C, int r0, int c0) {
    		int Bucket_num = Math.max(r0, R-1-r0)+Math.max(c0, C-1-c0);
    		List<List<int[]>> bucket = new ArrayList<List<int []>>();
    		
    		for(int i = 0; i <=Bucket_num; i++){
    			bucket.add(new ArrayList<int []>());
    		}
    		
    		for(int i = 0; i < R; i++){
    			for(int j = 0; j < C; j++){
    				int dist = Dist(i,j,r0,c0);
    				bucket.get(dist).add(new int[]{i,j});
    			}
    		}
    		
    		int[][] answer = new int [R*C][];
    		int index = 0;
    		for(int i = 0; i<Bucket_num; i++){
    			List<int[]> temp = bucket.get(i);
    			for(int [] a:temp){
    			answer[index++] = a;
    			}
    		}
    		return answer;
        }
        
        public int Dist(int r,int c,int r0,int c0){
    		return Math.abs(r-r0)+Math.abs(c-c0);
    	}
        
        public static void main(String[] args){
        	
        }
    }
    
    
  • 相关阅读:
    centos7.6 安装与配置 MongoDB yum方式
    MongoDB 介绍
    centos 关闭selinux
    前端 HTML标签属性
    前端 HTML 标签嵌套规则
    前端 HTML 标签分类
    前端 HTML body标签相关内容 常用标签 表单标签 form里面的 input标签介绍
    前端 HTML body标签相关内容 常用标签 表单标签 form 表单控件分类
    前端 HTML form表单标签 select标签 option 下拉框
    POJ 1426
  • 原文地址:https://www.cnblogs.com/Mr-BING/p/14040069.html
Copyright © 2011-2022 走看看