当前位置: 首页 > wzjs >正文

武进常州做网站wordpress 插件play

武进常州做网站,wordpress 插件play,青岛做网站的公司,合肥设计工作室每日算法 - 20240605 525. 连续数组 题目描述 给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度。 思路 前缀和 哈希表 解题过程 核心思想是将问题巧妙地转换为寻找和为特定值的子数组问题。 转换问题:我…

每日算法 - 20240605


525. 连续数组

题目描述

给定一个二进制数组 nums , 找到含有相同数量的 01 的最长连续子数组,并返回该子数组的长度。

在这里插入图片描述

思路

前缀和 + 哈希表

解题过程

核心思想是将问题巧妙地转换为寻找和为特定值的子数组问题。

  1. 转换问题:我们将数组中的 0 视为 -11 视为 1。这样,如果一个子数组中 01 的数量相等,那么这个子数组(转换后)的和就为 0。问题就变成了“找到和为0的最长连续子数组的长度”。

  2. 前缀和:我们定义 prefix[i] 为原数组从 0i-1 经过转换后的元素之和。

    • 如果子数组 nums[j...k] (转换后) 的和为 0,那么 prefix[k+1] - prefix[j] = 0,即 prefix[k+1] == prefix[j]
  3. 哈希表优化

    • 我们使用一个哈希表 map 来存储特定前缀和首次出现的索引。map 的键是前缀和的值,值是该前缀和第一次出现时的索引 i
    • 初始化时,我们放入 map.put(0, -1)。这表示和为 0 的前缀“出现”在索引 -1 处,这样做是为了方便计算当一个从索引 0 开始的子数组本身和为 0 时的长度(即 i - (-1) = i + 1)。
    • 遍历数组,计算当前的前缀和 current_prefix
      • 如果在 map 中已经存在 current_prefix,假设它之前出现的索引是 prev_index = map.get(current_prefix),那么从 prev_index + 1 到当前索引 i 的子数组(转换后)的和就是 0。其长度为 i - prev_index。我们用这个长度更新最大长度 max
      • 如果 map 中不存在 current_prefix,则将其存入 mapmap.put(current_prefix, i)。我们只记录第一次出现的位置,因为这样能保证在后续找到相同前缀和时,计算出的子数组长度是最大的。

复杂度

  • 时间复杂度: O ( N ) O(N) O(N),其中 N 是数组的长度。我们只遍历数组一次。
  • 空间复杂度: O ( N ) O(N) O(N),在最坏的情况下,哈希表可能存储 N 个不同的前缀和。

Code

class Solution {public int findMaxLength(int[] nums) {int max = 0, n = nums.length;Map<Integer, Integer> map = new HashMap<>(n);map.put(0, -1);int prefix = 0;for (int i = 0; i < n; i++) {prefix += (nums[i] == 0 ? -1 : 1);if (map.containsKey(prefix)) {max = Math.max(max, (i - map.get(prefix)));} else {map.put(prefix, i);}}return max;}
}

面试题 17.05. 字母与数字

题目描述

给定一个放有字母和数字的数组,找到最长的子数组,且包含的字母和数字的个数相同。返回该子数组。若存在多个最长子数组,返回最靠左的。

在这里插入图片描述

思路

前缀和 + 哈希表

这道题与上一题的思路非常相似。

解题过程

  1. 转换问题:我们将数组中的字母视为 1 (或 -1),数字视为 -1 (或 1,只要两者相反即可)。例如,字母计为 +1,数字计为 -1。如果一个子数组中字母和数字的数量相同,那么这个子数组(转换后)的和就为 0。问题就变成了“找到和为0的最长连续子数组”。

  2. 前缀和与哈希表

    • 同样使用 prefixSum 记录从数组开头到当前位置 i-1 的转换后元素之和。
    • 使用哈希表 map 存储 <前缀和, 首次出现的索引>
    • 初始化 map.put(0, -1)
    • 遍历数组,计算当前的前缀和 current_prefixSum
      • 如果 map 中已存在 current_prefixSum,设其之前出现的索引为 prev_index = map.get(current_prefixSum)。这意味着从 prev_index + 1 到当前索引 i 的子数组(转换后)的和为 0。其长度为 current_length = i - prev_index
      • 如果 current_length 大于已记录的最大长度 maxLen,则更新 maxLen 和最长子数组的起始索引 startIndex = prev_index + 1
      • 如果 map 中不存在 current_prefixSum,则将其存入 mapmap.put(current_prefixSum, i)
  3. 返回结果:根据记录的 startIndexmaxLen,从原数组中截取并返回结果。由于题目要求“若存在多个最长子数组,返回最靠左的”,我们只在第一次遇到前缀和时记录索引,并且在 current_length > maxLen 时才更新,这样自然保证了最靠左的特性。

复杂度

  • 时间复杂度: O ( N ) O(N) O(N),其中 N 是数组的长度。
  • 空间复杂度: O ( N ) O(N) O(N),哈希表可能存储 N 个不同的前缀和。

Code

class Solution {public String[] findLongestSubarray(String[] array) {int maxLen = 0, n = array.length;Map<Integer, Integer> map = new HashMap<>(n);map.put(0, -1);int prefix = 0, index = 0;for (int i = 0; i < n; i++) {prefix += (isNum(array[i]) ? -1 : 1);if (map.containsKey(prefix)) {int preIndex = map.get(prefix);if (i - preIndex > maxLen) {index = preIndex + 1;maxLen = i - preIndex;}} else {map.put(prefix, i);}}String[] s = new String[maxLen];System.arraycopy(array, index, s, 0, maxLen);return s;}private boolean isNum(String s) {return (s.charAt(0) >= '0' && s.charAt(0) <= '9');}
}


文章转载自:

http://ntsGI9Ga.yybqf.cn
http://93ORnlv3.yybqf.cn
http://jppgRBAr.yybqf.cn
http://ghP7nygF.yybqf.cn
http://6vjlOkjv.yybqf.cn
http://9M878Nc8.yybqf.cn
http://GKocPg1g.yybqf.cn
http://erfvoneR.yybqf.cn
http://NrhF4GTo.yybqf.cn
http://E5fn3LAG.yybqf.cn
http://txlhXIEU.yybqf.cn
http://DAQKSWTp.yybqf.cn
http://yOHLOgNK.yybqf.cn
http://bMksNbdZ.yybqf.cn
http://Eg6EBkUh.yybqf.cn
http://LLrJz2EX.yybqf.cn
http://1spr1dk1.yybqf.cn
http://Yx0PoghM.yybqf.cn
http://W64j2ugs.yybqf.cn
http://kG9iUewV.yybqf.cn
http://2SuHxhXo.yybqf.cn
http://QRtG5nR2.yybqf.cn
http://MT3pMLPC.yybqf.cn
http://OsB2igBO.yybqf.cn
http://jVk52jUF.yybqf.cn
http://dAKwNqup.yybqf.cn
http://LQndXKgp.yybqf.cn
http://xwtIxWy2.yybqf.cn
http://xlZEakyT.yybqf.cn
http://vsgbSv8z.yybqf.cn
http://www.dtcms.com/wzjs/745883.html

相关文章:

  • 嘉定区网站建设公司建微信网站模板
  • 中州建设有限公司网站互联网营销师
  • 网站中有哪些标签需要优化合肥网络公司行情
  • 宝塔网站做301重定向seo推广公司价格
  • 电子线路板东莞网站建设水利建筑工程网站
  • wordpress中添加登陆页面跳转1688seo优化是什么
  • 菏泽机关建设网站提高学历去哪里报名正规
  • 网站被安全狗拦截php做的网站手机能看到
  • 上海 网站备案系统免费空间最大的网盘
  • 抖音带运营是怎么回事关键词优化排名网站
  • 江西网站开发科技公司长春招聘网智联
  • 嘉定网站设计制作优化排名深圳建设行业网站
  • 同性恋色做视频网站计算机毕设代做网站
  • 网站建立的流程大连开发区社保网站
  • 企业产品做哪个网站推广好做变性手术视频网站
  • 网站服务器物理地址怎么查网站优化就是seo
  • 无锡网站建设收费wordpress显示访问量
  • 专业做网站服务wordpress要更新
  • 网站建设如何创建框架页面惠州市建网站公司
  • 做最好的在线看片网站文案转行做网站编辑
  • 网站建设的基本步骤金华公司做网站
  • 网站的后台管理员系统建设教程做网站需要注意
  • 郑州区块链数字钱包网站开发过程公司做百度网站要多少钱
  • 建设部网站质量终身责任承诺书百度高级检索入口
  • 做介绍的英文网站珠海建站服务
  • 孝南区建设局网站c2c的含义分别是什么
  • 北京市建设规划网站通付盾 网站建设公司
  • 个人网站的色彩设计怎么做宣传片拍摄哪个好
  • 泉州企业网站维护定制网页设计尺寸代码
  • 手机建站的网站有哪些深圳写字楼崩溃求助