zoukankan      html  css  js  c++  java
  • leetcode@ [303/304] Range Sum Query

    https://leetcode.com/problems/range-sum-query-immutable/

    class NumArray {
    
    public: vector<int> vec;
    public:
        NumArray(vector<int> &nums) {
            if(nums.empty()) return;
            else {
                vec.push_back(nums[0]);
                for(int i=1;i<nums.size();++i) vec.push_back(vec[i-1] + nums[i]);
            }
        }
    
        int sumRange(int i, int j) {
            if(i<0 || j>=vec.size()) return 0;
            if(i==0) return vec[j];
            else return vec[j] - vec[i-1];
        }
    };
    
    
    // Your NumArray object will be instantiated and called as such:
    // NumArray numArray(nums);
    // numArray.sumRange(0, 1);
    // numArray.sumRange(1, 2);
    View Code

    https://leetcode.com/problems/range-sum-query-2d-immutable/

    class NumMatrix {
    public:
        vector<vector<int>> vec;
        NumMatrix(vector<vector<int>> &matrix) {
            if(matrix.size() == 0 || matrix[0].size() == 0) return;
            vec.resize(matrix.size());
            for(int i=0;i<vec.size();++i) vec[i].resize(matrix[0].size());
            
            vec[0][0] = matrix[0][0];
            for(int col=1;col<vec[0].size();++col) vec[0][col] = matrix[0][col] + vec[0][col-1];
            
            for(int row=1;row<vec.size();++row) {
                for(int col=0;col<vec[row].size();++col) {
                    if(col == 0) vec[row][col] = matrix[row][col];
                    else vec[row][col] = matrix[row][col] + vec[row][col-1];
                }
            }
            
            for(int row=1;row<vec.size();++row) {
                for(int col=0;col<vec[row].size();++col) {
                    vec[row][col] += vec[row-1][col];
                }
            }
            
            for(int i=0;i<vec.size();++i) {
                for(int j=0;j<vec[i].size();++j) cout<<vec[i][j]<<" ";
                cout<<endl;
            }
        }
        int sumRegion(int row1, int col1, int row2, int col2) {
            if(row1<0 || row2>=vec.size() || col1<0 || col2>=vec[0].size()) return 0;
        
            int leftTop = 0;
            if(row1 == 0 || col1 == 0) leftTop = 0;
            else if(row1 && col1) leftTop = vec[row1-1][col1-1];
            
            int ret1 = 0;
            if(row1 == 0) ret1 = vec[row2][col2];
            else if(row1 > 0) ret1 = vec[row2][col2] - vec[row1-1][col2];
            
            int ret2 = 0;
            if(col1 == 0) ret2 = ret1;
            else if(col1 > 0) ret2 = ret1 - vec[row2][col1-1] + leftTop;
            
            return ret2;
        }
    };
    
    
    // Your NumMatrix object will be instantiated and called as such:
    // NumMatrix numMatrix(matrix);
    // numMatrix.sumRegion(0, 1, 2, 3);
    // numMatrix.sumRegion(1, 2, 3, 4);
    View Code
  • 相关阅读:
    Morpheus
    UCSC cancer genome
    LSF 作业系统常用命令
    R 语言处理excel为data.frame
    Expression Atlas
    Oncomine 数据库
    pathlib.Path 类的使用
    DT包 -- R语言中自定义表格数据
    R 目录及文件操作
    R 指定安装镜像的方法
  • 原文地址:https://www.cnblogs.com/fu11211129/p/4960013.html
Copyright © 2011-2022 走看看