一、题目说明

题目560. Subarray Sum Equals K,给一列整数和一个整数k,找到所有子数组和是k的个数。难度是Medium!

二、我的解答

这个题目第一印象是用dp,很快代码就写好了。然而 Memory Limit Exceeded,其中vector<vector<int> > dp(len+1,vector<int>(len+1,0));

代码如下:

class Solution{
	public:
		int subarraySum(vector<int>& nums,int k){
			int len = nums.size();
			int total = 0;
			vector<vector<int> > dp(len+1,vector<int>(len+1,0));
			for(int i=0;i<len;i++){
				dp[i][i] = nums[i];
				if(nums[i]==k){
					total++;
				}
			}
			for(int i=0;i<len;i++){
				for(int j=i+1;j<len;j++){
					dp[i][j] = dp[i][j-1] + nums[j];
					if(dp[i][j]==k){
						total++;
					}
				}
			}
			return total;
		}
};

三、优化措施

那就一个一计算吧,用dfs:

class Solution{
	public:
		int subarraySum(vector<int>& nums,int k){
			int len = nums.size();
			int total = 0;

			for(int i=0;i<len;i++){
				total += dfs(nums,i,k);
			}
			
			return total;
		}
		int dfs(vector<int>& nums,int start,int k){
			int total = 0;
			int sum = 0;
			for(int i=start;i<nums.size();i++){
				sum += nums[i];
				if(sum==k) total++;
			}
			return total;
		}
};

性能如下:

Runtime: 464 ms, faster than 24.82% of C++ online submissions for Subarray Sum Equals K.
Memory Usage: 9.8 MB, less than 98.67% of C++ online submissions for Subarray Sum Equals K.

相关文章:

  • 2022-12-23
  • 2021-10-30
  • 2021-11-07
  • 2021-06-23
  • 2021-09-20
  • 2021-10-18
  • 2021-07-01
  • 2021-11-14
猜你喜欢
  • 2021-05-14
  • 2021-06-29
  • 2021-11-27
  • 2021-08-24
  • 2022-12-23
相关资源
相似解决方案