diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 002. \344\272\214\350\277\233\345\210\266\345\212\240\346\263\225/README.md" "b/lcof2/\345\211\221\346\214\207 Offer II 002. \344\272\214\350\277\233\345\210\266\345\212\240\346\263\225/README.md" index 32d1b0b332d78..7d55ee84086bc 100644 --- "a/lcof2/\345\211\221\346\214\207 Offer II 002. \344\272\214\350\277\233\345\210\266\345\212\240\346\263\225/README.md" +++ "b/lcof2/\345\211\221\346\214\207 Offer II 002. \344\272\214\350\277\233\345\210\266\345\212\240\346\263\225/README.md" @@ -139,6 +139,34 @@ func addBinary(a string, b string) string { } ``` +### **C++** + +```cpp +class Solution { +public: + string addBinary(string a, string b) { + string res; + int carry = 0; + + int i = a.size() - 1; + int j = b.size() - 1; + + while (i >= 0 || j >= 0) { + int digitA = i >= 0 ? a.at(i--) - '0' : 0; + int digitB = j >= 0 ? b.at(j--) - '0' : 0; + int sum = digitA + digitB + carry; + carry = sum >= 2 ? 1 : 0; + sum = sum >= 2 ? sum - 2 : sum; + res += to_string(sum); + } + + if (carry == 1) res.push_back('1'); + reverse(res.begin(), res.end()); + return res; + } +}; +``` + ### **...** ``` diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 002. \344\272\214\350\277\233\345\210\266\345\212\240\346\263\225/Solution.cpp" "b/lcof2/\345\211\221\346\214\207 Offer II 002. \344\272\214\350\277\233\345\210\266\345\212\240\346\263\225/Solution.cpp" new file mode 100644 index 0000000000000..dfe84b0fa803f --- /dev/null +++ "b/lcof2/\345\211\221\346\214\207 Offer II 002. \344\272\214\350\277\233\345\210\266\345\212\240\346\263\225/Solution.cpp" @@ -0,0 +1,23 @@ +class Solution { +public: + string addBinary(string a, string b) { + string res; + int carry = 0; + + int i = a.size() - 1; + int j = b.size() - 1; + + while (i >= 0 || j >= 0) { + int digitA = i >= 0 ? a.at(i--) - '0' : 0; + int digitB = j >= 0 ? b.at(j--) - '0' : 0; + int sum = digitA + digitB + carry; + carry = sum >= 2 ? 1 : 0; + sum = sum >= 2 ? sum - 2 : sum; + res += to_string(sum); + } + + if (carry == 1) res.push_back('1'); + reverse(res.begin(), res.end()); + return res; + } +}; \ No newline at end of file diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 003. \345\211\215 n \344\270\252\346\225\260\345\255\227\344\272\214\350\277\233\345\210\266\344\270\255 1 \347\232\204\344\270\252\346\225\260/README.md" "b/lcof2/\345\211\221\346\214\207 Offer II 003. \345\211\215 n \344\270\252\346\225\260\345\255\227\344\272\214\350\277\233\345\210\266\344\270\255 1 \347\232\204\344\270\252\346\225\260/README.md" index 9140a9638d6b6..3a432daf35d98 100644 --- "a/lcof2/\345\211\221\346\214\207 Offer II 003. \345\211\215 n \344\270\252\346\225\260\345\255\227\344\272\214\350\277\233\345\210\266\344\270\255 1 \347\232\204\344\270\252\346\225\260/README.md" +++ "b/lcof2/\345\211\221\346\214\207 Offer II 003. \345\211\215 n \344\270\252\346\225\260\345\255\227\344\272\214\350\277\233\345\210\266\344\270\255 1 \347\232\204\344\270\252\346\225\260/README.md" @@ -103,6 +103,22 @@ func countBits(n int) []int { } ``` +### **C++** + +```cpp +class Solution { +public: + vector countBits(int n) { + vector res(n + 1); + for (int i = 1; i <= n; i++) { + res[i] = res[i & (i - 1)] + 1; + } + + return res; + } +}; +``` + ### **...** ``` diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 003. \345\211\215 n \344\270\252\346\225\260\345\255\227\344\272\214\350\277\233\345\210\266\344\270\255 1 \347\232\204\344\270\252\346\225\260/Solution.cpp" "b/lcof2/\345\211\221\346\214\207 Offer II 003. \345\211\215 n \344\270\252\346\225\260\345\255\227\344\272\214\350\277\233\345\210\266\344\270\255 1 \347\232\204\344\270\252\346\225\260/Solution.cpp" new file mode 100644 index 0000000000000..200857734d547 --- /dev/null +++ "b/lcof2/\345\211\221\346\214\207 Offer II 003. \345\211\215 n \344\270\252\346\225\260\345\255\227\344\272\214\350\277\233\345\210\266\344\270\255 1 \347\232\204\344\270\252\346\225\260/Solution.cpp" @@ -0,0 +1,11 @@ +class Solution { +public: + vector countBits(int n) { + vector res(n + 1); + for (int i = 1; i <= n; i++) { + res[i] = res[i & (i - 1)] + 1; + } + + return res; + } +}; \ No newline at end of file diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 005. \345\215\225\350\257\215\351\225\277\345\272\246\347\232\204\346\234\200\345\244\247\344\271\230\347\247\257/README.md" "b/lcof2/\345\211\221\346\214\207 Offer II 005. \345\215\225\350\257\215\351\225\277\345\272\246\347\232\204\346\234\200\345\244\247\344\271\230\347\247\257/README.md" index 8fb044a85797f..c06521c503fdc 100644 --- "a/lcof2/\345\211\221\346\214\207 Offer II 005. \345\215\225\350\257\215\351\225\277\345\272\246\347\232\204\346\234\200\345\244\247\344\271\230\347\247\257/README.md" +++ "b/lcof2/\345\211\221\346\214\207 Offer II 005. \345\215\225\350\257\215\351\225\277\345\272\246\347\232\204\346\234\200\345\244\247\344\271\230\347\247\257/README.md" @@ -130,6 +130,40 @@ func max(a, b int) int { } ``` + +### **C++** + +```cpp +class Solution { +public: + int maxProduct(vector& words) { + vector> hash(words.size(), vector(26, false)); + for (int i = 0; i < words.size(); i++) + for (char c: words[i]) + hash[i][c - 'a'] = true; + + int res = 0; + for (int i = 0; i < words.size(); i++) { + for (int j = i + 1; j < words.size(); j++) { + int k = 0; + for (; k < 26; k++) { + if (hash[i][k] && hash[j][k]) + break; + } + + if (k == 26) { + int prod = words[i].size() * words[j].size(); + res = max(res, prod); + } + } + } + + return res; + } +}; +``` + + ### **...** ``` diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 005. \345\215\225\350\257\215\351\225\277\345\272\246\347\232\204\346\234\200\345\244\247\344\271\230\347\247\257/Solution.cpp" "b/lcof2/\345\211\221\346\214\207 Offer II 005. \345\215\225\350\257\215\351\225\277\345\272\246\347\232\204\346\234\200\345\244\247\344\271\230\347\247\257/Solution.cpp" new file mode 100644 index 0000000000000..eb82d32a4cd43 --- /dev/null +++ "b/lcof2/\345\211\221\346\214\207 Offer II 005. \345\215\225\350\257\215\351\225\277\345\272\246\347\232\204\346\234\200\345\244\247\344\271\230\347\247\257/Solution.cpp" @@ -0,0 +1,27 @@ +class Solution { +public: + int maxProduct(vector& words) { + vector> hash(words.size(), vector(26, false)); + for (int i = 0; i < words.size(); i++) + for (char c: words[i]) + hash[i][c - 'a'] = true; + + int res = 0; + for (int i = 0; i < words.size(); i++) { + for (int j = i + 1; j < words.size(); j++) { + int k = 0; + for (; k < 26; k++) { + if (hash[i][k] && hash[j][k]) + break; + } + + if (k == 26) { + int prod = words[i].size() * words[j].size(); + res = max(res, prod); + } + } + } + + return res; + } +}; \ No newline at end of file diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 007. \346\225\260\347\273\204\344\270\255\345\222\214\344\270\272 0 \347\232\204\344\270\211\344\270\252\346\225\260/README.md" "b/lcof2/\345\211\221\346\214\207 Offer II 007. \346\225\260\347\273\204\344\270\255\345\222\214\344\270\272 0 \347\232\204\344\270\211\344\270\252\346\225\260/README.md" index 36fe0cbe25bed..01ac0c5695b6f 100644 --- "a/lcof2/\345\211\221\346\214\207 Offer II 007. \346\225\260\347\273\204\344\270\255\345\222\214\344\270\272 0 \347\232\204\344\270\211\344\270\252\346\225\260/README.md" +++ "b/lcof2/\345\211\221\346\214\207 Offer II 007. \346\225\260\347\273\204\344\270\255\345\222\214\344\270\272 0 \347\232\204\344\270\211\344\270\252\346\225\260/README.md" @@ -154,6 +154,42 @@ func threeSum(nums []int) [][]int { } ``` +### **C++** + +```cpp +class Solution { +public: + vector> threeSum(vector& nums) { + vector> res; + + sort(nums.begin(), nums.end()); + for (int k = 0; k < nums.size(); k++) { + int i = k + 1; + int j = nums.size() - 1; + if (k > 0 && nums[k] == nums[k - 1]) continue; + + while(i < j) { + if (nums[i] + nums[j] + nums[k] == 0) { + res.push_back(vector{nums[k], nums[i], nums[j]}); + i++; + j--; + + while(i < j && nums[i] == nums[i - 1]) i++; + while(i < j && nums[j] == nums[j + 1]) j--; + } else if (nums[i] + nums[j] + nums[k] < 0) { + i++; + } else { + j--; + } + } + } + + return res; + } +}; +``` + + ### **...** ``` diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 007. \346\225\260\347\273\204\344\270\255\345\222\214\344\270\272 0 \347\232\204\344\270\211\344\270\252\346\225\260/Solution.cpp" "b/lcof2/\345\211\221\346\214\207 Offer II 007. \346\225\260\347\273\204\344\270\255\345\222\214\344\270\272 0 \347\232\204\344\270\211\344\270\252\346\225\260/Solution.cpp" new file mode 100644 index 0000000000000..8f9d66ba96935 --- /dev/null +++ "b/lcof2/\345\211\221\346\214\207 Offer II 007. \346\225\260\347\273\204\344\270\255\345\222\214\344\270\272 0 \347\232\204\344\270\211\344\270\252\346\225\260/Solution.cpp" @@ -0,0 +1,30 @@ +class Solution { +public: + vector> threeSum(vector& nums) { + vector> res; + + sort(nums.begin(), nums.end()); + for (int k = 0; k < nums.size(); k++) { + int i = k + 1; + int j = nums.size() - 1; + if (k > 0 && nums[k] == nums[k - 1]) continue; + + while(i < j) { + if (nums[i] + nums[j] + nums[k] == 0) { + res.push_back(vector{nums[k], nums[i], nums[j]}); + i++; + j--; + + while(i < j && nums[i] == nums[i - 1]) i++; + while(i < j && nums[j] == nums[j + 1]) j--; + } else if (nums[i] + nums[j] + nums[k] < 0) { + i++; + } else { + j--; + } + } + } + + return res; + } +}; \ No newline at end of file diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 008. \345\222\214\345\244\247\344\272\216\347\255\211\344\272\216 target \347\232\204\346\234\200\347\237\255\345\255\220\346\225\260\347\273\204/README.md" "b/lcof2/\345\211\221\346\214\207 Offer II 008. \345\222\214\345\244\247\344\272\216\347\255\211\344\272\216 target \347\232\204\346\234\200\347\237\255\345\255\220\346\225\260\347\273\204/README.md" index d002af364ff52..61db6f8f5061c 100644 --- "a/lcof2/\345\211\221\346\214\207 Offer II 008. \345\222\214\345\244\247\344\272\216\347\255\211\344\272\216 target \347\232\204\346\234\200\347\237\255\345\255\220\346\225\260\347\273\204/README.md" +++ "b/lcof2/\345\211\221\346\214\207 Offer II 008. \345\222\214\345\244\247\344\272\216\347\255\211\344\272\216 target \347\232\204\346\234\200\347\237\255\345\255\220\346\225\260\347\273\204/README.md" @@ -136,6 +136,30 @@ func min(a, b int) int { } ``` +### **C++** + +```cpp +class Solution { +public: + int minSubArrayLen(int target, vector& nums) { + int left = 0, right; + int sum = 0; + int minlen = INT_MAX; + + for (right = 0; right < nums.size(); right++) { + sum += nums[right]; + while(left <= right && sum >= target) { + minlen = min(minlen, right - left + 1); + sum -= nums[left++]; + } + } + + return minlen == INT_MAX? 0: minlen; + } +}; +``` + + ### **...** ``` diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 008. \345\222\214\345\244\247\344\272\216\347\255\211\344\272\216 target \347\232\204\346\234\200\347\237\255\345\255\220\346\225\260\347\273\204/Solution.cpp" "b/lcof2/\345\211\221\346\214\207 Offer II 008. \345\222\214\345\244\247\344\272\216\347\255\211\344\272\216 target \347\232\204\346\234\200\347\237\255\345\255\220\346\225\260\347\273\204/Solution.cpp" new file mode 100644 index 0000000000000..87dc525314219 --- /dev/null +++ "b/lcof2/\345\211\221\346\214\207 Offer II 008. \345\222\214\345\244\247\344\272\216\347\255\211\344\272\216 target \347\232\204\346\234\200\347\237\255\345\255\220\346\225\260\347\273\204/Solution.cpp" @@ -0,0 +1,18 @@ +class Solution { +public: + int minSubArrayLen(int target, vector& nums) { + int left = 0, right; + int sum = 0; + int minlen = INT_MAX; + + for (right = 0; right < nums.size(); right++) { + sum += nums[right]; + while(left <= right && sum >= target) { + minlen = min(minlen, right - left + 1); + sum -= nums[left++]; + } + } + + return minlen == INT_MAX? 0: minlen; + } +}; \ No newline at end of file diff --git a/solution/0000-0099/0067.Add Binary/README.md b/solution/0000-0099/0067.Add Binary/README.md index 5e25e2ada2bc6..ed770f8c94673 100644 --- a/solution/0000-0099/0067.Add Binary/README.md +++ b/solution/0000-0099/0067.Add Binary/README.md @@ -70,6 +70,36 @@ class Solution { } ``` +### **C++** + +```cpp +class Solution { +public: + string addBinary(string a, string b) { + string res; + int carry = 0; + + int i = a.size() - 1; + int j = b.size() - 1; + + while (i >= 0 || j >= 0) { + int digitA = i >= 0 ? a.at(i--) - '0' : 0; + int digitB = j >= 0 ? b.at(j--) - '0' : 0; + int sum = digitA + digitB + carry; + carry = sum >= 2 ? 1 : 0; + sum = sum >= 2 ? sum - 2 : sum; + res += to_string(sum); + } + + if (carry == 1) res.push_back('1'); + reverse(res.begin(), res.end()); + return res; + } +}; +``` + + + ### **C#** ```cs diff --git a/solution/0000-0099/0067.Add Binary/README_EN.md b/solution/0000-0099/0067.Add Binary/README_EN.md index 818d7ecf84484..d598d9dad0665 100644 --- a/solution/0000-0099/0067.Add Binary/README_EN.md +++ b/solution/0000-0099/0067.Add Binary/README_EN.md @@ -55,6 +55,35 @@ class Solution { } ``` +### **C++** + +```cpp +class Solution { +public: + string addBinary(string a, string b) { + string res; + int carry = 0; + + int i = a.size() - 1; + int j = b.size() - 1; + + while (i >= 0 || j >= 0) { + int digitA = i >= 0 ? a.at(i--) - '0' : 0; + int digitB = j >= 0 ? b.at(j--) - '0' : 0; + int sum = digitA + digitB + carry; + carry = sum >= 2 ? 1 : 0; + sum = sum >= 2 ? sum - 2 : sum; + res += to_string(sum); + } + + if (carry == 1) res.push_back('1'); + reverse(res.begin(), res.end()); + return res; + } +}; +``` + + ### **C#** ```cs diff --git a/solution/0000-0099/0067.Add Binary/Solution.cpp b/solution/0000-0099/0067.Add Binary/Solution.cpp new file mode 100644 index 0000000000000..dfe84b0fa803f --- /dev/null +++ b/solution/0000-0099/0067.Add Binary/Solution.cpp @@ -0,0 +1,23 @@ +class Solution { +public: + string addBinary(string a, string b) { + string res; + int carry = 0; + + int i = a.size() - 1; + int j = b.size() - 1; + + while (i >= 0 || j >= 0) { + int digitA = i >= 0 ? a.at(i--) - '0' : 0; + int digitB = j >= 0 ? b.at(j--) - '0' : 0; + int sum = digitA + digitB + carry; + carry = sum >= 2 ? 1 : 0; + sum = sum >= 2 ? sum - 2 : sum; + res += to_string(sum); + } + + if (carry == 1) res.push_back('1'); + reverse(res.begin(), res.end()); + return res; + } +}; \ No newline at end of file diff --git a/solution/0200-0299/0209.Minimum Size Subarray Sum/README.md b/solution/0200-0299/0209.Minimum Size Subarray Sum/README.md index 48cfa3cb60b3c..d97b152ce2251 100644 --- a/solution/0200-0299/0209.Minimum Size Subarray Sum/README.md +++ b/solution/0200-0299/0209.Minimum Size Subarray Sum/README.md @@ -166,6 +166,30 @@ class Solution { } ``` +### **C++** + +```cpp +class Solution { +public: + int minSubArrayLen(int target, vector& nums) { + int left = 0, right; + int sum = 0; + int minlen = INT_MAX; + + for (right = 0; right < nums.size(); right++) { + sum += nums[right]; + while(left <= right && sum >= target) { + minlen = min(minlen, right - left + 1); + sum -= nums[left++]; + } + } + + return minlen == INT_MAX? 0: minlen; + } +}; +``` + + ### **C#** ```cs diff --git a/solution/0200-0299/0209.Minimum Size Subarray Sum/README_EN.md b/solution/0200-0299/0209.Minimum Size Subarray Sum/README_EN.md index 2dcc67833cb31..a622164db4d54 100644 --- a/solution/0200-0299/0209.Minimum Size Subarray Sum/README_EN.md +++ b/solution/0200-0299/0209.Minimum Size Subarray Sum/README_EN.md @@ -143,6 +143,30 @@ class Solution { } ``` +### **C++** + +```cpp +class Solution { +public: + int minSubArrayLen(int target, vector& nums) { + int left = 0, right; + int sum = 0; + int minlen = INT_MAX; + + for (right = 0; right < nums.size(); right++) { + sum += nums[right]; + while(left <= right && sum >= target) { + minlen = min(minlen, right - left + 1); + sum -= nums[left++]; + } + } + + return minlen == INT_MAX? 0: minlen; + } +}; +``` + + ### **C#** ```cs diff --git a/solution/0200-0299/0209.Minimum Size Subarray Sum/Solution.cpp b/solution/0200-0299/0209.Minimum Size Subarray Sum/Solution.cpp new file mode 100644 index 0000000000000..87dc525314219 --- /dev/null +++ b/solution/0200-0299/0209.Minimum Size Subarray Sum/Solution.cpp @@ -0,0 +1,18 @@ +class Solution { +public: + int minSubArrayLen(int target, vector& nums) { + int left = 0, right; + int sum = 0; + int minlen = INT_MAX; + + for (right = 0; right < nums.size(); right++) { + sum += nums[right]; + while(left <= right && sum >= target) { + minlen = min(minlen, right - left + 1); + sum -= nums[left++]; + } + } + + return minlen == INT_MAX? 0: minlen; + } +}; \ No newline at end of file diff --git a/solution/0300-0399/0338.Counting Bits/README.md b/solution/0300-0399/0338.Counting Bits/README.md index 5f4caf67dd73c..060e2af51c5f8 100644 --- a/solution/0300-0399/0338.Counting Bits/README.md +++ b/solution/0300-0399/0338.Counting Bits/README.md @@ -49,6 +49,22 @@ ``` +### **C++** + +```cpp +class Solution { +public: + vector countBits(int n) { + vector res(n + 1); + for (int i = 1; i <= n; i++) { + res[i] = res[i & (i - 1)] + 1; + } + + return res; + } +}; +``` + ### **...** ``` diff --git a/solution/0300-0399/0338.Counting Bits/README_EN.md b/solution/0300-0399/0338.Counting Bits/README_EN.md index da80d1a36ebea..be09f18f35640 100644 --- a/solution/0300-0399/0338.Counting Bits/README_EN.md +++ b/solution/0300-0399/0338.Counting Bits/README_EN.md @@ -65,6 +65,22 @@ ``` +### **C++** + +```cpp +class Solution { +public: + vector countBits(int n) { + vector res(n + 1); + for (int i = 1; i <= n; i++) { + res[i] = res[i & (i - 1)] + 1; + } + + return res; + } +}; +``` + ### **...** ``` diff --git a/solution/0300-0399/0338.Counting Bits/Solution.cpp b/solution/0300-0399/0338.Counting Bits/Solution.cpp new file mode 100644 index 0000000000000..200857734d547 --- /dev/null +++ b/solution/0300-0399/0338.Counting Bits/Solution.cpp @@ -0,0 +1,11 @@ +class Solution { +public: + vector countBits(int n) { + vector res(n + 1); + for (int i = 1; i <= n; i++) { + res[i] = res[i & (i - 1)] + 1; + } + + return res; + } +}; \ No newline at end of file