兩道題目——湊14和壓縮0和1組成的陣列
阿新 • • 發佈:2018-11-10
1.實現一個函式 湊14 :輸入很多個整數(1<=數值<=13)任意兩個數相加等於14就可以從陣列中刪除這兩個數,求剩餘數(從小到大排列);比如輸入{9,1,9,7,5,13 } 輸出 {7,9};
用兩個指標變數一頭一尾,同時遍歷,可以避免訪問重複資料,遇到相同的就將其下標儲存在list中,最後通過陣列和list進行去重複,然後返回最終結果。
程式碼如下:
//湊14 public static int[] RemoveBy14(int[] arr) { if (arr.Length < 2) return arr; Array.Sort(arr); int i = 0; int j = arr.Length - 1; //儲存陣列中和為14的下標 List<int> target = new List<int>(); //左右指標同時遍歷避免重複訪問同一資料 while (i < j) { if (arr[i] + arr[j] > 14) { j--; } else if (arr[i] + arr[j] < 14) { i++; } else { target.Add(i); target.Add(j); i++; j--; } } //儲存最終返回的資料 List<int> new_arr = new List<int>(); for (int k = 0; k < arr.Length; k++) { bool flag = true; foreach (int z in target) { if (k == z) flag = false; } if(flag) new_arr.Add(arr[k]); } return new_arr.ToArray(); }
2.實現一個函式:壓縮由0和1組成的陣列,去除連續重複;如:輸入{1,0,0,1,1,1,1,0},輸出{1,0,1,0};
程式碼如下:
public static int[] RemoveRepeat(int[] arr) { if (arr.Length <= 1) return arr; List<int> list = new List<int>(); list.Add(arr[0]); for (int i = 1; i < arr.Length ; i++) { if (arr[i] == arr[i - 1]) { continue; } else { list.Add(arr[i]); } } return list.ToArray(); }