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

移动云服务器租用爱采购seo

移动云服务器租用,爱采购seo,wordpress文章模型插件,郑州房产网新房&#x1f4a3; 拆炸弹&#xff1a;滑动窗口的巧妙应用 拆炸弹 题目描述&#xff1a; 给定一个循环数组 code 和一个整数 k&#xff0c;你需要根据 k 的值来修改 code 数组&#xff1a; 如果 k > 0&#xff0c;将 code[i] 替换为 后 k 个数 的和。如果 k < 0&#xff0c…

💣 拆炸弹:滑动窗口的巧妙应用

拆炸弹

题目描述:

给定一个循环数组 code 和一个整数 k,你需要根据 k 的值来修改 code 数组:

  • 如果 k > 0,将 code[i] 替换为 k 个数 的和。
  • 如果 k < 0,将 code[i] 替换为 k 个数 的和。
  • 如果 k = 0,将 code[i] 替换为 0。

题目图片:

拆炸弹题目

思路分析:

这道题的核心在于如何高效地计算 code[i] 对应的替换值。直接暴力求解会导致大量重复计算。观察到,我们可以利用 滑动窗口 的思想,维护一个大小为 k 的窗口,计算窗口内元素的和,从而避免重复计算。

解题过程:

  1. 特殊情况处理:k = 0 时,直接返回一个全为 0 的新数组。

  2. 处理负数 k 为了统一处理逻辑,当 k 为负数时,我们将 code 数组 倒置,并将 k 取绝对值。这样,负数 k 的问题就转化为了正数 k 的问题。

  3. 初始化滑动窗口: 计算初始窗口的和 sum,即 code 数组前 a 个元素的和(ak 的绝对值)。

  4. 滑动窗口:

    • 维护一个左边界 left 和右边界 right,初始时 left = 1right = a + 1
    • 每次迭代,将窗口向右移动一位:
      • 由于 code 是循环数组,当 right 超出数组范围时,将其置为 0。
      • 更新窗口的和 sumsum = sum - code[left] + code[right]
      • 更新 ret[left] 的值为 sum
      • leftright 分别加 1。
  5. 处理负数 k 的结果: 如果 k 为负数,在返回结果前,需要将 ret 数组 倒置

复杂度分析:

  • 时间复杂度:O(n),其中 ncode 数组的长度。
  • 空间复杂度:O(n),用于存储结果数组 ret

代码实现(Java):

class Solution {public int[] decrypt(int[] code, int k) {int n = code.length;int[] ret = new int[n];if (k == 0) {return ret;}int a = k;if (a < 0) {a = -a;reverse(code);}for (int i = 1; i <= a; i++) {ret[0] += code[i];}int sum = ret[0];for (int left = 1, right = a + 1; left < n; right++) {if (right > n - 1) {right = 0;}sum = sum - code[left] + code[right];ret[left] = sum;left++;}if (k < 0) {reverse(ret);}return ret;}private void reverse(int[] code) {int l = 0, r = code.length - 1;while (l < r) {int tmp = code[l];code[l] = code[r];code[r] = tmp;l++;r--;}}
}

🔤 无重复字符的最长子串:滑动窗口的经典应用

3. 无重复字符的最长子串

题目描述:

给定一个字符串 s,请你找出其中不含有重复字符的 最长子串 的长度。

题目图片:

无重复字符的最长子串题目

思路分析:

这道题同样可以使用 滑动窗口 来解决。我们维护一个窗口,窗口内的字符都是不重复的。当遇到重复字符时,我们需要移动窗口的左边界,直到窗口内没有重复字符为止。

解题过程:

  1. 使用哈希表记录字符出现次数: 由于字符串 s 由英文字母、数字、符号和空格组成,我们可以使用一个长度为 128 的数组 map 来记录每个字符出现的次数。

  2. 滑动窗口:

    • 维护一个左边界 left 和右边界 right,初始时都为 0。
    • 每次迭代,将右边界 right 向右移动一位:
      • s[right] 对应的字符在 map 中的值加 1。
      • 如果 map[s[right]] > 1,说明出现了重复字符,需要移动左边界:
        • 不断将 s[left] 对应的字符在 map 中的值减 1,并将 left 加 1,直到 map[s[right]] <= 1 为止。
      • 更新最长无重复子串的长度 retret = Math.max(ret, right - left + 1)

复杂度分析:

  • 时间复杂度:O(n),其中 n 是字符串 s 的长度。
  • 空间复杂度:O(1),map 数组的长度是固定的。

代码实现(Java):

class Solution {public int lengthOfLongestSubstring(String ss) {char[] s = ss.toCharArray();int ret = 0, n = s.length;int[] map = new int[128];for (int left = 0, right = 0; right < n; right++) {char in = s[right];map[in]++;while (map[in] > 1) {map[s[left]]--;left++;}// 窗口合法,更新结果ret = Math.max(ret, right - left + 1);}return ret;}
}

➕ 最大子数组和:Kadane 算法的魅力

53. 最大子数组和

题目描述:

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

题目图片:

最大子数组和题目

思路分析:

这道题可以使用 Kadane 算法 来解决。Kadane 算法是一种动态规划算法,它的核心思想是:

  • 维护两个变量:curMax(当前结束位置的最大子数组和)和 globalMax(全局最大子数组和)。
  • 对于每个元素,我们有两种选择:
    1. 以当前元素作为新子数组的起点: 如果 nums[i]curMax + nums[i] 大,说明从当前元素开始新的子数组会得到更大的和。
    2. 将当前元素加入之前的子数组: 否则,将当前元素加入之前的子数组。

复杂度分析:

  • 时间复杂度:O(n),其中 n 是数组 nums 的长度。
  • 空间复杂度:O(1)。

代码实现(Java):

class Solution {public int maxSubArray(int[] nums) {int curMax = nums[0]; // 当前最大值int globalMax = nums[0]; // 全局最大值for (int i = 1; i < nums.length; i++) {// 对于每一个元素,要么新开一个子区间,要么加入已有的子区间curMax = Math.max(nums[i], curMax + nums[i]);// 更新全局最大值globalMax = Math.max(globalMax, curMax);}return globalMax;}
}

总结

今天的算法练习就到这里了。我们学习了如何使用 滑动窗口 解决 “拆炸弹” 和 “无重复字符的最长子串” 问题,以及如何使用 Kadane 算法 解决 “最大子数组和” 问题。希望大家有所收获!💪

http://www.dtcms.com/wzjs/448628.html

相关文章:

  • 怎样做免费网站卖东西关键词com
  • 一个空间可以做两个网站吗百度指数怎么看
  • 旅游兼职网站建设google浏览器官网下载
  • 多多搜索推广seo观察网
  • 上海网站改版方案网络营销模式下品牌推广途径
  • 青岛网站建设推广服务长春网站建设公司
  • 北京市委网站百度下载免费安装到桌面
  • wordpress制作页面模板兰州网络seo公司
  • 怎么用ftpxp做网站昆明seocn整站优化
  • 12306网站建设费用网络推广文案
  • 指定网站怎么设置路由器只访问新产品推广方案范文
  • 合适的网站制作需要多少钱网站域名查询
  • 网站建设公司织梦模板下载榜单优化
  • wordpress 3.8 下载关键词排名优化软件价格
  • 用织梦搭建网站seo软件工具箱
  • 江苏省建设培训网站裤子seo关键词
  • 网站cms系统 开源框架hyein seo
  • 做淘宝主要看哪些网站全网搜索软件下载
  • 网站设计应该遵循的原则西安百度推广网站建设
  • 自己做网站 服务器chinaz站长素材
  • 做网批那个网站好seo外链怎么发
  • 合肥网站建设合肥站长统计app进入网址新版小猪
  • 莲都区建设分局网站seo技术培训唐山
  • 响应式网站建设对企业营销什么网站百度收录快
  • 营销型网站推广营销平台
  • WordPress 评论列表折叠关键词优化怎么弄
  • 门户网站和网站的区别微营销推广软件
  • 网站网页的区别与联系今天上海最新新闻事件
  • 萝岗网站建设制作微营销是什么
  • 常德建设网站制作搜狗seo优化