/**
1457 · Search Subarray
Algorithms
Medium
Accepted Rate
40%
DescriptionSolutionNotesDiscussLeaderboard
Description
Given an array arr and a nonnegative integer k, you need to find a continuous array from this array so that the sum of this array is k. Output the length of this array. If there are multiple such substrings, return the one with the minimum ending position; if there are multiple answers, return the one with the minimum starting position. If no such subarray is found, -1 is returned.
The length of the array does not exceed 10^610
6
, each number in the array is less than or equal to 10^610
6
, and k does not exceed 10^610
6
.
Example
Example 1 :
Input:arr=[1,2,3,4,5] ,k=5
Output:2
Explanation:
In this array, the earliest contiguous substring is [2,3].
Example 2 :
Input:arr=[3,5,7,10,2] ,k=12
Output:2
Explanation:
In this array, the earliest consecutive concatenated substrings with a sum of 12 are [5,7].
Tags
Company
Amazon
https://blog.youkuaiyun.com/qq_46105170/article/details/111027683
https://www.lintcode.com/problem/1457/
*/
/**
* @param arr: The array
* @param k: the sum
* @return: The length of the array
*/
func searchSubarray (arr []int, k int) int {
// Write your code here
for i := 1; i < len(arr); i++ {
arr[i] += arr[i - 1]
}
var indexMap = make(map[int]int)
for i := len(arr) - 1; i >= 0; i-- {
indexMap[arr[i]] = i
}
indexMap[0] = -1
for i := 0; i < len(arr); i++ {
v, ok := indexMap[arr[i] - k]
if ok && i > v {
return i - v
}
}
return -1
}