Container With Most Water - Leetcode
2015-10-20 15:22
411 查看
题意:vector h={a1, a2, …, an},求由一对坐标(i,ai)和(j,aj)与x轴围成的容器能装最多的水。
在看到这道题的时候,笔者有打算用最笨的时间复杂度为o(n^2)的方法来做(就是组合出每一种容器并求出容量然后比较),然后并不能AC,原因就是Time Limit Exceeded。
最后还是在网上找到了一个更好的方法。
由于容器装水量的多少取决于高度的最小值,所以此题的关键在于改变高度的最小值。题目的目的是找出最大水容量,所以要增加当前水容量自然是改变当前高度的最小值。
总结:由这道题笔者想到了Leetcode里面的Two Sum这道题,这道题是要求数组中哪两项的和是指定值。当时做这道题的时候笔者想到的也是时间复杂度为O(n^2)的解法(为什么现在不长记性 =。=),现在去回顾博客里面写的那道题的第二种解法,将数组的数字按从小到大的顺序排列,然后两个指针一头一尾并求和,然后比较和与指定值的大小,如果小于,则往后移动前面的指针,如果大于,则往前移动后面的指针。这种解题的思路是不盲目组合所有的可能,而是根据最后要得的结果有目标的来选择移动的指针,这样可以减少工作量,缩短时间。
在看到这道题的时候,笔者有打算用最笨的时间复杂度为o(n^2)的方法来做(就是组合出每一种容器并求出容量然后比较),然后并不能AC,原因就是Time Limit Exceeded。
最后还是在网上找到了一个更好的方法。
由于容器装水量的多少取决于高度的最小值,所以此题的关键在于改变高度的最小值。题目的目的是找出最大水容量,所以要增加当前水容量自然是改变当前高度的最小值。
class Solution { public: int maxArea(vector<int>& height) { int maxarea=0; int area=0; size_t left=0,right=height.size()-1; while(left<right) { //能容纳水量的多少取决于高度的最小值 area=min(height[left],height[right])*(right-left); if(area>maxarea) maxarea=area; //改变高度的最小值 if(height[left]<height[right]) left++; else right--; } return maxarea; } };
总结:由这道题笔者想到了Leetcode里面的Two Sum这道题,这道题是要求数组中哪两项的和是指定值。当时做这道题的时候笔者想到的也是时间复杂度为O(n^2)的解法(为什么现在不长记性 =。=),现在去回顾博客里面写的那道题的第二种解法,将数组的数字按从小到大的顺序排列,然后两个指针一头一尾并求和,然后比较和与指定值的大小,如果小于,则往后移动前面的指针,如果大于,则往前移动后面的指针。这种解题的思路是不盲目组合所有的可能,而是根据最后要得的结果有目标的来选择移动的指针,这样可以减少工作量,缩短时间。
相关文章推荐
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- leetcode_linearList
- leetcode_linearList02
- 021-Merge Two Sorted Lists(合并两个排好序的单链表);leetcode
- LeetCode[Day 1] Two Sum 题解
- LeetCode[Day 2] Median of Two Sorted Arrays 题解
- LeetCode[Day 3] Longest Substring Without... 题解
- LeetCode [Day 4] Add Two Numbers 题解
- LeetCode [Day 5] Longest Palindromic Substring 题解