借助HashMap记录之前的数之和

病毒检测

http://www.nowcoder.com/questionTerminal/6f0d16fc06274f44af8913d182668037

借助HashMap记录之前的数之和
时间复杂度:o(n) 空间复杂度:o(n)

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        String l1=sc.nextLine();
        String l2=sc.nextLine();
        int k=Integer.parseInt(l1);
        char[] nums=l2.toCharArray();
        int num=0;
        long ans=0; //注意:答案数值可能很大,用long防止溢出
        HashMap<Integer,Integer> map=new HashMap<>();
        map.put(0,1);
        for(int i=0;i<nums.length;i++){
            if(nums[i]=='1') num+=1;
            if(map.containsKey(num-k)) ans+=map.get(num-k);  //累加之前的答案
            map.put(num,map.getOrDefault(num,0)+1);
        }
        System.out.println(ans);
    }
}
全部评论
可以讲解一下吗。。
1 回复 分享
发布于 2020-04-18 11:54
太强了,以当前数组索引作为满足k的满足条件,然后往前推
点赞 回复 分享
发布于 2020-07-29 21:33
加1
点赞 回复 分享
发布于 2020-05-21 14:38
没看懂
点赞 回复 分享
发布于 2020-03-24 17:17

相关推荐

也许是天气_:放在双9简历池里也是中上简历,没人指导一是看不懂,二是可能在偷偷抄你简历亮点。如果大厂0面,多半是卡学历了。我觉得你这情况不愁offer,找工作跟投资一样的,90%的时间都是在等待。
点赞 评论 收藏
分享
驼瑞驰_招募评论官版...:点击就挂,露头就秒
点赞 评论 收藏
分享
评论
8
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务