[Leetcode] 1658. Minimum Operations to Reduce X to Zero
https://leetcode.com/problems/minimum-operations-to-reduce-x-to-zero/submissions/
入力:整数配列nums、整数x
出力:配列の開始値と終了値をxから減算し、配列から値を削除する動作を続け、xをゼロの最小数にします.
問題の核心思想は探す目標を変えることだ.これはx値ではなく、配列全体でxを減算する値を探します.
上の図が並んでいると思ったら、青に塗った部分が私たちが探しているx値です.しかし,x値を直接探すのではなく,配列全体でx値を減算した図の白い部分Targetを探す.
ターゲットを検索する方法は、0から最後のインデックスまで、現在のインデックスとを保存します.また,これまで,和からターゲットの値を減算して格納されていた資料構造が存在すると,条件を満たす.
コード#コード#
https://leetcode.com/problems/minimum-operations-to-reduce-x-to-zero/discuss/935935/Java-Detailed-Explanation-O(N)-Prefix-SumMap-Longest-Target-Sub-Array
入力:整数配列nums、整数x
出力:配列の開始値と終了値をxから減算し、配列から値を削除する動作を続け、xをゼロの最小数にします.
問題の核心思想は探す目標を変えることだ.これはx値ではなく、配列全体でxを減算する値を探します.
上の図が並んでいると思ったら、青に塗った部分が私たちが探しているx値です.しかし,x値を直接探すのではなく,配列全体でx値を減算した図の白い部分Targetを探す.
배열의 총 합 = Target + x
なので、目標値の位置が分かればxを満たす値があるかどうかを知ることができます.ターゲットを検索する方法は、0から最後のインデックスまで、現在のインデックスとを保存します.また,これまで,和からターゲットの値を減算して格納されていた資料構造が存在すると,条件を満たす.
コード#コード#
class Solution {
public int minOperations(int[] nums, int x) {
if (nums.length == 0)
return 0;
int total = 0;
for (int i : nums) {
total += i;
}
int target = total - x;
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
int sum = 0;
int minResult = Integer.MAX_VALUE;
map.put(0, -1);
for (int i = 0; i < nums.length; i++) {
sum += nums[i];
if(i == nums.length-1)
map.put(sum, i);
if (map.containsKey(sum - target)) {
int result = (map.get(sum - target) + 1) + (nums.length - 1 - i);
minResult = Math.min(minResult, result);
}
map.put(sum, i);
}
return minResult == Integer.MAX_VALUE ? -1 : minResult;
}
}
参考説明https://leetcode.com/problems/minimum-operations-to-reduce-x-to-zero/discuss/935935/Java-Detailed-Explanation-O(N)-Prefix-SumMap-Longest-Target-Sub-Array
Reference
この問題について([Leetcode] 1658. Minimum Operations to Reduce X to Zero), 我々は、より多くの情報をここで見つけました https://velog.io/@gokoy/Leetcode-1658.-Minimum-Operations-to-Reduce-X-to-Zeroテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol