lintcode 383. 装最多水的容器 双指针

àì夳堔傛蜴生んèń 2023-07-04 08:46 37阅读 0赞

给定 n 个非负整数 a1, a2, …, an, 每个数代表了坐标中的一个点 (i, ai)。画 n 条垂直线,使得 i 垂直线的两个端点分别为(i, ai)和(i, 0)。找到两条线,使得其与 x 轴共同构成一个容器,以容纳最多水。

  1. 样例
  2. 样例 1:
  3. 输入: [1, 3, 2]
  4. 输出: 2
  5. 解释:
  6. 选择 a1, a2, 容量为 1 * 1 = 1
  7. 选择 a1, a3, 容量为 1 * 2 = 2
  8. 选择 a2, a3, 容量为 2 * 1 = 2
  9. 样例 2:
  10. 输入: [1, 3, 2, 2]
  11. 输出: 4
  12. 解释:
  13. 选择 a1, a2, 容量为 1 * 1 = 1
  14. 选择 a1, a3, 容量为 1 * 2 = 2
  15. 选择 a1, a4, 容量为 1 * 3 = 3
  16. 选择 a2, a3, 容量为 2 * 1 = 2
  17. 选择 a2, a4, 容量为 2 * 2 = 4
  18. 选择 a3, a4, 容量为 2 * 1 = 2
  19. 注意事项
  20. 容器不可倾斜。
  21. class Solution {
  22. public:
  23. /**
  24. * @param heights: a vector of integers
  25. * @return: an integer
  26. */
  27. int maxArea(vector<int> &heights) {
  28. // write your code here
  29. int left=0;
  30. int right=heights.size()-1;
  31. int res=0;
  32. while(left<right)
  33. {
  34. int min_height=min(heights[left],heights[right]);
  35. res=max(res,min_height*(right-left));
  36. if(heights[left]>heights[right])right--;
  37. else left++;
  38. }
  39. return res;
  40. }
  41. };

发表评论

表情:
评论列表 (有 0 条评论,37人围观)

还没有评论,来说两句吧...

相关阅读