1.基本(数组)
对于我这种刚开始刷题的小菜鸟来说,遇到这种题第一反应是用暴力解法,两个for搞定
class Solution {
public:
int maxArea(vector<int>& height) {
size_t max=0;
for(int i=0;i<height.size();i++)
{
for(int j=i+1;j<height.size();j++)
{
int _height=height[i]>height[j]?height[j]:height[i];
int wide=j-i;
int s=_height*wide;
if(s>max)
max=s;
}
}
return max;
}
};
结果time limit
想了半天发现可以用双指针这个技巧
class Solution {
public:
int maxArea(vector<int>& height) {
int l = 0, r = height.size() - 1;
int ans = 0;
while (l < r) {
int area = min(height[l], height[r]) * (r - l);
ans = max(ans, area);
if (height[l] <= height[r]) {
++l;
}
else {
--r;
}
}
return ans;
}
};
2.算法(贪心算法)
3.数据结构(链表)
1.暴力解法
2.栈方法
将各节点依次存储到栈中,不断pop到第n个,并将其删除