Skip to content

Commit 302225a

Browse files
committed
04112013
1 parent 56e7e67 commit 302225a

File tree

114 files changed

+1784
-1895
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

114 files changed

+1784
-1895
lines changed

3Sum Closeest.txt

Lines changed: 12 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,35 +3,22 @@ public:
33
int threeSumClosest(vector<int> &num, int target) {
44
// Start typing your C/C++ solution below
55
// DO NOT write int main() function
6-
int ret = -1;
7-
int size = num.size();
8-
if (size < 3)
9-
return ret;
6+
long long dist = LLONG_MAX;
107
sort(num.begin(), num.end());
11-
for (int i = 0; i < size - 2; i++) {
12-
while ((i > 0) && (i < (size - 2)) && (num[i] == num[i-1]))
13-
i++;
14-
int l = i + 1, u = size - 1, sum = 0;
8+
for (int i = 0; i < num.size() - 2; i++) {
9+
if ((i > 0) && (num[i] == num[i-1]))
10+
continue;
11+
int l = i + 1, u = num.size() - 1;
1512
while (l < u) {
16-
sum = num[i] + num[l] + num[u];
17-
if (ret == -1)
18-
ret = sum;
13+
int sum = num[i] + num[l] + num[u];
14+
if (llabs((long long)sum - target) < llabs(dist))
15+
dist = sum - target;
16+
if (sum < target)
17+
while ((++l < u) && (num[l] == num[l-1]));
1918
else
20-
ret = (abs(sum - target) < abs(ret - target))?sum:ret;
21-
if (ret == target)
22-
return ret;
23-
else if (sum > target) {
24-
u--;
25-
while ((l < u) && (num[u] == num[u+1]))
26-
u--;
27-
}
28-
else {
29-
l++;
30-
while ((l < u) && (num[l] == num[l-1]))
31-
l++;
32-
}
19+
while ((--u > l) && (num[u] == num[u+1]));
3320
}
3421
}
35-
return ret;
22+
return dist + target;
3623
}
3724
};

3Sum.txt

Lines changed: 14 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,33 +4,24 @@ public:
44
// Start typing your C/C++ solution below
55
// DO NOT write int main() function
66
vector<vector<int> > rets;
7-
int size = num.size();
8-
if (size < 3)
7+
if (num.size() < 3)
98
return rets;
109
sort(num.begin(), num.end());
11-
for (int i = 0; i < size - 2; i++) {
12-
while ((i > 0) && (i < (size - 2)) && (num[i] == num[i-1]))
13-
i++;
14-
int l = i + 1, u = size - 1, sum = 0;
10+
for (size_t i = 0; i < num.size() - 2; i++) {
11+
if ((i > 0) && (num[i] == num[i-1]))
12+
continue;
13+
size_t l = i + 1, u = num.size() - 1;
1514
while (l < u) {
16-
sum = num[i] + num[l] + num[u];
17-
if (sum > 0) {
18-
u--;
19-
while ((l < u) && (num[u] == num[u+1]))
20-
u--;
21-
}
22-
else {
23-
if (sum == 0) {
24-
vector<int> ret;
25-
rets.push_back(ret);
26-
rets.back().push_back(num[i]);
27-
rets.back().push_back(num[l]);
28-
rets.back().push_back(num[u]);
29-
}
30-
l++;
31-
while ((l < u) && (num[l] == num[l-1]))
32-
l++;
15+
long long sum = (long long)num[i] + num[l] + num[u];
16+
if (sum == 0) {
17+
rets.push_back(vector<int> (3, num[i]));
18+
rets.back()[1] = num[l];
19+
rets.back()[2] = num[u];
3320
}
21+
if (sum < 0)
22+
while ((++l < u) && (num[l] == num[l-1]));
23+
else
24+
while ((--u > l) && (num[u] == num[u+1]));
3425
}
3526
}
3627
return rets;

4Sum.txt

Lines changed: 18 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -4,37 +4,28 @@ public:
44
// Start typing your C/C++ solution below
55
// DO NOT write int main() function
66
vector<vector<int> > rets;
7-
int size = num.size();
8-
if (size < 4)
7+
if (num.size() < 4)
98
return rets;
109
sort(num.begin(), num.end());
11-
for (int i = 0; i < size - 3; i++) {
12-
while ((i > 0) && (i < size - 3) && (num[i] == num[i-1]))
13-
i++;
14-
for (int j = i+1; j < size - 2; j++) {
15-
while ((j > i+1) && (j < size - 2) && (num[j] == num[j-1]))
16-
j++;
17-
int l = j + 1, u = size - 1, sum = 0;
10+
for (size_t i = 0; i < num.size() - 3; i++) {
11+
if ((i > 0) && (num[i] == num[i-1]))
12+
continue;
13+
for (size_t j = i + 1; j < num.size() - 2; j++) {
14+
if ((j > i + 1) && (num[j] == num[j-1]))
15+
continue;
16+
size_t l = j + 1, u = num.size() - 1;
1817
while (l < u) {
19-
sum = num[i] + num[j] + num[l] + num[u];
20-
if (sum > target) {
21-
u--;
22-
while ((l < u) && (num[u] == num[u+1]))
23-
u--;
24-
}
25-
else {
26-
if (sum == target) {
27-
vector<int> ret;
28-
rets.push_back(ret);
29-
rets.back().push_back(num[i]);
30-
rets.back().push_back(num[j]);
31-
rets.back().push_back(num[l]);
32-
rets.back().push_back(num[u]);
33-
}
34-
l++;
35-
while ((l < u) && (num[l] == num[l-1]))
36-
l++;
18+
long long sum = (long long)num[i] + num[j] + num[l] + num[u];
19+
if (sum == target) {
20+
rets.push_back(vector<int> (4, num[i]));
21+
rets.back()[1] = num[j];
22+
rets.back()[2] = num[l];
23+
rets.back()[3] = num[u];
3724
}
25+
if (sum < target)
26+
while ((++l < u) && (num[l] == num[l-1]));
27+
else
28+
while ((--u > l) && (num[u] == num[u+1]));
3829
}
3930
}
4031
}

Add Binary.txt

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,33 +3,26 @@ public:
33
string addBinary(string a, string b) {
44
// Start typing your C/C++ solution below
55
// DO NOT write int main() function
6-
if (a == "")
6+
if (a.empty())
77
return b;
8-
if (b == "")
8+
if (b.empty())
99
return a;
10-
int ap = a.size() - 1, bp = b.size() - 1, ca = 0, sum = 0;
11-
string ret;
12-
while ((ap >= 0) && (bp >= 0)) {
13-
sum = (a[ap] - '0') + (b[bp] - '0') + ca;
14-
ret = (char)('0' + sum%2) + ret;
15-
ca = (sum >= 2);
16-
ap--;
17-
bp--;
18-
}
19-
while ((bp < 0) && (ap >= 0)) {
20-
sum = (a[ap] - '0') + ca;
21-
ret = (char)('0' + sum%2) + ret;
22-
ca = (sum >= 2);
23-
ap--;
24-
}
25-
while ((ap < 0) && (bp >= 0)) {
26-
sum = (b[bp] - '0') + ca;
27-
ret = (char)('0' + sum%2) + ret;
28-
ca = (sum >= 2);
29-
bp--;
10+
string ret = "";
11+
int ap = a.size() - 1, bp = b.size() - 1, ca = 0;
12+
while ((ap >= 0) || (bp >= 0)) {
13+
int sum = ((ap >= 0)?a[ap] - '0':0) + ((bp >= 0)?b[bp] - '0':0) + ca;
14+
ret = ret + (char)(sum%2 + '0');
15+
ca = sum/2;
16+
ap = (ap >= 0)?ap-1:ap;
17+
bp = (bp >= 0)?bp-1:bp;
3018
}
3119
if (ca > 0)
32-
ret = '1' + ret;
20+
ret = ret + '1';
21+
for (int i = 0; i < ret.size()/2; i++) {
22+
char c = ret[i];
23+
ret[i] = ret[ret.size()-1-i];
24+
ret[ret.size()-1-i] = c;
25+
}
3326
return ret;
3427
}
3528
};

Add Two Numbers.txt

Lines changed: 13 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -15,41 +15,20 @@ public:
1515
return l2;
1616
if (!l2)
1717
return l1;
18-
ListNode* head = new ListNode(0), *tail = head;
19-
int sum = 0, car = 0;
20-
while (l1 && l2) {
21-
sum = l1->val + l2->val + car;
22-
ListNode* node = new ListNode(sum%10);
23-
car = sum/10;
24-
tail->next = node;
18+
ListNode *head = new ListNode(0), *tail = head;
19+
int c = 0;
20+
while (l1 || l2) {
21+
int s = (l1?l1->val:0) + (l2?l2->val:0) + c;
22+
tail->next = new ListNode(s%10);
2523
tail = tail->next;
26-
l1 = l1->next;
27-
l2 = l2->next;
24+
c = s/10;
25+
l1 = l1?l1->next:l1;
26+
l2 = l2?l2->next:l2;
2827
}
29-
while (!l2 && l1) {
30-
sum = l1->val + car;
31-
ListNode* node = new ListNode(sum%10);
32-
car = sum/10;
33-
tail->next = node;
34-
tail = tail->next;
35-
l1 = l1->next;
36-
}
37-
while (!l1 && l2) {
38-
sum = l2->val + car;
39-
ListNode* node = new ListNode(sum%10);
40-
car = sum/10;
41-
tail->next = node;
42-
tail = tail->next;
43-
l2 = l2->next;
44-
}
45-
if (car > 0) {
46-
ListNode* node = new ListNode(car);
47-
tail->next = node;
48-
tail = tail->next;
49-
}
50-
ListNode* temp = head;
51-
head = head->next;
52-
delete temp;
53-
return head;
28+
if (c > 0)
29+
tail->next = new ListNode(1);
30+
tail = head->next;
31+
delete head;
32+
return tail;
5433
}
5534
};

Anagrams.txt

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,19 @@ public:
33
vector<string> anagrams(vector<string> &strs) {
44
// Start typing your C/C++ solution below
55
// DO NOT write int main() function
6-
vector<string> anagrams;
7-
map<string, vector<string> > maps;
8-
for (int i = 0; i < strs.size(); i++)
9-
maps[sorts(strs[i])].push_back(strs[i]);
10-
map<string,vector<string> >::iterator it = maps.begin();
6+
vector<string> rets;
7+
unordered_map<string, vector<string>> maps;
8+
for (size_t i = 0; i < strs.size(); i++) {
9+
string r = strs[i];
10+
sort(r.begin(), r.end());
11+
maps[r].push_back(strs[i]);
12+
}
13+
unordered_map<string, vector<string>>::iterator it = maps.begin();
1114
while (it != maps.end()) {
12-
if (it->second.size() > 1) {
13-
for (int i = 0; i < it->second.size(); i++)
14-
anagrams.push_back((it->second)[i]);
15-
}
15+
if (it->second.size() > 1)
16+
rets.insert(rets.end(), it->second.begin(), it->second.end());
1617
it++;
1718
}
18-
return anagrams;
19-
}
20-
string sorts(string& s) {
21-
vector<char> r;
22-
for (int i = 0; i < s.size(); i++)
23-
r.push_back(s[i]);
24-
sort(r.begin(), r.end());
25-
string ret;
26-
for (int i = 0; i < r.size(); i++)
27-
ret+= r[i];
28-
return ret;
19+
return rets;
2920
}
3021
};

Balanced Binary Tree.txt

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,16 @@ public:
1212
bool isBalanced(TreeNode *root) {
1313
// Start typing your C/C++ solution below
1414
// DO NOT write int main() function
15-
if (!root)
16-
return true;
1715
bool ret = true;
1816
height(root, ret);
1917
return ret;
2018
}
21-
int height(TreeNode* root, bool& ret) {
22-
if (root == NULL)
19+
int height(TreeNode* root, bool &ret) {
20+
if (!root)
2321
return 0;
24-
int lh = height(root->left, ret);
25-
int rh = height(root->right, ret);
26-
if (abs(lh - rh) > 1)
27-
ret = false;
28-
return max(lh, rh) + 1;
22+
int l = height(root->left, ret);
23+
int r = height(root->right, ret);
24+
ret = (abs(l - r) > 1)?false:ret;
25+
return max(l, r)+1;
2926
}
3027
};

Best Time to Buy and Sell Stock II.txt

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,13 @@ public:
33
int maxProfit(vector<int> &prices) {
44
// Start typing your C/C++ solution below
55
// DO NOT write int main() function
6-
int size = prices.size();
7-
if (size < 2)
8-
return 0;
9-
int prof = 0;
10-
vector<int> b(1, prices[0]);
11-
for (int i = 1; i < size; i++) {
12-
if (prices[i] > b.back())
13-
b.push_back(prices[i]);
14-
else {
15-
prof += b.back() - b[0];
16-
while (b.size() > 0)
17-
b.pop_back();
18-
b.push_back(prices[i]);
6+
int ret = 0, beg = 0;
7+
for (int i = 1; i < prices.size(); i++)
8+
if (prices[i] < prices[i-1]) {
9+
ret += prices[i-1] - prices[beg];
10+
beg = i;
1911
}
20-
}
21-
prof += b.back() - b[0];
22-
return prof;
12+
ret += prices.empty()?0:prices.back() - prices[beg];
13+
return ret;
2314
}
2415
};

Best Time to Buy and Sell Stock III.txt

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,21 @@ public:
55
// DO NOT write int main() function
66
if (prices.size() < 2)
77
return 0;
8-
int size = prices.size();
9-
int l[size];
10-
int r[size];
11-
int minp = prices[0];
8+
int size = prices.size(), l[size], r[size];
9+
int miv = prices[0], mav = prices.back();
1210
l[0] = 0;
1311
for (int i = 1; i < size; i++) {
14-
l[i] = max((prices[i] - minp), l[i-1]);
15-
minp = min(prices[i], minp);
12+
miv = min(miv, prices[i]);
13+
l[i] = max(l[i-1], prices[i] - miv);
1614
}
1715
r[size-1] = 0;
18-
int maxp = prices[size-1];
1916
for (int i = size - 2; i >= 0; i--) {
20-
r[i] = max((maxp - prices[i]), r[i+1]);
21-
maxp = max(prices[i], maxp);
17+
mav = max(mav, prices[i]);
18+
r[i] = max(r[i+1], mav - prices[i]);
2219
}
23-
int m = l[size - 1];
24-
for (int i = 0; i < size - 2; i++) {
25-
m = max(l[i]+r[i+1], m);
26-
}
27-
return m;
20+
int ret = r[0];
21+
for (int i = 0; i < size - 1; i++)
22+
ret = max(ret, l[i] + r[i+1]);
23+
return ret;
2824
}
2925
};

0 commit comments

Comments
 (0)