LeetCode 53 Maximum Subarray
1.O(n)
class Solution {
public:
int maxSubArray(vector
int n=nums.size();
int max=-2147483648;
int si=0;//0...i元素和
int sj=0;//0..j元素和
int minsi=0;
for(int j=0;j
sj+=nums[j];
if(si
if(sj-minsi>max)//i..j元素和最大值
max=sj-minsi;
si+=nums[j];
}
return max;
}
};
2.贪心算法 O(n)
LeetCode 128. Longest Consecutive Sequence
1.O(n) 哈希表实现
class Solution {
public:
int longestConsecutive(vector
if(nums.size()<=0)
return nums.size();
unordered_set
int res=1;
for(int n:nums)
{
if(hash.find(n)==hash.end())//哈希表查找
continue;
hash.erase(n);//找到后删除该元素
int prev=n-1,next=n+1;
while(hash.find(prev)!=hash.end())
hash.erase(prev--);
while(hash.find(next)!=hash.end())
hash.erase(next++);
res=max(res,next-prev-1);
}
return res;
}
};
LeetCode 152. Maximum Product Subarray
1. 双重循环 O(n^2)
class Solution {
public:
int maxProduct(vector
int n=nums.size();
int max=-2147483648;
for(int start=0;start
int product=1;
for(int end=start+1;end<=n;end++)
{
product*=nums[end-1];
if(product>max)
max=product;
}
}
return max;
}
};
2. O(n) 算法
class Solution {
public:
int maxProduct(vector
int n=nums.size();
int product=nums[0];
int rmin,rmax;//保存当前最大值和最小值
rmin=product;
rmax=product;
for(int i=1;i
if(nums[i]<0)
swap(rmin,rmax);//若当前项为负值,则交换当前最大值和最小值
rmin=min(nums[i],rmin*nums[i]);
rmax=max(nums[i],rmax*nums[i]);
product=max(rmax,product);
}
return product;
}
};
LeetCode 155 Min Stack
class MinStack {
private:
std::stack
std::stack
public:
/** initialize your data structure here. */
MinStack() {
}
void push(int x) {
stack.push(x);
if(minstack.empty()||(!minstack.empty()&&x<=minstack.top()))//只有小于顶部元素的值才压栈};
LeetCode 394 Decode String
class Solution {
public:
string decodeString(string s) {
stack
stack
string res;
int num = 0;
for(char c : s) {
if(isdigit(c)) {
num = num*10 + (c-'0');
}
else if(isalpha(c)) {
res.push_back(c);
}
else if(c == '[') {
chars.push(res);
nums.push(num);
res = "";
num = 0;
}
else if(c == ']') {
string tmp = res;//存开始的字符
for(int i = 0; i < nums.top()-1; ++i) {
res += tmp;
}
res = chars.top() + res;//和之前的结果相连
chars.pop(); nums.pop();
}
}
return res;
}
};