Leetcode Container With Most Water in Javascript
質問する
Given n non-negative integers a1, a2, ..., an , where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of the line i is at (i, ai) and (i, 0). Find two lines, which, together with the x-axis forms a container, such that the container contains the most water.
Notice that you may not slant the container.
に近づく
最大水を収容できる2つのコンテナバーが設置された場合、水の隣の面積は?見つければいいです.簡単にまずグローバルを探索する方法で解く.
var maxArea = function(height) {
let answer = 0;
for(let i=0; i<height.length; i++){
for(let j=i+1; j<height.length; j++){
const hei = Math.min(height[i], height[j]);
const wid = j-i;
const area = hei * wid;
if(area > answer){
answer = area;
}
}
}
return answer;
};
2つのfor文ですべての場合の数値幅を検索し、最大値を保存して戻ります.同じ大きさ(height)の配列は2回回転するので,時間複雑度はO(n^2)となる.コードをコミットして成功しましたRuntime: 912 ms, faster than 24.54% of JavaScript online submissions for Container With Most Water.
Memory Usage: 41.7 MB, less than 11.30% of JavaScript online submissions for Container With Most Water.
これは少し遅い方法です.したがって,解決策としてTwo Pointerという方法もある.デフォルトでは、アレイの両端にポインタを1つずつ指定し、条件の下(どのポインタの高さが高いか)で、その条件の結果に基づいてどのポインタが中央になるかを決定します.
var maxArea = function(height) {
let answer = 0;
let forward = 0;
let backward = height.length-1;
while(forward < backward){
// 어떤 포인터를 당겨올지 정하는 조건
if(height[forward] < height[backward]){
answer = Math.max(height[forward] * (backward-forward), answer);
forward++;
}else{
answer = Math.max(height[backward] * (backward-forward), answer);
backward--;
}
}
return answer;
};
このように繰り返し文が1つになり、時間の複雑さがO(N)になり、上記の私がやった方法よりも効果的になります.Runtime: 84 ms, faster than 67.90% of JavaScript online submissions for Container With Most Water.
Memory Usage: 40.8 MB, less than 11.30% of JavaScript online submissions for Container With Most Water.
Reference
この問題について(Leetcode Container With Most Water in Javascript), 我々は、より多くの情報をここで見つけました https://velog.io/@peppermint100/Leetcode-Container-With-Most-Water-in-Javascriptテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol