給定整數陣列 a,每次 move 操作將會選擇任意 a[i],並將其遞增 1。
返回使 a 中的每個值都是唯一的最少操作次數。
示例 1:
輸入:[1,2,2]
輸出:1
解釋:經過一次 move 操作,陣列將變為 [1, 2, 3]。
示例 2:
0 <= a.length <= 40000
0 <= a[i] < 40000
我是用雜湊表做的,解題的關鍵在於,雜湊表的初始化。
有可能在經過n次的遞增,key+1的值並沒有記錄在雜湊表的鍵值裡面,
所以需要提前錄入,進行乙個雜湊表的初始化。
#include #include #include #include using namespace std;
class solution
/* 求最大值 */
for (int i = 0; i < a.size(); i++)
}/* 空間換時間 */
maxval = 2 * maxval + 1;
/* 初始化雜湊表:初始值為0 */
for (int i = 0; i < maxval; i++)
/* 記錄陣列的雜湊,記錄重複值 */
for (int i = 0; i < a.size(); i++)
}/* 如果存在key大於1,則key+1的value需要加上key值的(value-1),依次類推 */
for (int i = 0; i < maxval; i++)
}return num;
}private:
unordered_mapm_map;
};// 超時的遞迴演算法:
//class solution
// return num;
// }
//// void backtrace(int key)
// else
//// }
////private:
// int num;
// setm_set;
////};
int main() ;
solution* ps = new solution();
cout << ps->minincrementforunique(test) << endl;
return 0;
}
Leetcode 945 使陣列唯一的最小增量
給定整數陣列 a,每次 move 操作將會選擇任意a i 並將其遞增1。返回使a中的每個值都是唯一的最少操作次數。示例 1 輸入 1,2,2 輸出 1解釋 經過一次 move 操作,陣列將變為 1,2,3 示例 2 輸入 3,2,1,2,1,7 輸出 6解釋 經過 6 次 move 操作,陣列將變為...
leetcode945 使陣列唯一的最小增量
給定整數陣列 a,每次 move 操作將會選擇任意 a i 並將其遞增 1。返回使 a 中的每個值都是唯一的最少操作次數。示例 1 輸入 1,2,2 輸出 1 解釋 經過一次 move 操作,陣列將變為 1,2,3 示例 2 輸入 3,2,1,2,1,7 輸出 6 解釋 經過 6 次 move 操作...
leetcode945 使陣列唯一的最小增量
給定整數陣列 a,每次 move 操作將會選擇任意 a i 並將其遞增 1。返回使 a 中的每個值都是唯一的最少操作次數。示例 1 輸入 1,2,2 輸出 1 解釋 經過一次 move 操作,陣列將變為 1,2,3 示例 2 輸入 3,2,1,2,1,7 輸出 6 解釋 經過 6 次 move 操作...