Contiguous Array with Equal Number of 0 & 1
2018-07-08 13:24:31
一、525. Contiguous Array
问题描述:

问题求解:
我们都知道对于subarray的问题,暴力求解的时间复杂度为O(n ^ 2),问题规模已经给出是50000量级,显然只能是O(n),至多O(nlogn)的复杂度。
本题使用DP和滑动数组都比较棘手,这才是最麻烦的地方,我们知道一般来说对于subarray的问题,dp和滑动数组是两大利器,但是本题这两个最实用的解法都不再适用,那么该如何解决呢?
其实想通了就是一个很简单的问题,本题是longest target sum subarray的变种题,核心的思路就是进行一步转化,如果把0变成-1,那么原题就变成了求target sum == 0的最长子数组。
这里给出的方案是preSum + HashMap的策略来进行解决,可以说方法是比较巧妙的。
public int findMaxLength(int[] nums) {
int res = 0;
HashMap<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) if (nums[i] == 0) nums[i] = -1;
int sum = 0;
map.put(0, -1);
for (int i = 0; i < nums.length; i++) {
sum += nums[i];
if (map.containsKey(sum)) res = Math.max(res, i - map.get(sum));
else map.put(sum, i);
}
return res;
}
二、1124. Longest Well-Performing Interval
问题求解:

问题求解:
无独有偶,leetcode最近的contest中出了一题非常类似的问题,本质上依然是最长target sum的子数组,当时的想法也是陷入了范式中,错误的认为子数组的问题都可以使用dp或者滑动数组进行求解,导致走入了死胡同。
本题也是一条变种题,可见如何直接出subarray of target sum 是没有多大的价值的,这个题目直接问的话,就非常简单直白,很容易就会想到使用hashmap去求解,但是如果进行一下包装,就未必能想到了。
总之,碰到subarray的问题,不仅要能联想到dp/sliding window,还要有意识去想想其他的解法。
public int longestWPI(int[] hours) {
if (hours.length == 0) return 0;
int n = hours.length;
int res = 0;
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < n; i++) {
if (hours[i] > 8) hours[i] = 1;
else hours[i] = -1;
}
int curSum = 0;
for (int i = 0; i < n; i++) {
curSum += hours[i];
if (curSum >= 1) res = Math.max(res, i + 1);
if (map.containsKey(curSum - 1)) res = Math.max(res, i - map.get(curSum - 1));
map.put(curSum, map.getOrDefault(curSum, i));
}
return res;
}
Contiguous Array with Equal Number of 0 & 1的更多相关文章
- [LeetCode] Contiguous Array 邻近数组
Given a binary array, find the maximum length of a contiguous subarray with equal number of 0 and 1. ...
- [Swift]LeetCode525. 连续数组 | Contiguous Array
Given a binary array, find the maximum length of a contiguous subarray with equal number of 0 and 1. ...
- 994.Contiguous Array 邻近数组
描述 Given a binary array, find the maximum length of a contiguous subarray with equal number of 0 and ...
- LeetCode 525. Contiguous Array
525. Contiguous Array Add to List Description Submission Solutions Total Accepted: 2476 Total Submis ...
- 525. Contiguous Array两位求和为1的对数
[抄题]: Given a binary array, find the maximum length of a contiguous subarray with equal number of 0 ...
- 525. Contiguous Array
Given a binary array, find the maximum length of a contiguous subarray with equal number of 0 and 1. ...
- [LeetCode] 525. Contiguous Array 相连的数组
Given a binary array, find the maximum length of a contiguous subarray with equal number of 0 and 1. ...
- 【LeetCode】525. Contiguous Array 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 累积和 日期 题目地址:https://leetco ...
- IE下Array.prototype.slice.call(params,0)
i8 不支持 Array.prototype.slice.call(params,0) params可以是 HTMLCollection.类数组.string字符串
随机推荐
- CE寻找游戏基址
什么是游戏基址? 游戏基址是保持恒定的两部分内存地址的一部分并提供一个基准点,从这里可以计算一个字节数据的位置.基址伴随着一个加到基上的偏移值来确定信息准确的位置(绝对地址). 全局基址 一级基址 二 ...
- Linux服务器配置---安装telnet
安装telnet telnet是标准的远程登录协议,历史悠久.但是telnet的对话数据没有加密,甚至用户名和密码都是明文显示,这样的服务风险极大.目前大多数系统多已经不会再安装这个服务了, ...
- Linux基础命令---more
more 将内容较长的文本文件内容分屏显示,支持定位关键字.此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. 1.语法 ...
- excel第一次打开报错 向程序发送命令时出错 多种解决办法含终极解决方法
excel第一次打开报错 向程序发送命令时出错 多种解决办法含终极解决方法 office2007应该遇到“向程序发送命令时出现 问题”,设置为以管理员运行也不好用,重装office也不好用,下面介绍下 ...
- 简化document.createElement("div")动态生成层方法
我们在WEB开发时,很多时候往往需要我们 JavaScript 来动态建立 html 元素,动态的设置相关的属性.比方说我们想要建立一個 div 层,则可以使用以下代码实现. 一.直接建立functi ...
- Java的各种加密算法
Java的各种加密算法 JAVA中为我们提供了丰富的加密技术,可以基本的分为单向加密和非对称加密 1.单向加密算法 单向加密算法主要用来验证数据传输的过程中,是否被篡改过. BASE64 严格地说,属 ...
- c++随机数及rand()的缺陷
c++生成随机整数和浮点数如下: #include <random> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { ...
- 20145127《java程序设计》第一次实验
<java程序设计>第一次实验 实验内容及其步骤 1.使用JDK编写简单的Java小程序: Java编译的方法有很多,最基础最简单的就是使用命令行,记事本,Java虚拟机直接进行编译,下面 ...
- 记录openwrt下补丁apply的过程中出错,但是可以单独打上该补丁
背景: 在openwrt的编译框架下无法正确打上补丁,而单独使用git却可以成功 这个补丁到底与其它补丁有何不同? 该补丁的生成的过程解析: 旧文件:vi 打开旧文件会提示no newline at ...
- 奇怪的分式|2014年蓝桥杯B组题解析第六题-fishers
奇怪的分式 上小学的时候,小明经常自己发明新算法.一次,老师出的题目是: 1/4 乘以 8/5 小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (参见图1.png) 老师刚想批评他,转念 ...