【LeetCode刷題記錄】11. 盛最多水的容器

題目描述:
在這裏插入圖片描述
題解:
一、暴力破解(時間複雜度:O(n2), 空間複雜度:O(1))
BF方法的思路簡單,兩層循環,遍歷所有可能性,找出其中最大的。不作贅述。
二、雙指針
使用雙指針,一個指頭,一個指尾,面積=較短的高度*兩者間距,短的一側向中間移動,直至兩指針重合。
代碼:

int maxArea(vector<int>& height) {
 int res = 0;
 int i = 0;
 int j = height.size() - 1;
 while (i < j) {
  int area = (j - i) * min(height[i], height[j]);
  res = max(res, area);
  if (height[i] < height[j]) {
   i++;
  }
  else {
   j--;
  }
 }
 return res;
}

複雜度分析:遍歷一遍,時間複雜度O(n);只創建了幾個局部變量,空間複雜度O(1)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章