class Solution {public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { int left = m-1,right = n-1; int sum = m + n - 1; while(left >= 0 || right >= 0){ if(left < 0){ nums1[sum--]=nums2[right--]; }else if(right < 0){ nums1[sum--]=nums1[left--]; }else if(nums1[left]>nums2[right]){ nums1[sum--]=nums1[left--]; }else { nums1[sum--]=nums2[right--]; } } }};
题解
class Solution {public: int removeDuplicates(vector<int> &nums) { if (nums.empty()) { return 0; } int k = 0; for (int i = 1; i < nums.size(); i++) { if (nums[i] != nums[k]) { k++; nums[k] = nums[i]; } } return k + 1; }};
class NumArray {public: vector<int> sum; NumArray(vector<int> &nums) { sum = vector<int>(nums.size() + 1); for (int i = 0; i < nums.size(); i++) { //前缀和 预处理 都计算出来。 sum[i + 1] = sum[i] + nums[i]; } } int sumRange(int i, int j) { return sum[j + 1] - sum[i]; }};
class NumMatrix {public: vector<vector<int>> sum; NumMatrix(vector<vector<int>> &matrix) { if(matrix.size()==0){ return; } int M = matrix.size(); // if(M > 0){ int N = matrix[0].size(); sum = vector<vector<int>>(M, vector<int>(N + 1)); for (int i = 0; i < M; i++) { for (int j = 0; j < N; j++) { sum[i][j + 1] = sum[i][j] + matrix[i][j]; } } } // } int sumRegion(int row1, int col1, int row2, int col2) { int ans = 0; for (int row = row1; row <= row2; row++) { ans += sum[row][col2 + 1] - sum[row][col1]; } return ans; }};