to do
12.3] Best Time to Buy and Sell Stock
int maxProfit(vector<int>& prices) {
if (prices.size()<2) return 0;
int lmin = prices[0];
vector<int> profits(prices.size(), -1);
for (int i=0; i<prices.size(); ++i) {
profits[i] = prices[i] - lmin;
lmin = min(lmin, prices[i]);
}
return *(max_element(profits.begin(), profits.end()));
}
12.4] Best Time to Buy and Sell Stock II
int maxProfit(vector<int>& prices) {
int sum = 0;
for (int i=1; i<prices.size(); ++i) {
int prof = prices[i] - prices[i-1];
if (prof>0) sum += prof;
}
return sum;
}
3. Longest Substring Without Repeating Characters
这样会超时,还是hash记录。但是考虑记录什么才不用重复擦写
// find index of first occurrence of chart c in s[l~r], -1 if no such duplicate
int findDupIndex (string& s, int l, int r, char c) {
for (int i=l; i<=r; ++i) {
if (s[i] == c) return i;
}
return -1;
}
int lengthOfLongestSubstring(string s) {
int maxLen = 0, starti = 0;
for (int i=0; i<s.size(); ) {
int dupIndex = findDupIndex(s, starti, i-1, s[i]);
if (dupIndex != -1) {
maxLen = max(maxLen, i-starti);
starti = dupIndex+1;
i = starti;
} else {
++i;
}
}
return max(maxLen, (int)s.size()-starti);
}
12.5] Longest Substring Without Repeating Characters
int lengthOfLongestSubstring(string s) {
unordered_map<char, int> lastOccurred;
int starti=0, maxlen = 0;
for (int i=0; i<s.size(); ++i) {
if (lastOccurred.find(s[i]) != lastOccurred.end() &&
lastOccurred[s[i]] >= starti) {
maxlen = max(maxlen, i-starti);
starti = lastOccurred[s[i]] + 1;
}
lastOccurred[s[i]] = i;
}
return max(maxlen, (int)s.size()-starti);
}
12.6] Container With Most Water
int maxArea(vector<int>& height) {
if (height.size()<2) return 0;
int maxA = 0;
for (int start=0, end=height.size()-1; start<=end; ) {
maxA = max(maxA, min(height[start], height[end]) * (end-start));
if (height[start] < height[end]) {
++start;
} else {
--end;
}
}
return maxA;
}