zoukankan      html  css  js  c++  java
  • 处理二维数组两题

    问题一:旋转一个图像,向右旋转90度

      一种思路就是将元素一个一个往右移动,准确计算出位置即可。

      

    //题目6 翻转图像
        public void rotate(int [][] matrix,int n){
            for(int layer=0;layer<n/2;layer++){
                int start=layer;
                int end=n-1-layer;
                for(int i=start;i<end;i++){
                    int offset=i-start;
                    int top=matrix[start][i];
                    
                    matrix[start][i]=matrix[end-offset][start];
                    matrix[end-offset][start]=matrix[end][end-offset];
                    matrix[end][end-offset]=matrix[i][end];
                    matrix[i][end]=top;
                    
                    
                }            
            }        
        }

      另一种思路就是转置后,再横向翻转。

        //转置
        public void transpose(int matrix[][]){
            int temp;
            for(int i=0;i<matrix.length;i++)
                for(int j=0;j<i;j++){
                    temp=matrix[i][j];
                    matrix[i][j]=matrix[j][i];
                    matrix[j][i]=temp;
                }
              
        }
        //逆序
        public void reserve(int matrix[][]){
            int temp;
            for(int i=0;i<matrix.length;i++){
                for(int j=0;j<matrix.length/2;j++){
                    int end=matrix.length-j-1;
                    temp=matrix[i][j];
                    matrix[i][j]=matrix[i][end];
                    matrix[i][end]=temp;
                }
            }
            
        }

      两种复杂度都为O(n*n)

    问题二:二维数组中有0元素,则清零它的行列

      首先记录0的位置,然后第二次遍历的时候清零行列。

      

    //题目7 清0行列
        public void transTozero(int matrix[][]){
            ArrayList<point> al=new ArrayList<point>();
            for(int i=0;i<matrix.length;i++)
                for(int j=0;j<matrix[i].length;j++)
                    if(matrix[i][j]==0)
                        al.add(new point(i,j));
            for(int i=0;i<al.size();i++){
                point p=al.get(i);
                for(int j=0;j<matrix.length;j++){
                    matrix[j][p.getY()]=0;
                }
                for(int j=0;j<matrix[p.getX()].length;j++){
                    matrix[p.getX()][j]=0;
                }
            }
        }

      复杂度O(M*N+k(M+N))

  • 相关阅读:
    git命令的使用
    动态生成表格的每一行的操作按钮如何获取当前行的index
    js判断一些时间范围是否有重复时间段
    infiniband install driver
    python之pip install
    KVM :vnc 远程控制kvm创建虚拟机
    如何设置UNIX/Linux中新创建目录或文件的默认权限
    python获取报文参考代码
    JAVA命名规范
    oracle常用知识随笔
  • 原文地址:https://www.cnblogs.com/chentingk/p/5685762.html
Copyright © 2011-2022 走看看