vault backup: 2022-09-05 15:36:37

This commit is contained in:
juan 2022-09-05 15:36:37 +08:00
parent d40ae12dd3
commit 57003c9601
2 changed files with 104 additions and 1 deletions

View file

@ -39,6 +39,6 @@
"repelStrength": 10, "repelStrength": 10,
"linkStrength": 1, "linkStrength": 1,
"linkDistance": 250, "linkDistance": 250,
"scale": 0.7878344292720599, "scale": 0.7463733455586773,
"close": true "close": true
} }

View file

@ -0,0 +1,103 @@
# Leetcode Subarray-Sum-Equals-K
2022-09-05 15:22
> ##### Algorithms:
>
> #algorithm #sliding_window #hash_table
>
> ##### Data structures:
>
> #DS
>
> ##### Difficulty:
>
> #coding_problem #difficulty-medium
>
> ##### Additional tags:
>
> #leetcode
>
> ##### Revisions:
>
> N/A
##### Links:
- [Link to problem](https://leetcode.com/problems/subarray-sum-equals-k/)
---
### Problem
Given an array of integers `nums` and an integer `k`, return _the total number of subarrays whose sum equals to_ `k`.
A subarray is a contiguous **non-empty** sequence of elements within an array.
#### Examples
**Example 1:**
**Input:** nums = [1,1,1], k = 2
**Output:** 2
**Example 2:**
**Input:** nums = [1,2,3], k = 3
**Output:** 2
#### Constraints
- `1 <= nums.length <= 2 * 104`
- `-1000 <= nums[i] <= 1000`
- `-107 <= k <= 107`
### Thoughts
> [!summary]
> This can be solved using #sliding_window
> I over-complicated the solution by adding stuff like
> sorting, but it turn out to be not so difficult.
Since the subsets are **contiguous**, we can use sliding
window here.
### Solution
TLE, brute force
```cpp
class Solution {
public:
int subarraySum(vector<int> &nums, int k) {
// O(N^2 / 2)
int n = nums.size();
if (n == 1) {
return (k == nums[0]);
}
vector<int> prefix(n + 1, 0);
int prefixSum = 0;
for (int i = 0; i < n; i++) {
prefixSum += nums[i];
prefix[i + 1] = prefixSum;
}
int count = 0;
for (int i = 0; i < n + 1; i++) {
for (int j = i + 1; j < n + 1; j++) {
if (prefix[j] - prefix[i] == k) {
count++;
}
}
}
return count;
}
};
```