美文网首页
437.path-sum-iii(普通的双重递归,高级解法先放着

437.path-sum-iii(普通的双重递归,高级解法先放着

作者: Optimization | 来源:发表于2020-05-28 15:41 被阅读0次
问题:

1.相似的题目一起做啊
2.看隐藏提示
3.多用用几种方法啊

正文:
class Solution {
public:
    int pathSum(TreeNode* root, int sum) {
        if(!root) return 0;
        // 什么意思啊
        // 前序遍历,深度优先
        // 进行遍历全部节点
        return numberOfPaths(root, sum) + 
               pathSum(root->left, sum) + 
               pathSum(root->right, sum);
            
    }
private:
    // 统计某一节点开始的路径个数
    int numberOfPaths(TreeNode* root, int& sum){
        if (!root) return 0;
        int newsum  = sum - root->val;
        return (newsum == 0 ? 1 : 0) + 
        numberOfPaths(root->left, newsum) + 
        numberOfPaths(root->right, newsum);
    }
};
560.subarray-sum-equals-k(超时!!!!)
class Solution {
public:
    int subarraySum(vector<int>& nums, int k) {
        if(!nums.size()) return 0;
        return subarraySum(nums, 0, k);
    }
private:
    int subarraySum(vector<int>& nums,int i, int sum){
        if(!nums.size() || i >= nums.size()) return 0;
        return numOfPaths(nums, i, sum) + subarraySum(nums, i+1,sum);;
    }

    int numOfPaths(vector<int>& nums, int i, int sum){
        if(!nums.size()||i >= nums.size()) return 0;
        int new_sum = sum - nums[i];
        return (new_sum == 0 ? 1 : 0) + numOfPaths(nums, i+1, new_sum); 
    }    
};
437的神奇解法,好难。先放着。
class Solution {
public:
    int subarraySum(vector<int>& nums, int k) {
        if(nums.empty()) return 0;
        
        // 为什么要这么初始化呢?
        // [1,1,1] 2  
        unordered_map<int, int> counts{{0, 1}};
        
        int cur_sum = 0;
        int ans = 0;
        
        for(const int num : nums){
            cur_sum += num;

            // 对s[j] - s[i] == k 出现的个数进行计数 转换为对s[j]-k 的个数进行计数。
            ans += counts[cur_sum - k];
            // 把这个放在前面和后面又什么影响呢? [1] 0 会是错的。
            ++counts[cur_sum];
            
        }
        return ans;
    }
};

相关文章

网友评论

      本文标题:437.path-sum-iii(普通的双重递归,高级解法先放着

      本文链接:https://www.haomeiwen.com/subject/paraahtx.html