1. 程式人生 > 實用技巧 >基礎知識補全,陣列演算法入門

基礎知識補全,陣列演算法入門

前言:你好未來的自己!你好陌生人!簡單的自我總結.沒有什麼營養.洩洩狂神

基礎知識補全,陣列演算法入門

資料結構

  • 基本結構:除特殊情況外,java的程式碼執行順序為同級自上而下執行.(拓展:但是編譯器有優化機制,會進行指令重排,單執行緒沒有關係,多執行緒可能會出現執行緒安全)
  • 選擇結構:if/switch判斷:if單選 switch可多選
  • 迴圈結構:for/增強for迴圈/while/do...while迴圈,for判斷迴圈.增強for是遍歷陣列.while和for一樣.do...while是先執行程式碼後判斷

方法的過載

請區別方法的重寫.過載是指同名方法不同的傳參.與返回值無關.

重寫是重寫對應的方法.方法生明必須一致,包括修飾符返回值方法名,引數

可變引數

這個用的比較少.方法傳遞引數的最後一個引數不能確定其數量就可以使用可變引數

例如:

public static void main(String[] args) {
    test1(1,77,44,22);//77,44,22代表c
}

private static void test1(int a,int... c) { //這個c本質是一個數組

}

注意的是,只能有一個可變引數,且只能是最後一個引數

遞迴

自己呼叫自己.

必須設定遞迴出口,不然就是死迴圈

把上一次呼叫自己的值作為引數再計算,就可以使用遞迴.完全可以被迭代替代

陣列

陣列一旦開闢空間,定義好了長度就不能再改變.有序可以通過下標(索引)找到對應的值

//一維陣列:
int[] arr = new [10]; int[] arr = {xx,xx}
//二維陣列:
int[][] arr = new [10][10] ;

反轉陣列

建立一個新的陣列,同等長度

原陣列1賦值給新陣列的末尾.迴圈返回新陣列完成反轉

稀疏陣列

稀疏陣列的定義:

原二維陣列,裡面有很多重複的資料.將其轉換成稀疏陣列壓縮空間

我做了一個壓縮重複值為0的utils包...其他數字可能需要使用填充

請看:

  • 二維陣列轉成壓縮0的稀疏陣列
public static int[][] getXiShuInt(int[][] arr,int a){
        if (arr == null) {
            return new int[0][0];
        }


        //統計有多少個不同的資料
        int sum = 0;
        //迴圈二維陣列
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[0].length; j++) {
                if (arr[i][j]!=a){
                    sum++;
                }
            }
        }
        //建立稀疏陣列
        int[][] array = new int[3][sum+1];
        //給係數陣列新增表頭
        array[0][0]=arr.length;
        array[0][1]=arr[0].length;
        array[0][2]=sum;
        //統計個數
        int cunit = 0 ;
        //遍歷原陣列獲得差異資料的資訊
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[0].length; j++) {
                if (arr[i][j]!=a){
                   cunit++;
                   array[cunit][0]=i;
                   array[cunit][1]=j;
                   array[cunit][2]=arr[i][j];
                }
            }
        }
        return array;
    }
  • 將稀疏陣列解壓成二維陣列
public static int[][] XiShuToArr(int[][] xi){
        //建立一個二維陣列
        int[][] arr = new int[xi[0][0]][xi[0][1]];
        for (int i = 1; i < xi[0].length; i++) {
            arr[xi[i][0]][xi[i][1]] = xi[i][2];
        }
        return arr;
    }

總結:

將原二維陣列轉換成 固定一維3的新二維陣列 [0]記錄的是二維陣列宣告空間資訊.往後都是記錄不通值的座標+數值.依次傳入新二維陣列.從而壓縮了原來所有的數值<扎總結>

常用api

  • Scanner,控制檯互動物件.next和nexLine的區別. next以空格為終止符,line是回車使用line
  • Arrays陣列工具:目前會用的就是toString和sort排序,fill填充

今天是第3天寫部落格,堅持.堅持26天養成一種習慣.加油!