算法打卡第一天
问题描述:
给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。
#include<iostream>
#include<vector>
using namespace std;
class Solution //子数组个数问题
{
public:
int subarraySum(vector<int>& nums, int k)
{
int res = 0, n = nums.size();
for (int i = 0; i < n; ++i)
{
int sum = nums[i];
if (sum == k) ++res;
for (int j = i + 1; j < n; ++j)
{
sum += nums[j];
if (sum == k) ++res;
}
}
return res;
}
};
class Solution_p //找两数之和是否在数组中
{
public:
vector<int> twoSum(vector<int>& nums, int target)
{
unordered_map<int, int> m;
vector<int> res;
for (int i = 0; i < nums.size(); ++i)
{
m[nums[i]] = i;
}
for (int i = 0; i < nums.size(); ++i)
{
int t = target - nums[i];
if (m.count(t) && m[t] != i)
{
res.push_back(i);
res.push_back(m[t]);
break;
}
}
return res;
}
};
int main()
{
Solution s;
int arr[] = {1,3,4,6,4,6,4};
vector<int> vec(arr, arr+sizeof(arr)/sizeof(arr[0]));
int count = s.subarraySum(vec, 10);
cout << count << endl;
return 0;
}
算法思想:
1>判断K是否在数组中存在,存在则+1;
2>从下一个元素开始累加,匹配则+1,遍历完后从下一个重新开始;