题目
题目链接:
https://www.nowcoder.com/practice/704c8388a82e42e58b7f5751ec943a11
思考
滑动窗口,map,前缀和
参考答案Java
import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** max length of the subarray sum = k* @param arr int整型一维数组 the array* @param k int整型 target* @return int整型*/public int maxlenEqualK (int[] arr, int k) {//滑动窗口int n = arr.length;Map<Integer, Integer> map = new HashMap<>();int sum = 0, ans = 0;map.put(0, -1);for (int i = 0; i < n ; i++) {sum += arr[i];if (!map.containsKey(sum)) //第一次的时候存入mapmap.put(sum, i);if (map.containsKey(sum - k)) { //更新答案ans = Math.max(ans, i - map.get(sum - k));}}return ans;}
}
参考答案Go
package main/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** max length of the subarray sum = k* @param arr int整型一维数组 the array* @param k int整型 target* @return int整型*/
func maxlenEqualK(arr []int, k int) int {// 滑动窗口cache := map[int]int{}cache[0] = -1ans := 0sum := 0 //前缀和for i, v := range arr {sum = sum + v_, ok := cache[sum]if !ok { //第一次的时候才放入mapcache[sum] = i}_, ok1 := cache[sum-k]if ok1 { //更新答案tmp := i - cache[sum-k]if ans < tmp {ans = tmp}}}return ans
}
参考答案PHP
<?php/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** max length of the subarray sum = k* @param arr int整型一维数组 the array* @param k int整型 target* @return int整型*/
function maxlenEqualK( $arr , $k )
{// 滑动窗口$map = [0 => -1];$ans = 0;$sum = 0; //前缀和foreach ($arr as $i => $v) {$sum += $v;if (!isset($map[$sum])) { //第一次的时候才存入map$map[$sum] = $i;}if (isset($map[$sum - $k])) {//更新答案$t = $i - $map[$sum - $k];if ($t > $ans) {$ans = $t;}}}return $ans;
}