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

设计制作网站制作国外做连接器平台网站

设计制作网站制作,国外做连接器平台网站,赚钱做任务的网站有哪些,电子商务网站推广的方法有哪些目录 滑动窗口 长度最小的子数组 无重复字符的最长子串 最大连续1的个数 III 将 x 减到 0 的最小操作数 水果成篮 找到字符串中所有字母异位词 串联所有单词的子串 最小覆盖子串 滑动窗口 长度最小的子数组 209. 长度最小的子数组 - 力扣(LeetCode&#x…

目录

 滑动窗口

长度最小的子数组

无重复字符的最长子串

最大连续1的个数 III

将 x 减到 0 的最小操作数

水果成篮

找到字符串中所有字母异位词

串联所有单词的子串

最小覆盖子串


 滑动窗口

长度最小的子数组

209. 长度最小的子数组 - 力扣(LeetCode)

解题思路

利用单调性,使用“同向双指针”(滑动窗口)来优化暴力解法(O(n))

class Solution {public int minSubArrayLen(int target, int[] nums) {int sum = 0, len = Integer.MAX_VALUE;for (int left = 0, right = 0; right < nums.length; right++) {sum += nums[right];// 进窗口while (sum >= target) {// 判断len = Math.min(len, right - left + 1);// 更新长度sum -= nums[left++];// 出窗口}}return len == Integer.MAX_VALUE ? 0 : len;}
}
无重复字符的最长子串

3. 无重复字符的最长子串 - 力扣(LeetCode)

解题思路:

解法一:暴力枚举+哈希表(判断字符是否重复出现)O(n^{2})

解法二:利用规律,使用“滑动窗口”来解决问题

  1. left=0,right=0(充当窗口的左右端点)
  2. 进窗口(让字符进入哈希表)
  3. 判断(窗口内出现重复字符)
  4. 出窗口(从哈希表删除该字符)
  5. 更新结果
class Solution {public int lengthOfLongestSubstring(String ss) {char[] s = ss.toCharArray();// 将字符串转化为字符数组int[] hash = new int[128];// 用数组模拟哈希表int left = 0, right = 0, n = ss.length();int ret = 0;while (right < n) {hash[s[right]]++;// 进入窗口while (hash[s[right]] > 1) {// 判断hash[s[left++]]--;// 出窗口}ret = Math.max(ret, right - left + 1);// 更新结果right++;// 让下一个字符进入窗口}return ret;}
}
最大连续1的个数 III

1004. 最大连续1的个数 III - 力扣(LeetCode)

解法:可以转化为找出最长的子数组,0的个数不超过k个

解法一:暴力枚举+zero计数器

解法二:滑动窗口

  1. left=0,right=0
  2. 进窗口(如果是1,无视;如果是0,计数器+1)
  3. 判断(zero>k)
  4. 更新结果
class Solution {public int longestOnes(int[] nums, int k) {int n = nums.length, ret = 0;for (int left = 0, right = 0, zero = 0; right < n; right++) {// 进窗口if (nums[right] == 0)zero++;// 判断while (zero > k) {// 出窗口if (nums[left++] == 0)zero--;}ret = Math.max(ret, right - left + 1);}return ret;}
}
将 x 减到 0 的最小操作数

1658. 将 x 减到 0 的最小操作数 - 力扣(LeetCode)

解法:正难则反

转化:找出最长的子数组的长度,所有元素的和正好等于sum-x

class Solution {public int minOperations(int[] nums, int x) {int n = nums.length, sum = 0, ret = -1;for (int y : nums)sum += y;// 数组总和int target = sum - x;if (target < 0)return -1;sum = 0;for (int left = 0, right = 0; right < n; right++) {sum += nums[right];// 进窗口while (sum > target)sum -= nums[left++];// 出窗口if (sum == target)ret = Math.max(ret, right - left + 1);}if (ret == -1)return -1;elsereturn n - ret;}
}
水果成篮

904. 水果成篮 - 力扣(LeetCode)

转化:找出一个最长的子数组的长度,子数组中不超过两种类型的水果(两“种”数)

解法一:暴力枚举+哈希表

解法二:滑动窗口

  1. left=0,right=0;
  2. 进窗口 hash[ fruit [ right ] ]
  3. 判断 hash.length>2
  4. 出窗口 hash[ fruit [ left ] ]
  5. 更新结果
class Solution {public int totalFruit(int[] f) {int n = f.length;int[] hash = new int[n + 1];// 统计窗口水果的种类int ret = 0;for (int left = 0, right = 0, kinds = 0; right < n; right++) {int in = f[right];if (hash[in] == 0)kinds++;// 维护水果种类hash[in]++;// 进窗口while (kinds > 2) {// 判断int out = f[left];hash[out]--;// 出窗口if (hash[out] == 0)kinds--;left++;}// 更新结果ret = Math.max(ret, right - left + 1);}return ret;}
}
找到字符串中所有字母异位词

438. 找到字符串中所有字母异位词 - 力扣(LeetCode)

解法:滑动窗口+哈希表(用于统计)

用数组模拟哈希表hash1是目标字符串,hash2用于遍历待查找字符串

  1. left=0,right=0
  2. 进窗口->hash2[in]++
  3. 判断->right-left+1>m
    1. 出窗口->hash[out]--
    2. 更新结果->check(hash2,hash1)

优化:更新结果的判断条件

利用变量count来统计窗口中“有效字符”的个数

进窗口:进入后->hash2[in]<=hash1[in]->count++

出窗口:出去前->hash2[out]<=hash1[out]->count--

更新结果:count==m

class Solution {public List<Integer> findAnagrams(String s, String p) {List<Integer> ret = new ArrayList<Integer>();int[] hash1 = new int[26];// 统计字符串p中每一个字符串出现的个数int[] hash2 = new int[26];// 统计窗口中每一个字符串出现的个数for (char ch : p.toCharArray())hash1[ch - 'a']++;for (int left = 0, right = 0, count = 0; right < s.length(); right++) {char[] ss = s.toCharArray();char in = ss[right];if (++hash2[in - 'a'] <= hash1[in - 'a'])count++;// 进窗口+维护countif (right - left + 1 > p.length()) {// 判断char out = ss[left++];if (hash2[out - 'a']-- <= hash1[out - 'a'])count--;// 出窗口+维护count}if (count == p.length())ret.add(left);// 更新结果}return ret;}
}
串联所有单词的子串(困难)

30. 串联所有单词的子串 - 力扣(LeetCode)

解法:滑动窗口+哈希表

1. 哈希表 hash<string, int>

2. left与right指针的移动  ->  移动的步长是单词的长度  ->  len

3. 滑动窗口执行的次数  ->  len

最小覆盖子串(困难)

76. 最小覆盖子串 - 力扣(LeetCode)

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

相关文章:

  • 维护网站多少钱简述jsp网站架构
  • 当前业界主流的网站建设毕设做网站心得体验
  • 怎么制作网站商城自己做短视频网站
  • 网站如何做原创文章多语言网站模板
  • 莱州网站建设服务wordpress小工具点
  • 南阳教育论坛网站建设小型企业网站排名前十
  • 监控网站模版做网站有什么好处
  • 山东省建设厅教育网站男人和女人做污的视频网站
  • 网站建设黄页线上推广平台报价
  • 手机网站封装用户体验火狐 开发者 网站
  • 如何处理并发量大的购物网站做标签网站邀请码
  • 中国建设工程网站公司做网站app入什么科目
  • 门户网站编辑流程网站字体字号
  • 360 网站备案东莞常平美食
  • 湖州长兴做网站怎么把文件放到网站的根目录
  • 泗洪网站建设公司wordpress怎么获取在线ip
  • 嘉兴中元建设网站天眼查 企业查询官网
  • 汕头如何建设网站设计壁纸公司网站源码
  • 怎样防止别人利用自己的电脑做网站服务器网站的美观性
  • 镇江网站建设制作企业wordpress插件dx seo下载
  • 工作室网站开发国家级示范校建设专题网站
  • 建设银行网站机构特点业务发展wordpress 文章目录插件免费版
  • 手机网站建立教程搜索引擎优化seo课程总结
  • 怎样注册网站帐号申请沈阳市网站建设
  • 桐乡 网站建设上海建筑公司
  • 企业网站方案设计许昌小学网站建设
  • 一般网站尺寸偷wordpress模板
  • 南阳旅游网 网站设计网站设计做啥好
  • 微信网站是多少钱如何申请个人网站域名
  • 驻马店网站建设费用为什么wordpress在ie打开很慢