• [算法题解]矩阵元素按从小到大,逆时针排列在新矩阵中


    题目

    输入N*N矩阵,输出逆时针排序后的矩阵。

    题解

    在一维临时数组排序,然后控制矩阵左上角和右下角,一圈圈写入新的矩阵。

    代码

    
    import java.util.Arrays;
    import java.util.Scanner;
    
    public class Main {
    	public static void main(String[] args) {
    		Scanner in=new Scanner(System.in);
    		int N=in.nextInt();
    		int[][] m=new int[N][N];
    		for(int i=0;i<N;++i) {
    			for(int j=0;j<N;++j) {
    				m[i][j]=in.nextInt();
    			}
    		}
    		int[][] sortM=new int[N][N];
    		sortM=dealMatrix(m);
    		for(int i=0;i<N;++i) {
    			for(int j=0;j<N;++j) {
    				System.out.print(sortM[i][j]);
    			}
    			System.out.println("
    ");
    		}
    	}
    	
    	public static int[][] dealMatrix(int[][] m){
    		if(m==null||m.length!=m[0].length) {
    			return null;
    		}
    		
    		int N=m.length;
    		int[] sortArr=new int[N*N];
    		int pos=0;
    		for(int i=0;i<N;++i) {
    			for(int j=0;j<N;++j) {
    				sortArr[pos++]=m[i][j];
    			}
    		}
    		
    		Arrays.sort(sortArr);
    		
    		int lRow=0;
    		int lCol=0;
    		int rRow=N-1;
    		int rCol=N-1;
    		int[][] sortM=new int[N][N];
    		int arrPos=0;
    		while(lRow<=rRow&&lCol<=rCol) {//
    			arrPos=writeSortM(sortM,lRow++,lCol++,rRow--,rCol--,sortArr,arrPos);
    		}
    		return sortM;
    	}
    	
    	private static int writeSortM(int[][] sortM,int lRow,int lCol,int rRow,int rCol,int[] sortArr,int arrPos) {
    		if(lRow==rRow&&lCol==rCol) {
    			sortM[lRow][lCol]=sortArr[arrPos++];
    			return arrPos;
    		}
    		
    		int i=lRow;//
    		int j=lCol;//
    		while(i<rRow) {//
    			sortM[i++][j]=sortArr[arrPos++];
    		}
    		while(j<rCol) {
    			sortM[i][j++]=sortArr[arrPos++];
    					
    		}
    		while(i>lRow) {
    			sortM[i--][j]=sortArr[arrPos++];
    		}
    		while(j>lCol){
    			sortM[i][j--]=sortArr[arrPos++];
    		}
    		return arrPos;
    	}
    	
    }
    
    
  • 相关阅读:
    LCA问题的离线处理Tarjan算法模版
    匈牙利算法 模版
    poj 1190 dfs
    poj 1376 bfs
    划分树模版
    让innerHTML的脚本也可以运行起来
    Keycode对照表
    Javascript 操作XML简单介绍
    Webdings和Wingdings字符码对应表
    动态加载JS脚本的4种方法
  • 原文地址:https://www.cnblogs.com/coding-gaga/p/11210839.html
Copyright © 2020-2023  润新知