基礎知識補全,陣列演算法入門
阿新 • • 發佈:2020-08-08
前言:你好未來的自己!你好陌生人!簡單的自我總結.沒有什麼營養.洩洩狂神
基礎知識補全,陣列演算法入門
資料結構
- 基本結構:除特殊情況外,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天養成一種習慣.加油!