diff --git a/include/common.h b/include/common.h index 64fc69c..0ecc8a1 100644 --- a/include/common.h +++ b/include/common.h @@ -22,7 +22,7 @@ ListNode* build(const std::vector& vec) { if (vec.empty()) return nullptr; ListNode* head = new ListNode(vec[0]); ListNode* cur = head; - for (int i = 1; i < vec.size(); i++) { + for (size_t i = 1; i < vec.size(); i++) { cur->next = new ListNode(vec[i]); cur = cur->next; } diff --git a/src/1-twoSum.cpp b/src/1-twoSum.cpp index db9f489..00a62e4 100644 --- a/src/1-twoSum.cpp +++ b/src/1-twoSum.cpp @@ -10,7 +10,7 @@ class Solution { public: vector twoSum(vector& nums, int target) { unordered_map hash; - for (int i = 0; i < nums.size(); i++) { + for (int i = 0; i < static_cast(nums.size()); i++) { if (hash.contains(target - nums[i])) { return {hash[target - nums[i]], i}; } diff --git a/src/13-romanToInt.cpp b/src/13-romanToInt.cpp index 879ee23..63126f5 100644 --- a/src/13-romanToInt.cpp +++ b/src/13-romanToInt.cpp @@ -20,8 +20,9 @@ class Solution { m['M'] = 1000; int res = 0; - for (int i = 0; i < s.size(); i++) { - if (i < s.size() - 1 && m[s[i]] < m[s[i + 1]]) { + const int n = static_cast(s.size()); + for (int i = 0; i < n; i++) { + if (i < n - 1 && m[s[i]] < m[s[i + 1]]) { res -= m[s[i]]; } else { res += m[s[i]]; diff --git a/src/14-longestCommonPrefix.cpp b/src/14-longestCommonPrefix.cpp index 1b7f940..cba5ab5 100644 --- a/src/14-longestCommonPrefix.cpp +++ b/src/14-longestCommonPrefix.cpp @@ -9,9 +9,10 @@ using namespace std; class Solution { public: string longestCommonPrefix(vector& strs) { - for (int i = 0; i < strs[0].size(); i++) { + const int n = static_cast(strs[0].size()); + for (int i = 0; i < n; i++) { for (const auto& str : strs) { - if (i >= str.size() || str[i] != strs[0][i]) { + if (i >= n || str[i] != strs[0][i]) { return strs[0].substr(0, i); } } diff --git a/src/15-threeSum.cpp b/src/15-threeSum.cpp index ff01203..045e6c3 100644 --- a/src/15-threeSum.cpp +++ b/src/15-threeSum.cpp @@ -14,11 +14,12 @@ class Solution { } vector> res; ranges::sort(nums); - for (int i = 0; i < nums.size() - 2; i++) { + const int n = static_cast(nums.size()); + for (int i = 0; i < n - 2; i++) { if (i > 0 && nums[i] == nums[i - 1]) { continue; } - int left = i + 1, right = nums.size() - 1; + int left = i + 1, right = n - 1; while (left < right) { int sum = nums[i] + nums[left] + nums[right]; if (sum == 0) { diff --git a/src/16-threeSumClosest.cpp b/src/16-threeSumClosest.cpp index 6202323..f108dee 100644 --- a/src/16-threeSumClosest.cpp +++ b/src/16-threeSumClosest.cpp @@ -11,11 +11,12 @@ class Solution { int threeSumClosest(vector& nums, int target) { int res = nums[0] + nums[1] + nums[2]; ranges::sort(nums); - for (int i = 0; i < nums.size() - 2; i++) { + const int n = static_cast(nums.size()); + for (int i = 0; i < n - 2; i++) { if (i > 0 && nums[i] == nums[i - 1]) { continue; } - int left = i + 1, right = nums.size() - 1; + int left = i + 1, right = n - 1; while (left < right) { int sum = nums[i] + nums[left] + nums[right]; if (sum == target) { diff --git a/src/17-letterCombinations.cpp b/src/17-letterCombinations.cpp index 47bf918..a02dacc 100644 --- a/src/17-letterCombinations.cpp +++ b/src/17-letterCombinations.cpp @@ -21,7 +21,7 @@ class Solution { const vector m{"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"}; void dfs(const string& digits, int index, string&& path, vector& res) { - if (index == digits.size()) { + if (index == static_cast(digits.size())) { res.push_back(path); return; } diff --git a/src/18-fourSum.cpp b/src/18-fourSum.cpp index 21d946c..ac00f0d 100644 --- a/src/18-fourSum.cpp +++ b/src/18-fourSum.cpp @@ -16,10 +16,11 @@ class Solution { private: vector> kSum(vector& nums, int k, int start, long target) { - if (nums.size() < k || k < 2) return {}; + const int n = static_cast(nums.size()); + if (n < k || k < 2) return {}; vector> res; if (k == 2) { - int left = start, right = nums.size() - 1; + int left = start, right = n - 1; while (left < right) { long sum = nums[left] + nums[right]; if (sum == target) { @@ -33,13 +34,13 @@ class Solution { } } } else { - for (int i = start; i < nums.size(); i++) { + for (int i = start; i < n; i++) { auto sub = kSum(nums, k - 1, i + 1, target - nums[i]); for (auto& v : sub) { v.push_back(nums[i]); res.push_back(v); } - while (i < nums.size() - 1 && nums[i] == nums[i + 1]) i++; + while (i < n - 1 && nums[i] == nums[i + 1]) i++; } } diff --git a/src/26-removeDuplicates.cpp b/src/26-removeDuplicates.cpp index 96980d8..485838f 100644 --- a/src/26-removeDuplicates.cpp +++ b/src/26-removeDuplicates.cpp @@ -11,7 +11,7 @@ class Solution { int removeDuplicates(vector& nums) { if (nums.empty()) return 0; int res = 0; - for (int i = 1; i < nums.size(); i++) { + for (int i = 1; i < static_cast(nums.size()); i++) { if (nums[res] != nums[i]) { nums[++res] = nums[i]; } @@ -24,12 +24,12 @@ void test() { Solution s; vector nums = {1, 1, 2}; vector expected = {1, 2}; - assert(s.removeDuplicates(nums) == expected.size()); + assert(s.removeDuplicates(nums) == static_cast(expected.size())); assert(vector(nums.begin(), nums.begin() + expected.size()) == expected); nums = {0, 0, 1, 1, 1, 2, 2, 3, 3, 4}; expected = {0, 1, 2, 3, 4}; - assert(s.removeDuplicates(nums) == expected.size()); + assert(s.removeDuplicates(nums) == static_cast(expected.size())); assert(vector(nums.begin(), nums.begin() + expected.size()) == expected); } diff --git a/src/27-removeElement.cpp b/src/27-removeElement.cpp index 027ed94..005c769 100644 --- a/src/27-removeElement.cpp +++ b/src/27-removeElement.cpp @@ -11,7 +11,7 @@ class Solution { int removeElement(vector& nums, int val) { if (nums.empty()) return 0; int res = -1; - for (int i = 0; i < nums.size(); i++) { + for (int i = 0; i < static_cast(nums.size()); i++) { if (nums[i] != val) { nums[++res] = nums[i]; } @@ -24,17 +24,17 @@ void test() { Solution s; vector nums = {3, 2, 2, 3}; vector expected = {2, 2}; - assert(s.removeElement(nums, 3) == expected.size()); + assert(s.removeElement(nums, 3) == static_cast(expected.size())); assert(vector(nums.begin(), nums.begin() + expected.size()) == expected); nums = {0, 1, 2, 2, 3, 0, 4, 2}; expected = {0, 1, 3, 0, 4}; - assert(s.removeElement(nums, 2) == expected.size()); + assert(s.removeElement(nums, 2) == static_cast(expected.size())); assert(vector(nums.begin(), nums.begin() + expected.size()) == expected); nums = {}; expected = {}; - assert(s.removeElement(nums, 1) == expected.size()); + assert(s.removeElement(nums, 1) == static_cast(expected.size())); assert(vector(nums.begin(), nums.begin() + expected.size()) == expected); } diff --git a/src/3-lengthOfLongestSubstring.cpp b/src/3-lengthOfLongestSubstring.cpp index b866911..7406335 100644 --- a/src/3-lengthOfLongestSubstring.cpp +++ b/src/3-lengthOfLongestSubstring.cpp @@ -9,12 +9,15 @@ using namespace std; class Solution { public: int lengthOfLongestSubstring(string s) { - char chs[128] = {0}; + int chs[128] = {0}; int res = 0; - for (int left = 0, right = 0; right < s.size(); right++) { - chs[s[right]]++; - while (chs[s[right]] > 1) { - chs[s[left++]]--; + for (int left = 0, right = 0; right < static_cast(s.size()); right++) { + auto c = static_cast(s[right]); + chs[c]++; + while (chs[c] > 1) { + auto lc = static_cast(s[left]); + chs[lc]--; + left++; } res = max(res, right - left + 1); } diff --git a/src/34-searchRange.cpp b/src/34-searchRange.cpp index 446d379..7416dd4 100644 --- a/src/34-searchRange.cpp +++ b/src/34-searchRange.cpp @@ -10,7 +10,7 @@ class Solution { public: vector searchRange(vector& nums, int target) { const int l = static_cast(ranges::lower_bound(nums, target) - nums.begin()); // find first >= target - if (l == nums.size() || nums[l] != target) return {-1, -1}; + if (l == static_cast(nums.size()) || nums[l] != target) return {-1, -1}; const int r = static_cast(ranges::upper_bound(nums, target) - nums.begin() - 1); // find first > target return {l, r}; } diff --git a/src/38-countAndSay.cpp b/src/38-countAndSay.cpp index 9ac130c..a6e9036 100644 --- a/src/38-countAndSay.cpp +++ b/src/38-countAndSay.cpp @@ -12,9 +12,10 @@ class Solution { string res = "1"; while (--n) { string tmp; - for (int i = 0; i < res.size(); ++i) { + const int m = static_cast(res.size()); + for (int i = 0; i < m; ++i) { int cnt = 1; - while (i < res.size() - 1 && res[i] == res[i + 1]) { + while (i < m - 1 && res[i] == res[i + 1]) { cnt++; i++; } diff --git a/src/39-combinationSum.cpp b/src/39-combinationSum.cpp index 6fb92d5..f215a61 100644 --- a/src/39-combinationSum.cpp +++ b/src/39-combinationSum.cpp @@ -21,7 +21,7 @@ class Solution { res.emplace_back(path); return; } - for (int i = index; i < candidates.size(); i++) { + for (int i = index; i < static_cast(candidates.size()); i++) { if (candidates[i] > target) break; path.emplace_back(candidates[i]); dfs(candidates, target - candidates[i], i, std::move(path), res); diff --git a/src/40-combinationSum2.cpp b/src/40-combinationSum2.cpp index 71f549e..f4ee6bf 100644 --- a/src/40-combinationSum2.cpp +++ b/src/40-combinationSum2.cpp @@ -21,7 +21,7 @@ class Solution { res.emplace_back(path); return; } - for (int i = index; i < candidates.size(); i++) { + for (int i = index; i < static_cast(candidates.size()); i++) { if (candidates[i] > target) break; if (i > index && candidates[i] == candidates[i - 1]) continue; // 剪枝 重点理解这个 i>index 的作用 path.emplace_back(candidates[i]); diff --git a/src/43-multiply.cpp b/src/43-multiply.cpp index 9bbf24a..176686b 100644 --- a/src/43-multiply.cpp +++ b/src/43-multiply.cpp @@ -10,15 +10,16 @@ class Solution { public: string multiply(string num1, string num2) { string res(num1.size() + num2.size(), '0'); - for (int i = num1.size() - 1; i >= 0; i--) { - for (int j = num2.size() - 1; j >= 0; j--) { + const int m = static_cast(num1.size()), n = static_cast(num2.size()); + for (int i = m - 1; i >= 0; i--) { + for (int j = n - 1; j >= 0; j--) { const int mult = (num1[i] - '0') * (num2[j] - '0'); const int sum = mult + (res[i + j + 1] - '0'); - res[i + j + 1] = (sum % 10) + '0'; + res[i + j + 1] = static_cast((sum % 10) + '0'); res[i + j] += sum / 10; } } - const int idx = res.find_first_not_of('0'); + auto idx = res.find_first_not_of('0'); return idx == string::npos ? "0" : res.substr(idx); } }; diff --git a/src/45-jump.cpp b/src/45-jump.cpp index bdd58fa..fedaee2 100644 --- a/src/45-jump.cpp +++ b/src/45-jump.cpp @@ -12,9 +12,10 @@ class Solution { int res = 0; int end = 0; int farthest = 0; - for (int i = 0; i < nums.size() - 1; i++) { + const int n = static_cast(nums.size()); + for (int i = 0; i < n - 1; i++) { farthest = max(farthest, i + nums[i]); - if (farthest >= nums.size() - 1) { + if (farthest >= n - 1) { res++; break; } diff --git a/src/46-permute.cpp b/src/46-permute.cpp index 96b92d0..9a67a07 100644 --- a/src/46-permute.cpp +++ b/src/46-permute.cpp @@ -20,7 +20,7 @@ class Solution { res.emplace_back(path); return; } - for (int i = 0; i < nums.size(); ++i) { + for (int i = 0; i < static_cast(nums.size()); ++i) { if (used[i]) continue; used[i] = true; path.emplace_back(nums[i]); diff --git a/src/47-permuteUnique.cpp b/src/47-permuteUnique.cpp index 5982fcf..93c3b8e 100644 --- a/src/47-permuteUnique.cpp +++ b/src/47-permuteUnique.cpp @@ -21,7 +21,7 @@ class Solution { res.emplace_back(path); return; } - for (int i = 0; i < nums.size(); ++i) { + for (int i = 0; i < static_cast(nums.size()); ++i) { if (used[i]) continue; if (i > 0 && nums[i] == nums[i - 1] && !used[i - 1]) continue; used[i] = true; diff --git a/src/48-rotate.cpp b/src/48-rotate.cpp index 7ae4303..fbb3579 100644 --- a/src/48-rotate.cpp +++ b/src/48-rotate.cpp @@ -9,8 +9,8 @@ using namespace std; class Solution { public: void rotate(vector>& matrix) { - int m = matrix.size(); - int n = matrix[0].size(); + const int m = matrix.size(); + const int n = matrix[0].size(); for (int i = 0; i < m; i++) { for (int j = i; j < n; j++) { swap(matrix[i][j], matrix[j][i]); // 转置 diff --git a/src/5-longestPalindrome.cpp b/src/5-longestPalindrome.cpp index 914c699..41b8169 100644 --- a/src/5-longestPalindrome.cpp +++ b/src/5-longestPalindrome.cpp @@ -10,7 +10,7 @@ class Solution { public: string longestPalindrome(string s) { pair index{0, 0}; - for (int i = 0; i < s.size(); i++) { + for (int i = 0; i < static_cast(s.size()); i++) { auto index1 = findPalindrome(s, i, i); auto index2 = findPalindrome(s, i, i + 1); index = index1.second - index1.first > index.second - index.first ? index1 : index; @@ -21,7 +21,7 @@ class Solution { private: static pair findPalindrome(string s, int left, int right) { - while (left >= 0 && right < s.size() && s[left] == s[right]) { + while (left >= 0 && right < static_cast(s.size()) && s[left] == s[right]) { left--; right++; } diff --git a/src/53-maxSubArray.cpp b/src/53-maxSubArray.cpp index 4555711..d78b704 100644 --- a/src/53-maxSubArray.cpp +++ b/src/53-maxSubArray.cpp @@ -11,7 +11,7 @@ class Solution { int maxSubArray(vector& nums) { int res = INT_MIN; int sum = 0; - for (int i = 0; i < nums.size(); i++) { + for (int i = 0; i < static_cast(nums.size()); i++) { sum += nums[i]; res = max(res, sum); if (sum < 0) { diff --git a/src/54-spiralOrder.cpp b/src/54-spiralOrder.cpp index 81ebffc..babf459 100644 --- a/src/54-spiralOrder.cpp +++ b/src/54-spiralOrder.cpp @@ -9,12 +9,12 @@ using namespace std; class Solution { public: vector spiralOrder(vector>& matrix) { - int m = matrix.size(); - int n = matrix[0].size(); + const int m = static_cast(matrix.size()); + const int n = static_cast(matrix[0].size()); vector res; res.reserve(m * n); int i = 0, j = 0; - while (res.size() < m * n) { + while (static_cast(res.size()) < m * n) { while (i >= 0 && i < m && j >= 0 && j < n && matrix[i][j] != INT_MIN) { res.push_back(matrix[i][j]); matrix[i][j] = INT_MIN; diff --git a/src/55-canJump.cpp b/src/55-canJump.cpp index c2f0108..efac5f6 100644 --- a/src/55-canJump.cpp +++ b/src/55-canJump.cpp @@ -10,9 +10,10 @@ class Solution { public: bool canJump(vector& nums) { int reach = 0; - for (int i = 0; i < nums.size() && i <= reach; ++i) { + const int n = static_cast(nums.size()); + for (int i = 0; i < n && i <= reach; ++i) { reach = max(reach, i + nums[i]); - if (reach >= nums.size() - 1) return true; + if (reach >= n - 1) return true; } return false; } diff --git a/src/6-convert.cpp b/src/6-convert.cpp index 158867e..a0d538a 100644 --- a/src/6-convert.cpp +++ b/src/6-convert.cpp @@ -13,7 +13,7 @@ class Solution { return s; } vector> m(numRows); - for (int i = 0, row = 0, dir = 1; i < s.size(); i++) { + for (int i = 0, row = 0, dir = 1; i < static_cast(s.size()); i++) { if (dir == 1) { m[row++].push_back(s[i]); } else { diff --git a/src/64-minPathSum.cpp b/src/64-minPathSum.cpp index b08e365..2dfbf21 100644 --- a/src/64-minPathSum.cpp +++ b/src/64-minPathSum.cpp @@ -9,8 +9,8 @@ using namespace std; class Solution { public: int minPathSum(vector>& grid) { - const int m = grid.size(); - const int n = grid[0].size(); + const int m = static_cast(grid.size()); + const int n = static_cast(grid[0].size()); vector> dp(m, vector(n, 0)); dp[0][0] = grid[0][0]; for (int i = 1; i < m; ++i) { diff --git a/src/66-plusOne.cpp b/src/66-plusOne.cpp index 9579942..d50b7d5 100644 --- a/src/66-plusOne.cpp +++ b/src/66-plusOne.cpp @@ -9,7 +9,7 @@ using namespace std; class Solution { public: vector plusOne(vector& digits) { - for (int i = digits.size() - 1; i >= 0; --i) { + for (int i = static_cast(digits.size()) - 1; i >= 0; --i) { if (digits[i] < 9) { digits[i]++; return digits; diff --git a/src/67-addBinary.cpp b/src/67-addBinary.cpp index eade124..9895573 100644 --- a/src/67-addBinary.cpp +++ b/src/67-addBinary.cpp @@ -10,12 +10,12 @@ class Solution { public: string addBinary(string a, string b) { string res; - int i = a.size() - 1, j = b.size() - 1, carry = 0; + int i = static_cast(a.size()) - 1, j = static_cast(b.size()) - 1, carry = 0; while (i >= 0 || j >= 0 || carry) { const int x = i >= 0 ? a[i--] - '0' : 0; const int y = j >= 0 ? b[j--] - '0' : 0; const int sum = x + y + carry; - res.push_back(sum % 2 + '0'); + res.push_back(static_cast(sum % 2 + '0')); carry = sum / 2; } ranges::reverse(res); diff --git a/src/69-mySqrt.cpp b/src/69-mySqrt.cpp index 55abd5c..a637c40 100644 --- a/src/69-mySqrt.cpp +++ b/src/69-mySqrt.cpp @@ -15,7 +15,7 @@ class Solution { int left = 1, right = x / 2; int res = 0; while (left <= right) { - int mid = left + ((right - left) >> 1); + const int mid = left + ((right - left) >> 1); if (mid <= x / mid) { res = mid; left = mid + 1; diff --git a/src/74-searchMatrix.cpp b/src/74-searchMatrix.cpp index b8468ca..01936b1 100644 --- a/src/74-searchMatrix.cpp +++ b/src/74-searchMatrix.cpp @@ -9,8 +9,8 @@ using namespace std; class Solution { public: bool searchMatrix(vector>& matrix, int target) { - const int m = matrix.size(); - const int n = matrix[0].size(); + const int m = static_cast(matrix.size()); + const int n = static_cast(matrix[0].size()); int i = 0, j = n - 1; while (i >= 0 && i < m && j >= 0 && j < n) { if (matrix[i][j] == target) { diff --git a/src/77-combine.cpp b/src/77-combine.cpp index 11669d2..5fb8095 100644 --- a/src/77-combine.cpp +++ b/src/77-combine.cpp @@ -17,7 +17,7 @@ class Solution { private: void dfs(vector>& res, vector&& path, int start, int n, int k) { - if (path.size() == k) { + if (static_cast(path.size()) == k) { res.emplace_back(path); return; } diff --git a/src/78-subsets.cpp b/src/78-subsets.cpp index 8f8a6fc..a9733a1 100644 --- a/src/78-subsets.cpp +++ b/src/78-subsets.cpp @@ -18,7 +18,7 @@ class Solution { private: void dfs(vector& nums, int index, vector&& path, vector>& res) { res.emplace_back(path); - for (int i = index; i < nums.size(); i++) { + for (int i = index; i < static_cast(nums.size()); i++) { path.emplace_back(nums[i]); dfs(nums, i + 1, std::move(path), res); path.pop_back(); diff --git a/src/79-exist.cpp b/src/79-exist.cpp index 672d609..922f9c4 100644 --- a/src/79-exist.cpp +++ b/src/79-exist.cpp @@ -26,8 +26,8 @@ class Solution { if (path == word) { return true; } - if (i < 0 || i >= board.size() || j < 0 || j >= board[0].size() || search[i][j] || - board[i][j] != word[path.size()]) { + if (i < 0 || i >= static_cast(board.size()) || j < 0 || j >= static_cast(board[0].size()) || + search[i][j] || board[i][j] != word[path.size()]) { return false; } search[i][j] = true; diff --git a/src/8-myAtoi.cpp b/src/8-myAtoi.cpp index c9947e1..0f664e0 100644 --- a/src/8-myAtoi.cpp +++ b/src/8-myAtoi.cpp @@ -9,7 +9,7 @@ using namespace std; class Solution { public: int myAtoi(string s) { - int i = s.find_first_not_of(' '); + size_t i = s.find_first_not_of(' '); if (i == string::npos) return 0; const int sign = s[i] == '-' ? -1 : 1; if (s[i] == '-' || s[i] == '+') i++; diff --git a/src/80-removeDuplicates.cpp b/src/80-removeDuplicates.cpp index 778b3ba..bee5f76 100644 --- a/src/80-removeDuplicates.cpp +++ b/src/80-removeDuplicates.cpp @@ -23,12 +23,12 @@ void test() { Solution s; vector nums = {1, 1, 1, 2, 2, 3}; vector expected = {1, 1, 2, 2, 3}; - assert(s.removeDuplicates(nums) == expected.size()); + assert(s.removeDuplicates(nums) == static_cast(expected.size())); assert(vector(nums.begin(), nums.begin() + expected.size()) == expected); nums = {0, 0, 1, 1, 1, 1, 2, 3, 3}; expected = {0, 0, 1, 1, 2, 3, 3}; - assert(s.removeDuplicates(nums) == expected.size()); + assert(s.removeDuplicates(nums) == static_cast(expected.size())); assert(vector(nums.begin(), nums.begin() + expected.size()) == expected); } diff --git a/src/90-subsetsWithDup.cpp b/src/90-subsetsWithDup.cpp index f144d69..37bea98 100644 --- a/src/90-subsetsWithDup.cpp +++ b/src/90-subsetsWithDup.cpp @@ -19,7 +19,7 @@ class Solution { private: void dfs(vector& nums, int index, vector&& path, vector>& res) { res.emplace_back(path); - for (int i = index; i < nums.size(); ++i) { + for (int i = index; i < static_cast(nums.size()); ++i) { if (i > index && nums[i] == nums[i - 1]) { continue; } diff --git a/src/91-numDecodings.cpp b/src/91-numDecodings.cpp index 2ac2ec3..a0e85bd 100644 --- a/src/91-numDecodings.cpp +++ b/src/91-numDecodings.cpp @@ -16,7 +16,7 @@ class Solution { } else { dp[1] = 1; } - for (int i = 2; i <= s.size(); i++) { + for (int i = 2; i <= static_cast(s.size()); i++) { if (s[i - 1] != '0') { dp[i] += dp[i - 1]; }