赞
踩
题目链接:
https://www.nowcoder.com/practice/704c8388a82e42e58b7f5751ec943a11
滑动窗口,map,前缀和
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)) //第一次的时候存入map map.put(sum, i); if (map.containsKey(sum - k)) { //更新答案 ans = Math.max(ans, i - map.get(sum - k)); } } return ans; } }
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] = -1 ans := 0 sum := 0 //前缀和 for i, v := range arr { sum = sum + v _, ok := cache[sum] if !ok { //第一次的时候才放入map cache[sum] = i } _, ok1 := cache[sum-k] if ok1 { //更新答案 tmp := i - cache[sum-k] if ans < tmp { ans = tmp } } } return ans }
<?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; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。