Skip to content

Commit fce8389

Browse files
committed
lintcode 144 review 19 75
1 parent 3eef827 commit fce8389

6 files changed

+136
-71
lines changed

README.md

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -114,10 +114,12 @@ This is a **continually updated, open source** project.
114114
| 015.3sum | [cpp](./leetcode/15.3sum.cpp), [python](./leetcode/15.3sum.py) | O(N^2) | O(1) | Medium/S++ | | Awesome
115115
| 016.3sum-closest | [cpp](./leetcode/16.3sum-closest.cpp), [python](./leetcode/16.3sum-closest.py) | O(N^2) | O(1) | Medium || Cool
116116
| 018.4sum | [cpp](./leetcode/18.4sum.cpp), [python](./leetcode/18.4sum.py) | O(N^3) | O(1) | Medium || Awesome
117+
| 019.remove-nth-node-from-end-of-list | [cpp](./leetcode/19.remove-nth-node-from-end-of-list.cpp), [python](./leetcode/19.remove-nth-node-from-end-of-list.py) | O(N) | O(1) | Medium || Perfect
117118
| 026.remove-duplicates-from-sorted-array | [cpp](./leetcode/26.remove-duplicates-from-sorted-array.cpp), [python](./leetcode/26.remove-duplicates-from-sorted-array.py) | O(N) | O(1) | Easy || Perfect
118119
| 027.remove-element | [cpp](./leetcode/27.remove-element.cpp), [python](./leetcode/27.remove-element.py) | O(N) | O(1) | Easy
119120
| 028.implement-strstr | [cpp](./leetcode/28.implement-strstr.cpp), [python](./leetcode/28.implement-strstr.py) | O(M + N) | O(1) | Easy | Pattern Searching | KMP
120121
| 042.trapping-rain-water | [cpp](./leetcode/42.trapping-rain-water.cpp), [python](./leetcode/42.trapping-rain-water.py) | O(N) | O(1) | Hard | Two Pointers |
122+
| 075.sort-colors | [cpp](./leetcode/75.sort-colors.cpp) [python](./leetcode/75.sort-colors.py) | O(N) | O(1) | Medium | counting-sort || Perfect
121123
| 076.minimum-window-substring | [cpp](./leetcode/76.minimum-window-substring.cpp), [python](./leetcode/76.minimum-window-substring.py) | O(N) | O(N) | Hard
122124
| 088.merge-sorted-array | [cpp](./leetcode/88.merge-sorted-array.cpp), [python](./leetcode/88.merge-sorted-array.py) | O(N + M) | O(1) | Easy | | Perfect
123125
| 125.valid-palindrome | [cpp](./leetcode/125.valid-palindrome.cpp), [python](./leetcode/125.valid-palindrome.py) | O(N) | O(1) | Easy || Perfect
@@ -133,13 +135,6 @@ This is a **continually updated, open source** project.
133135
| 532.k-diff-pairs-in-an-array | [cpp](./leetcode/532.k-diff-pairs-in-an-array.cpp), [python](./leetcode/532.k-diff-pairs-in-an-array.py) | O(N * logN) | O(1) | Easy | Hash |
134136
| 844.backspace-string-compare | [cpp](./leetcode/844.backspace-string-compare.cpp), [python](./leetcode/844.backspace-string-compare.py) | O(N) | O(1) | Easy | stack
135137

136-
## Two Pointers(legacy)
137-
| Problem | Solution | Time | Difficulty | Tag | Note |
138-
| -----------| ------------| --------| --------------| -------| --------|
139-
| 19.remove-nth-node-from-end-of-list | [cpp](./leetcode/19.remove-nth-node-from-end-of-list.cpp), [python](./leetcode/19.remove-nth-node-from-end-of-list.py) | O(N) | Medium
140-
| 75.sort-colors | [cpp](./leetcode/75.sort-colors.cpp) [python](./leetcode/75.sort-colors.py) | O(N) | Medium | counting-sort
141-
142-
143138
## Linked List
144139

145140
> There is actually no algorithm in linked list question, but is really tricky to get one right
@@ -402,6 +397,7 @@ This is a **continually updated, open source** project.
402397
| 092.backpack | [cpp](./lintcode/92.backpack.cpp), [python](./lintcode/92.backpack.py) | O(M*N) | O(M) | Medium | dynamic-programming
403398
| 125.backpack-ii | [cpp](./lintcode/125.backpack-ii.cpp), [python](./lintcode/125.backpack-ii.py) | O(M*N) | O(M) | Medium/S++ | dynamic-programming
404399
| 139.subarray-sum-closest | [cpp](./lintcode/139.subarray-sum-closest.cpp), [python](./lintcode/139.subarray-sum-closest.py) | O(NlogN) | O(N) | Medium | Subarray
400+
| 144.interleaving-positive-and-negative-numbers | [cpp](./lintcode/144.interleaving-positive-and-negative-numbers.cpp), [python](./lintcode/144.interleaving-positive-and-negative-numbers.py) | O(N) | O(1) | Medium | two-pointers
405401
| 183.wood-cut | [cpp](./lintcode/183.wood-cut.cpp), [python](./lintcode/183.wood-cut.py) | O(N * LogN) | O(1) | Medium/S-- | binary-search
406402
| 382.triangle-count | [cpp](./lintcode/382.triangle-count.cpp), [python](./lintcode/382.triangle-count.py) | O(N^2) | O(1) | Medium | two-pointers
407403
| 390.find-peak-element-ii | [cpp](./lintcode/390.find-peak-element-ii.cpp), [python](./lintcode/390.find-peak-element-ii.py) | O(M + N) | O(1) | Hard/SSS | binary-search

leetcode/19.remove-nth-node-from-end-of-list.py

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,23 +11,22 @@ def removeNthFromEnd(self, head, n):
1111
:type n: int
1212
:rtype: ListNode
1313
"""
14-
if head is None:
15-
return None
16-
17-
new_head = ListNode(0)
18-
new_head.next = head
19-
20-
14+
newHead = ListNode(0)
15+
newHead.next = head
16+
2117
count = 0
22-
current = new_head
23-
while(head is not None):
24-
count += 1
25-
head = head.next
18+
fast = newHead
19+
slow = newHead
20+
21+
while (fast):
22+
fast = fast.next
2623
if count > n:
27-
current = current.next
28-
29-
node = current.next
30-
current.next = node.next
31-
del node
32-
33-
return new_head.next
24+
slow = slow.next
25+
count += 1
26+
27+
tmp = slow.next
28+
slow.next = slow.next.next
29+
del tmp
30+
31+
return newHead.next
32+

leetcode/75.sort-colors.cpp

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ class Solution {
55
void sortColors(vector<int>& nums) {
66
int countings[number_of_colors] = {0};
77
vector<int> tmp(nums.size(), 0);
8+
89
for (auto i = 0; i < nums.size(); ++i)
910
{
1011
countings[nums[i]] += 1;
@@ -30,32 +31,34 @@ class Solution {
3031
};
3132

3233
class Solution2 {
34+
private:
35+
void swap(vector<int>& nums, int i, int j)
36+
{
37+
int tmp = nums[i];
38+
nums[i] = nums[j];
39+
nums[j] = tmp;
40+
}
41+
3342
public:
3443
void sortColors(vector<int>& nums) {
35-
36-
int start = 0;
37-
int end = nums.size() - 1;
38-
int index = 0;
39-
40-
while (index <= end) {
41-
42-
if (nums[index] < 1)
44+
int k = 0;
45+
for (auto i = 0; i < nums.size(); ++i)
46+
{
47+
if (nums[i] == 0)
4348
{
44-
int tmp = nums[index];
45-
nums[index] = nums[start];
46-
nums[start] = tmp;
47-
start += 1;
49+
swap(nums, k, i);
50+
k ++;
4851
}
49-
else if(nums[index] > 1)
52+
}
53+
54+
for (auto i = k; i < nums.size(); ++i)
55+
{
56+
if (nums[i] == 1)
5057
{
51-
int tmp = nums[index];
52-
nums[index] = nums[end];
53-
nums[end] = tmp;
54-
end -= 1;
55-
continue;
58+
swap(nums, k, i);
59+
k ++;
5660
}
57-
58-
index += 1;
5961
}
62+
6063
}
6164
};

leetcode/75.sort-colors.py

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,43 @@
1+
# counting sort
2+
3+
number_of_colors = 3
14
class Solution(object):
25
def sortColors(self, nums):
3-
"""
4-
:type nums: List[int]
5-
:rtype: void Do not return anything, modify nums in-place instead.
6-
"""
6+
counting = [0 for i in range(number_of_colors)]
7+
8+
for n in nums:
9+
counting[n] += 1
10+
11+
for i in range(1, number_of_colors):
12+
counting[i] += counting[i - 1]
13+
14+
tmp = [0 for i in range(len(nums))]
15+
for i in range(len(nums)):
16+
count = counting[nums[i]]
17+
tmp[count - 1] = nums[i]
18+
counting[nums[i]] -= 1
19+
20+
for i in range(len(nums)):
21+
nums[i] = tmp[i]
722

8-
start = 0
9-
end = len(nums) - 1
10-
i = 0
1123

12-
while (i <= end):
13-
if (nums[i] == 0):
14-
nums[i], nums[start] = nums[start], nums[i]
15-
start += 1
16-
i += 1
17-
elif (nums[i] == 2):
18-
nums[i], nums[end] = nums[end], nums[i]
19-
end -= 1
20-
else:
21-
i += 1
22-
2324
# two loop
2425
class Solution2(object):
2526
def sortColors(self, nums):
2627
"""
2728
:type nums: List[int]
2829
:rtype: void Do not return anything, modify nums in-place instead.
2930
"""
30-
31-
start = 0
32-
for i in range(len(nums)):
33-
if nums[i] < 1:
34-
nums[i], nums[start] = nums[start], nums[i]
35-
start += 1
36-
37-
start = 0
31+
k = 0
3832
for i in range(len(nums)):
33+
if nums[i] == 0:
34+
nums[i], nums[k] = nums[k], nums[i]
35+
k += 1
36+
37+
for i in range(k, len(nums)):
38+
if nums[i] == 1:
39+
nums[i], nums[k] = nums[k], nums[i]
40+
k += 1
3941
if nums[i] < 2:
4042
nums[i], nums[start] = nums[start], nums[i]
4143
start += 1
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
class Solution {
2+
public:
3+
/*
4+
* @param A: An integer array.
5+
* @return: nothing
6+
*/
7+
void rerange(vector<int> &A) {
8+
// write your code here
9+
10+
int k = 0;
11+
for (auto i = 0; i < A.size(); ++i)
12+
{
13+
if (A[i] < 0)
14+
{
15+
int tmp = A[k];
16+
A[k] = A[i];
17+
A[i] = tmp;
18+
k++;
19+
}
20+
}
21+
22+
int negCount = k;
23+
int posCount = A.size() - k;
24+
25+
bool isPos = posCount > negCount;
26+
27+
for (auto i = 0; i < A.size(); ++i)
28+
{
29+
if ((isPos && A[i] < 0) || (!isPos && A[i] > 0))
30+
{
31+
int tmp = A[k];
32+
A[k] = A[i];
33+
A[i] = tmp;
34+
k++;
35+
}
36+
37+
isPos = !isPos;
38+
}
39+
}
40+
};
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution:
2+
"""
3+
@param: A: An integer array.
4+
@return: nothing
5+
"""
6+
def rerange(self, A):
7+
# write your code here
8+
9+
k = 0
10+
for i in range(len(A)):
11+
if A[i] < 0:
12+
A[i], A[k] = A[k], A[i]
13+
k += 1
14+
15+
neg_count = k
16+
pos_count = len(A) - k
17+
18+
isPos = pos_count > neg_count
19+
20+
for i in range(len(A)):
21+
if (isPos and A[i] < 0) or (not isPos and A[i] > 0):
22+
A[i], A[k] = A[k], A[i]
23+
k += 1
24+
25+
isPos = not isPos

0 commit comments

Comments
 (0)