leetCodeの週間試合106の問題解決報告書javascript
競技の住所:
https://leetcode-cn.com/contest/weekly-contest-106
922.パリティ配列II
922.Sort Aray By Party II
非負の整数配列を指定します.
配列を並べ替えて、お弁当にします.
上記の条件を満たす任意の配列を答えとして返すことができます.
例:
ヒント: 最初に偶数を前半に並べてから、順番に中間に交換します.例えば、配列の8つの数字、位置14、35はそれぞれ交換します.
921.括弧を最も有効にする追加
921.Minimm Add to Make Partheses Valid
与えられた
形式的には、次の点の一つを満たすだけで、括弧文字列は有効です.は空の文字列です.または です.は書き上げられます. です.それは書くことができます. 括弧文字列を指定します.結果文字列を有効にするために追加しなければならない最低括弧数を返します.
例1:
ヒント: 現在の左括弧の数を変数一つで記録してから、右括弧に合わせたら一つ減らします.
923.三数の和の様々な可能性
923.3 Sum With Multility
整数配列を指定します.
結果が非常に大きいので、引き返してください.
例1:
ヒント: 解析:観察データ量A[i]は100以下の整数であるため、各位置を遍歴した数をnとし、更に0~100の各数字mを見て前に出現する回数に、ターゲットt-m-nを乗じて後に出現する回数を積算すれば答えとなるという考えがある.二つの配列が現在位置の前後0~100の数字の出現回数を記録する必要があります.詳細はコードを参照してください.
924.悪意のあるソフトウェアの普及をできるだけ減らす.
924.Minimize Malware Spread
ノードネットワークでは、当
仮説
初期リストからノードを削除できます.このノードを削除すると最小化されます.
あるノードが感染ノードのリストからすでに
例1:
ヒント: 一つの配列で各ノードの感染回数を記録し、まずvisitはそれぞれの初期感染点を広げ、感染したノードを順次削除し、calCountは感染したノードの数を計算し、最小値のノードは答えとする.
https://leetcode-cn.com/contest/weekly-contest-106
922.パリティ配列II
922.Sort Aray By Party II
非負の整数配列を指定します.
A
、Aの中の半分の整数は奇数で、半分の整数は偶数です.配列を並べ替えて、お弁当にします.
A[i]
奇数の場合、i
奇数です質に入れる A[i]
偶数の場合、 i
偶数です上記の条件を満たす任意の配列を答えとして返すことができます.
例:
:[4,2,5,7]
:[4,5,2,7]
:[4,7,2,5],[2,5,4,7],[2,7,4,5] 。
ヒント:
2 <= A.length <= 20000
A.length % 2 == 0
0 <= A[i] <= 1000
/**
* @param {number[]} A
* @return {number[]}
*/
var sortArrayByParityII = function(A) {
A.sort((a,b)=>a%2-b%2);
for (var i = A.length / 2, j = 1; j < i; i++, j += 2) {
var temp = A[i];
A[i] = A[j];
A[j] = temp;
}
return A;
};
921.括弧を最も有効にする追加
921.Minimm Add to Make Partheses Valid
与えられた
'('
和 ')'
括弧からなる文字列 S
、最小の括弧を追加する必要があります. '('
または ')'
は、得られた括弧文字列を有効にするために、任意の位置においてもよい.形式的には、次の点の一つを満たすだけで、括弧文字列は有効です.
AB
(A
を選択します B
接続する A
和 B
すべて有効文字列です.または(A)
A
は有効文字列です.例1:
:"())"
:1
例2: :"((("
:3
例3: :"()"
:0
例4: :"()))(("
:4
ヒント:
S.length <= 1000
S
のみを含む '('
和 ')'
文字/**
* @param {string} S
* @return {number}
*/
var minAddToMakeValid = function(S) {
var leftCount = 0;
var ans = 0;
for (var i = 0; i < S.length; i++) {
if (S[i] === ")") {
if (leftCount === 0) {
ans++;
}
else {
leftCount--;
}
}
else {
leftCount++;
}
}
ans += leftCount;
return ans;
};
923.三数の和の様々な可能性
923.3 Sum With Multility
整数配列を指定します.
A
、および整数 target
目標値として満足を返します. i < j < k
且 A[i] + A[j] + A[k] == target
の元グループ i, j, k
の数です結果が非常に大きいので、引き返してください.
10^9 + 7
例1:
:A = [1,1,2,2,3,3,4,4,5,5], target = 8
:20
:
(A[i],A[j],A[k]):
(1, 2, 5) 8 ;
(1, 3, 4) 8 ;
(2, 2, 4) 2 ;
(2, 3, 3) 2 。
例2: :A = [1,1,2,2,2,2], target = 5
:12
:
A[i] = 1,A[j] = A[k] = 2 12 :
[1,1] 1, 2 ,
[2,2,2,2] 2, 6 。
ヒント:
3 <= A.length <= 3000
0 <= A[i] <= 100
0 <= target <= 300
/**
* @param {number[]} A
* @param {number} target
* @return {number}
*/
var threeSumMulti = function(A, target) {
var maxNum = 100;
var pre = new Array(maxNum + 1).fill(0);
pre[A[0]]++;
var ps = new Array(maxNum + 1).fill(0);
for (var i = 1; i < A.length; i++) {
ps[A[i]]++;
}
var m = 1e9 + 7;
var ans = 0;
for (var i = 1; i < A.length - 1; i++) {
ps[A[i]]--;
for (var j = Math.max(0, target - A[i] - maxNum); j <= maxNum && j <= target - A[i]; j++) {
ans = (ans + pre[j] * ps[target - A[i] - j]) % m;
}
pre[A[i]]++;
}
return ans;
};
924.悪意のあるソフトウェアの普及をできるだけ減らす.
924.Minimize Malware Spread
ノードネットワークでは、当
graph[i][j] = 1
を選択すると、各ノード i
直接に他のノードに接続することができます. j
一部のノード initial
最初は悪意のソフトに感染されました.2つのノードが直接接続され、少なくとも1つのノードが悪意のあるソフトウェアに感染すると、両方のノードが悪意のあるソフトウェアに感染する.この悪意のあるソフトウェアの普及は、より多くのノードがこのような方法で感染することができるまで継続されるだろう.仮説
M(initial)
悪意のあるソフトウェアが伝播を停止した後、ネットワーク全体に悪意のあるソフトウェアに感染する最終ノード数です.初期リストからノードを削除できます.このノードを削除すると最小化されます.
M(initial)
、 このノードに戻ります.複数のノードが条件を満たすと、インデックスが一番小さいノードに戻ります.あるノードが感染ノードのリストからすでに
initial
から削除されても、悪意のあるソフトが普及して感染する可能性があります.例1:
:graph = [[1,1,0],[1,1,0],[0,0,1]], initial = [0,1]
:0
例2: :graph = [[1,0,0],[0,1,0],[0,0,1]], initial = [0,2]
:0
例3: :graph = [[1,1,1],[1,1,1],[1,1,1]], initial = [1,2]
:1
ヒント:
1 < graph.length = graph[0].length <= 300
0 <= graph[i][j] == graph[j][i] <= 1
graph[i][i] = 1
1 <= initial.length < graph.length
0 <= initial[i] < graph.length
/**
* @param {number[][]} graph
* @param {number[]} initial
* @return {number}
*/
var minMalwareSpread = function(graph, initial) {
initial.sort((a,b)=>a-b)
var n = graph.length;
var gCount = new Array(n).fill(0);
var calCount = function() {
var count = 0;
for (var i = 0; i < gCount.length; i++) {
if (gCount[i] > 0) {
count++;
}
}
return count;
}
var visit = function(index, added, flags) {
flags[index] = 1;
gCount[index] += added;
for (var j = 0; j < n; j++) {
if (graph[index][j] === 1 && flags[j] === 0) {
visit(j, added, flags);
}
}
}
for (var i = 0; i < initial.length; i++) {
visit(initial[i], 1, new Array(n).fill(0));
}
var ans = initial[0];
var minm = n + 1;
for (var i = 0; i < initial.length; i++) {
visit(initial[i], -1, new Array(n).fill(0));
var m = calCount();
if (minm > m) {
minm = m;
ans = initial[i];
}
visit(initial[i], 1, new Array(n).fill(0));
}
return ans;
};