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

网站推广策略包括哪些内容个人网站名称举例

网站推广策略包括哪些内容,个人网站名称举例,泰安网站建设费用,青海省住房城乡建设厅网站记录今天学习的三道算法题:两道滑动窗口和一道栈的应用。 2904. 最短且字典序最小的美丽子字符串 题目描述 思路 滑动窗口 解题过程 题目要求找到包含 k 个 ‘1’ 的子字符串,并且需要满足两个条件: 最短长度:在所有包含 k 个 …

记录今天学习的三道算法题:两道滑动窗口和一道栈的应用。


2904. 最短且字典序最小的美丽子字符串

题目描述
Problem 2904 Description

思路

滑动窗口

解题过程

题目要求找到包含 k 个 ‘1’ 的子字符串,并且需要满足两个条件:

  1. 最短长度:在所有包含 k 个 ‘1’ 的子字符串中,长度最小。
  2. 字典序最小:如果存在多个长度最短的子字符串,选择字典序最小的那个。

我们可以使用滑动窗口来解决这个问题。维护一个窗口 [left, right],以及窗口内 ‘1’ 的计数 count

  1. 扩展窗口:移动 right 指针向右扩展窗口。如果 s[right] 是 ‘1’,则 count 增加。
  2. 检查与收缩窗口:当 count 达到 k 时,当前窗口 [left, right] 就包含恰好 k 个 ‘1’ 了吗?不一定,可能 count > k。 我们需要一个 while 循环,count >= k
    • 找到有效子串:如果 count == k,此时窗口 [left, right] 是一个包含 k 个 ‘1’ 的有效子字符串。我们计算其长度 len = right - left + 1
    • 更新结果
      • 如果 len 小于当前记录的最短长度 retLen,则更新 retLen = len,并将当前子字符串 s.substring(left, right + 1) 存为 retString
      • 如果 len 等于 retLen,则比较当前子字符串 s.substring(left, right + 1)retString 的字典序,如果当前子字符串字典序更小,则更新 retString
    • 收缩窗口:为了寻找可能更短的或者字典序更小的有效子串(或者单纯为了让窗口继续滑动),我们需要移动 left 指针向右收缩窗口。如果滑出窗口的字符 s[left] 是 ‘1’,则 count 减少。然后 left++
  3. 循环与结束right 指针遍历完整个字符串后结束。
  4. 返回结果:如果 retLen 仍然是初始值 n + 1,说明没有找到包含 k 个 ‘1’ 的子字符串,返回空字符串 "";否则返回 retString

复杂度

  • 时间复杂度: O ( n ) O(n) O(n) - 每个字符最多进出窗口一次。字符串比较在最坏情况下可能达到 O ( n ) O(n) O(n),但均摊下来,总复杂度仍接近 O ( n ) O(n) O(n)
  • 空间复杂度: O ( 1 ) O(1) O(1) - 只使用了常数级别的额外空间(不算存储结果字符串的空间)。

Code

class Solution {public String shortestBeautifulSubstring(String s, int k) {String retString = "";int n = s.length();int retLen = n + 1;int count = 0;for (int left = 0, right = 0; right < n; right++) {char in = s.charAt(right);// 进窗口if (in == '1') {count++;}// 判断与收缩while (count >= k) {if (count == k) {int len = right - left + 1;// 更新结果String currentSub = s.substring(left, right + 1);if (len < retLen) {retLen = len;retString = currentSub;} else if (len == retLen) {if (retString.isEmpty() || currentSub.compareTo(retString) < 0) {retString = currentSub;}}}// 出窗口if (s.charAt(left) == '1') {count--;}left++;}}return (retLen == n + 1) ? "" : retString;}
}

209. 长度最小的子数组

题目描述
Problem 209 Description

思路

滑动窗口

解题过程

维护一个滑动窗口 [left, right] 和窗口内元素的和 sum

  1. 扩展窗口right 指针向右移动,将 nums[right] 加入 sum
  2. 检查与收缩窗口:使用 while 循环检查 sum 是否大于等于 target
    • 如果 sum >= target,说明当前窗口 [left, right] 是一个满足条件的子数组。记录其长度 right - left + 1,并更新全局最小长度 ret
    • 收缩窗口:因为题目要求最小长度,并且数组元素都是正数,所以当前窗口已经满足条件后,可以尝试缩短它。将 nums[left]sum 中减去,并将 left 指针右移 (left++)。继续在 while 循环内检查 sum 是否仍然满足 >= target
  3. 循环与结束right 指针遍历完整个数组后结束。
  4. 返回结果:如果 ret 仍然是初始的最大值 Integer.MAX_VALUE,说明没有找到满足条件的子数组,返回 0;否则返回 ret

复杂度

  • 时间复杂度: O ( n ) O(n) O(n) - 每个元素最多进出窗口一次。
  • 空间复杂度: O ( 1 ) O(1) O(1) - 只使用了常数级别的额外空间。

Code

class Solution { public int minSubArrayLen(int target, int[] nums) {int ret = Integer.MAX_VALUE;int sum = 0;int n = nums.length;for (int left = 0, right = 0; right < n; right++) {// 进窗口sum += nums[right];// 判断与收缩while (sum >= target) {// 更新结果ret = Math.min(ret, right - left + 1);// 出窗口sum -= nums[left];left++;}}// 返回结果return ret == Integer.MAX_VALUE ? 0 : ret;}
}

20. 有效的括号

题目描述
Problem 20 Description

思路

栈 (Stack)

解题过程

利用栈的“后进先出”特性来匹配括号。

  1. 遍历字符串:逐个检查字符串中的字符。
  2. 左括号:如果遇到左括号(([{),将其压入栈中。
  3. 右括号:如果遇到右括号()]}):
    • 检查栈是否为空:如果此时栈为空,说明没有对应的左括号与之匹配,字符串无效,返回 false
    • 检查栈顶元素:查看(不弹出)栈顶的左括号 look = stack.peek()
    • 匹配判断:判断当前右括号 in 是否与栈顶左括号 look 匹配。
      • 如果匹配(例如 look == '('in == ')'),则弹出栈顶元素 stack.pop()
      • 如果不匹配,说明括号类型不对应,字符串无效,返回 false
  4. 遍历结束:遍历完整个字符串后:
    • 检查栈是否为空:如果栈为空,说明所有括号都成功匹配,字符串有效,返回 true
    • 如果栈不为空,说明有多余的左括号没有被匹配,字符串无效,返回 false

优化: 可以在开始时检查字符串长度是否为奇数,如果是奇数,则肯定无效,可以直接返回 false

复杂度

  • 时间复杂度: O ( n ) O(n) O(n) - 只需遍历一次字符串。
  • 空间复杂度: O ( n ) O(n) O(n) - 最坏情况下,如果字符串全是左括号,栈的大小会等于字符串长度。

Code

class Solution {public boolean isValid(String ss) {if (ss == null || ss.length() % 2 != 0) {return false;}Stack<Character> stack = new Stack<>();char[] s = ss.toCharArray();for (int i = 0; i < s.length; i++) {char in = s[i];// 左括号入栈 if (in == '(' || in == '[' || in == '{') {stack.push(in);} else {// 右括号处理 // 栈为空,但遇到右括号 if (stack.isEmpty()) {return false;}char look = stack.peek();// 检查是否匹配if ((look == '(' && in == ')') ||(look == '[' && in == ']') ||(look == '{' && in == '}')) {stack.pop();} else {// 没匹配上return false;}}}// 遍历结束后,栈应该是空的return stack.isEmpty();}
}
http://www.dtcms.com/wzjs/567009.html

相关文章:

  • 评估企业网站建设wordpress如何更改页面链接
  • 建设部法律法规网站最新新闻热点事件今天
  • 备案时如何关闭网站湛江在线网
  • 网站制作及实现新网站没有死链接怎么做
  • 深圳网站建设创造者计算机应用技术(网站开发)
  • 网站备案幕布照片怎么算合格fomo3d 网站怎么做
  • 做预售的网站只会html wordpress
  • 广州金融网站建设网站所在服务器
  • 如何建立一个永久网站哪个网站可以搭建网页
  • 深圳网站定制多少钱商务网站建设与维护 试题
  • 建设一个企业网站一般多少钱网络工程可以从事什么工作
  • 企业网站报备熊掌号如何做网站
  • seo论坛的网址seo网站优化技术
  • 网站设计的需求电子商城app
  • 营销网站的主题 定位 修改建议汕头潮南今天新闻
  • 网站注册搜索引擎的目的餐饮网站开发背景
  • 井陉县城乡建设局网站人力资源公司名称大全简单大气
  • 做网站的公司都有哪些岗位企业logo设计合同
  • 信息门户网站建设合同wordpress引用图片样式
  • 淮安网站建设公司电话跨境电商是怎么赚钱的
  • 阿里云网站建设部署与发布要做好网络营销首先要
  • 昌邑建设网站关于网站开发的引言
  • 网站类网站开发教程网络管理中心
  • 大型公司办公室设计怎么优化一个网站关键词
  • 网络用户提要求找人帮忙做的网站平台推广方案
  • 堵博网站建设青岛网站建设方案优化
  • 石家庄建设银行河北分行招聘网站校园大型活动策划方案
  • 怎么销售网站建设怎么在百度上做网站
  • 连云港网站建设报价wordpress入口
  • 最强的手机网站建设网站备案号几位数字 沪