LeetCode 42 (1st trial: Time Limit Exceed..)



に質問


42.Trapping Rain Water


Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it can trap after raining.
Example 1:

Input: height = [0,1,0,2,1,0,1,3,2,1,2,1]
Output: 6
Explanation: The above elevation map (black section) is represented by array [0,1,0,2,1,0,1,3,2,1,2,1]. In this case, 6 units of rain water (blue section) are being trapped.
底辺(X値)が1の幅パターンが存在すると仮定すると、X(Index)値に基づいてY値が存在するArrayが与えられる.与えられたArrayは特定の地形(?)乙を形成してその地形に水を閉じ込める場合、水の総面積を求める問題である.写真や例を見るともっといいです.

💡に答える

var trap = function(height) {
    let peak = Math.max(...height)
  let block=0
  for(let i=peak;i>0;i--) {
    let vacancy=[];
    for(let p=0;p<height.length;p++){
      if(height[p]>=i) {
        vacancy.push(p)
      }}
        for(let f=0;f<vacancy.length;f++){
          if(!(vacancy[f+1]-vacancy[f]-1)==false)
          block+=(vacancy[f+1]-vacancy[f]-1)
        }
  }
  return block
};

description


解釈の論理はこうである.
「最高点(peak)を求め、その点からX軸に平行な線を描き、1つずつ下を向いて、すべての配列値との交点(1はゲート)、および各交点のシゴン間(水付き空間)の長さの総和(3はゲート)を求める.」
全部で3回for文を用いて,すべてのグラフィック空間を横断し,水に満ちた空間の積分非無理法を求めた.ちょっと無知な方法ですが、答えは正解で興奮して提出しましたが、leetcode側の値は巨大な数字に満ちたArrayで、結果はTimeLimit Exceedでした.つまり、私が作った論理は、答えは正しいが、効率的なコードがないということです.
leetcode hardを解く大きな快感もTimeLimit Excedで塞がれ、すぐに落ち込んでしまいましたが、半分席の達成感を記録するために文章を書きます.すぐにまた出しますから、待ってください.