兩道題目——湊14和壓縮0和1組成的數組

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章