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();
}