[总结] O(n)求和为0的最长子段】的更多相关文章

以这题为例 Solution 我们首先用前缀和差分,可以认为G是1,R是-1,然后求一个前缀和qzh. 如果 qzh[i]==qzh[j] 那么 i~j 这一整段,一定是一个和为0的区间,即红绿相等的稳定区间. 那么我们维护一个 num 数组,其中 num[i] 代表前缀和为 i 时的最小出现位置,即 num[i]=min{j} (qzh[j]=i) 因为有负数,所以要统一加 len 没了. 这做法好神奇=.= // By YoungNeal #include<cstdio> #include…
点击这里查看原文 假设一个数组仅仅由1和-1组成,求该数组的和为0的最长子串的长度. 例如: {1,-1,1,-1,1,1,1} 输出:4. 昨天机试的时候做到这道题,不会做,今天思考一下. 普通的解法 枚举所有的子串,然后得到和为0的最长的长度,复杂度是O(n*n),这个应该会超时,昨天只能保存,不能运行,我猜这样应该不行,需要下面方法.其实看到这题,我想到的是最长回文子串这道题,仔细想想,还是挺像的,该搞一个传送门的. 正确的解法 解法:动态规划,dp0[i]表示以i结尾的加和为0 得到最长…
题目链接 https://leetcode.com/problems/3sum/?tab=Description   Problem: 给定整数集合,找到所有满足a+b+c=0的元素组合,要求该组合不重复.   首先对给出的数组进行排序 Arrays.sort() 从第0个元素开始进行判断,对应的有最大值num[high] 1.当num[low]+num[high]== -num[i]时,此时可以将num[low],num[high],num[i]添加至list中     a. 当low<hig…
72-Financial Management 内存限制:64MB 时间限制:3000ms 特判: No 通过数:7 提交数:12 难度:1 题目描述: Larry graduated this year and finally has a job. He's making a lot of money, but somehow never seems to have enough. Larry has decided that he needs to grab hold of his fina…
package com.hanqi.yzljs; public class yzljs { public static void main(String[] args) {     final double PI = 3.1415926;     double r =3.0;     double c =2*PI*r;     double s = PI*r*r;     System.out.println("圆的周长="+c+"    圆的面积="+s); }…
B. Balanced Substring time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output You are given a string s consisting only of characters 0 and 1. A substring [l, r] of s is a string slsl + 1sl + 2... s…
在完成一个Access表中数据统计时,需要统计指定字段的和,使用到了Sum函数,但统计时发现,指定条件查询统计时有可能返回空值(Null),导致对应字段显示为空白,正常应显示为0.基本思路是在获取记录集RS后进行判断,然后设置为0. 今天突然想到iif,于是又测试了一篇,比之前的简单多了,关键代码: select iif(isnull(sum(求和字段)),0,sum(求和字段)) as 求和字段别名 from 表名 where 条件…
4 Values whose Sum is 0 Time Limit: 15000MS Memory Limit: 228000K Total Submissions: 19322 Accepted: 5778 Case Time Limit: 5000MS Description The SUM problem can be formulated as follows: given four lists A, B, C, D of integer values, compute how man…