Skip to content

Commit 21417d2

Browse files
committed
534 problems solved. Got rejected and hold on 6 months from applying into Amazon. Again very close call, just one dumb interviewer :(
1 parent f93104d commit 21417d2

7 files changed

+133
-42
lines changed

Diff for: source-code/Add_Binary.cpp

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
class Solution {
2+
public:
3+
string addBinary(string a, string b) {
4+
int n = a.length(), m = b.length();
5+
if(n == 0) return b;
6+
if(m == 0) return a;
7+
string result;
8+
int carry = 0, sum;
9+
int i = n - 1, j = m - 1;
10+
while(i >= 0 and j >= 0) {
11+
sum = carry + (int)(a[i--] - '0') + (int)(b[j--] - '0');
12+
if(sum == 2) sum = 10;
13+
else if(sum == 3) sum = 11;
14+
carry = sum / 10;
15+
sum %= 10;
16+
result += (char)(sum + '0');
17+
}
18+
while(j >= 0) {
19+
sum = (int)(b[j--] - '0') + carry;
20+
if(sum == 2) sum = 10;
21+
else if(sum == 3) sum = 11;
22+
carry = sum / 10;
23+
sum %= 10;
24+
result += (char)(sum + '0');
25+
}
26+
while(i >= 0) {
27+
sum = (int)(a[i--] - '0') + carry;
28+
if(sum == 2) sum = 10;
29+
else if(sum == 3) sum = 11;
30+
carry = sum / 10;
31+
sum %= 10;
32+
result += (char)(sum + '0');
33+
}
34+
if(carry) result += (char)(carry + '0');
35+
reverse(result.begin(), result.end());
36+
return result;
37+
}
38+
};

Diff for: source-code/Insert_Delete_GetRandom_O(1)-Duplicates_allowed.cpp

-2
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,8 @@ class RandomizedCollection {
1111

1212
/** Inserts a value to the collection. Returns true if the collection did not already contain the specified element. */
1313
bool insert(int val) {
14-
bool ret = true;
1514
if(!indices.count(val)) { // indices.find(val) == indices.end() won't work
1615
indices[val] = set<int>();
17-
ret = false;
1816
}
1917
indices[val].insert(values.size());
2018
values.push_back(val);

Diff for: source-code/Maximum_Average_Subarray_I.cpp

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution {
2+
public:
3+
double findMaxAverage(vector<int>& nums, int k) {
4+
int n = (int)nums.size();
5+
if(k > n) return 0;
6+
long long sum = 0LL;
7+
for(int i = 0; i < k; i++) {
8+
sum += nums[i];
9+
}
10+
double result = (double)sum / k;
11+
for(int i = k; i < n; i++) {
12+
sum -= nums[i - k];
13+
sum += nums[i];
14+
result = max(result, (double)sum / k);
15+
}
16+
return result;
17+
}
18+
};

Diff for: source-code/Remove_Duplicates_from_Sorted_Array_II.cpp

+6-17
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,11 @@
11
class Solution {
22
public:
3-
int removeDuplicates(int A[], int n) {
4-
if(n < 3) return n;
5-
int prev = 0, len = n;
6-
bool flag = false;
7-
for(int i = 1; i < n; ++i) {
8-
if(A[prev] == A[i]) {
9-
if(!flag) {
10-
++prev;
11-
A[prev] = A[i];
12-
flag = true;
13-
} else {
14-
--len;
15-
}
16-
} else {
17-
A[prev + 1] = A[i];
18-
prev++;
19-
flag = false;
3+
int removeDuplicates(vector<int>& nums) {
4+
if(nums.size() <= 2) return nums.size();
5+
int len = 2;
6+
for(int i = 2; i < nums.size(); i++) {
7+
if(nums[len - 2] < nums[i]) {
8+
nums[len++] = nums[i];
209
}
2110
}
2211
return len;

Diff for: source-code/Search_Insert_Position.cpp

+14-12
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11
class Solution {
22
public:
3-
int searchInsert(int A[], int n, int target) {
3+
int searchInsert(vector<int>& A, int target) {
4+
int n = (int)A.size();
45
if(n == 0) return 0;
5-
int start = 0, end = n - 1, mid;
6-
while(start < end) {
7-
mid = start + (end - start) / 2;
8-
if(target < A[mid]) end = mid - 1;
9-
else if(target > A[mid]) start = mid + 1;
10-
else break;
6+
int start = 0, end = n - 1;
7+
while(start <= end) {
8+
int mid = start + (end - start) / 2;
9+
if(target == A[mid]) {
10+
return mid;
11+
}
12+
if(target > A[mid]) {
13+
start = mid + 1;
14+
} else {
15+
end = mid - 1;
16+
}
1117
}
12-
if(start >= end) {
13-
if(A[start] < target) return start + 1;
14-
return start;
15-
}
16-
return mid;
18+
return start;
1719
}
1820
};

Diff for: source-code/Search_for_a_Range.cpp

+10-11
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,11 @@ class Solution {
1414
int x = -1, y = -1;
1515
while(start <= end) {
1616
mid = start + (end - start) / 2;
17-
if(A[mid] < target) start = mid + 1;
18-
else if(A[mid] > target) end = mid - 1;
19-
else { // target == A[mid]
20-
if( (mid == 0) or (A[mid - 1] < A[mid]) ) {
21-
x = mid;
22-
break;
17+
if(A[mid] < target) {
18+
start = mid + 1;
19+
} else if(A[mid] >= target) {
20+
if(A[mid] == target) {
21+
x = mid;
2322
}
2423
end = mid - 1;
2524
}
@@ -31,11 +30,11 @@ class Solution {
3130
while(start <= end) {
3231
mid = start + (end - start) / 2;
3332
if(A[mid] < target) start = mid + 1;
34-
else if(A[mid] > target) end = mid - 1;
35-
else { // target == A[mid]
36-
if( (mid == n - 1) or (A[mid + 1] > A[mid]) ) {
37-
y = mid;
38-
break;
33+
else if(A[mid] > target) {
34+
end = mid - 1;
35+
} else if(A[mid] <= target) {
36+
if(A[mid] == target) {
37+
y = mid;
3938
}
4039
start = mid + 1;
4140
}

Diff for: source-code/Set_Mismatch.cpp

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
// didn't satisfy "firstly find the number occurs twice and then find the number that is missing"
2+
class Solution {
3+
public:
4+
vector<int> findErrorNums(vector<int>& nums) {
5+
int Xor = 0;
6+
for(int i = 0, k = 1; i < nums.size(); i++, k++) {
7+
Xor ^= nums[i];
8+
Xor ^= k;
9+
}
10+
vector<int> result;
11+
for(int i = 0; i < 31; i++) {
12+
if(Xor & (1 << i)) {
13+
int X = 0;
14+
for(int k = 1; k <= nums.size(); k++) {
15+
if(k & (1 << i)) {
16+
X ^= k;
17+
}
18+
}
19+
result.push_back(X);
20+
int Y = Xor ^ X;
21+
result.push_back(Y);
22+
break;
23+
}
24+
}
25+
return result;
26+
}
27+
};
28+
29+
class Solution {
30+
public:
31+
vector<int> findErrorNums(vector<int>& nums) {
32+
vector<int> result;
33+
for(int i = 0; i < nums.size(); i++) {
34+
if(nums[abs(nums[i]) - 1] > 0) {
35+
nums[abs(nums[i]) - 1] *= -1;
36+
} else {
37+
result.push_back(abs(nums[i]));
38+
}
39+
}
40+
for(int i = 0; i < nums.size(); i++) {
41+
if(nums[i] > 0) {
42+
result.push_back(i + 1);
43+
}
44+
}
45+
return result;
46+
}
47+
};

0 commit comments

Comments
 (0)