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

我要成为算法高手-滑动窗口篇

目录

  • 滑动窗口算法
  • 题目1:长度最小的子数组
  • 题目2:无重复字符的最长子串
  • 题目3:最大连续1的个数
  • 题目4:将x减到0的最小操作数
  • 题目5:水果成篮
  • 题目6:找到字符串中所有的字母异位词
  • 题目7:串联所有单词的子串
  • 题目8:最小覆盖子串

滑动窗口算法

滑动窗口的本质还是双指针,只不过滑动窗口的双指针,是同向双指针,两个指针并不回退,都是向同一个方向移动,如果发现两个指针都可以做到不回退,此时可以使用滑动窗口解决问题。

滑动窗口一般的套路就是:进窗口,判断,根据判断结果来决定是否出窗口,另外是更新结果,更新结果的时机不是固定的,要因题而论。

题目1:长度最小的子数组

题目链接:209. 长度最小的子数组 - 力扣(LeetCode)
在这里插入图片描述

思路1:暴力解法,枚举出所有的子数组,找出一下长度最小且满足条件的数组

思路1的实现:定义left、right,两层for循环,定义变量sum统计子数组的和,下面是伪代码

int len = Integer.MAX_VALUE;
for(int left =0;left<nums.length;left++){for(int right =left;right<nums.length;right++){sum+=nms[right];if(sum>=target){check(len,right-left+1);//如果len<right-left+1,更新len的值}}
}
return len;

分析暴力解法,可以发现两个问题:当sum满足target要求时,right可以停止往后枚举了,因为right就算往后枚举,sum的要求仍然满足,并且子数组的长度是增加的,并不符合长度最小这个要求;另一个问题是,当枚举完一个符合要求的子数组后,left是往后移动一位,但是,right是否有必要再回到left这个位置?如果right回退,我们又要重新计算sum,但是在枚举上一种情况时,我们已经计算过和了,并不需要重新再计算一次,只需要把left位置的值减去即可。所以我们得出结论,left和right两个“指针”都只需要往同一个方向移动即可,这也就引出今天的主角:滑动窗口

思路2:滑动窗口,定义两个指针left、right,维护窗口边界。进窗口操作:sum+=num[right],进窗口之后,判断sum的值是否满足条件,如果满足,此时需要更新len的结果,更新之后出窗口。注意:判断操作是循环的,因为出窗口之后,sum可能还是>=target,需要继续出窗口。

代码实现:

class Solution {public int minSubArrayLen(int target, int[] nums) {int left = 0,right=0;int sum = 0;int len = Integer.MAX_VALUE;while(right<nums.length){//进窗口:sum+=nums[right];//判断,需要循环判断,因为left向后移动之后,sum也有可能还>=targetwhile(sum>=target){//满足条件,更新结果len = Math.min(len,right-left+1);//出窗口            sum-=nums[left];left++;}right++;}if(len==Integer.MAX_VALUE){return 0;}return len;}
}

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

题目链接:3. 无重复字符的最长子串 - 力扣(LeetCode)

在这里插入图片描述

思路1:暴力枚举+哈希表:暴力枚举所有的子串,利用哈希表判断子串中是否有重复字符。

思路1的实现:定义left、right,两层for循环枚举出全部的子串,分别判断每个子串是否满足条件,下面是伪代码

for(int left=0;left<nums.length();left++){for(int right=left;left<nums.length();right++){char ch = s.charAt(right);if(!hash.contains(ch)){hash.put(ch);} else{//统计.....结果break;}}
}

分析暴力解法,right位置出现重复字符时,left+1,right继续回退到left位置,但其实right并不需要回退,同样的,两个指针都是同一个方向移动,我们可以使用滑动窗口

思路2:滑动窗口,进窗口的操作是:把字符扔进哈希表,判断字符是否在哈希表中已经存在过,如果已经存在,需要出窗口,出窗口之后更新结果

代码实现:

class Solution {public int lengthOfLongestSubstring(String s) {char[] chars = s.toCharArray();int[] hash = new int[128];int left = 0;int right = 0;int len = 0;while(right<s.length()){//进窗口hash[chars[right]]++;while(hash[chars[right]]>1) {//说明出现重复字符了,出窗口hash[chars[left]]--;left++;}//更新结果len = Math.max(len,right-left+1);right++;}return len;}
}

题目3:最大连续1的个数

题目链接:1004. 最大连续1的个数 III - 力扣(LeetCode)

在这里插入图片描述

问题转换:找出最长的子数组,0的个数不超过k个

思路1:暴力解法+计数器,枚举出所有的子数组,计数器的作用是统计0的个数,

思路1的实现:伪代码如下

int len = 0;
for(int left=0;left<nums.length;left++){int count = 0;for(int right=left;left<nums.length){if(nums[right]==0){count++;}if(count>k){//更新lenbreak;}}
}

分析暴力解法:枚举过程中,right其实没有必要回退到left位置,因为在上一趟遍历中我们已经统计过个数,在下一趟遍历的时候我们只需要根据left的位置是否为0来修改count的值,因此,两个指针都不用回退,可以使用滑动窗口的思想

思路2:滑动窗口,进窗口操作就是统计0的个数,接着判断个数是否大于k,如果大于k需要出窗口,出完窗口之后,才更新结果,因为出窗口后,k的个数才满足要求。

代码实现:

class Solution {public int longestOnes(int[] nums, int k) {int count = 0;int left = 0, right = 0;int len = 0;while (right < nums.length) {// 进窗口if (nums[right] == 0) {count++;}// 判断while (count > k) {// 需要出窗口if (nums[left] == 0) {count--;}left++;}// 更新结果len = Math.max(len, right - left + 1);right++;}return len;}
}

题目4:将x减到0的最小操作数

题目链接:1658. 将 x 减到 0 的最小操作数 - 力扣(LeetCode)

在这里插入图片描述

分析题目要求:

在这里插入图片描述

如图:题目要我们返回的值是a+b,长度为a的子数组与长度为b的子数组元素之和恰好为x,并且a+b的值是最小的,正难则反,我们可以先求出n-(a+b)。

问题转换:求出最长的子数组的长度len,子数组满足:元素之和恰好为sum-x(sum为原数组nums的元素之和),求出这个长度值之后,直接返回n-len即可

思路1:暴力解法,枚举出所有的子数组,求出满足条件的长度最长的子数组即可

思路1的实现:伪代码如下:

int len = 0;
int curSum = 0;
for(int left =0;left<nums.length;left++){for(int right=left;right<nums.length;right++){if(curSum==sum-x){//更新lenbreak;}}
}
return n-len;

思路2:滑动窗口

class Solution {public int minOperations(int[] nums, int x) {int sum = 0;for (int i : nums) {sum += i;}int len = -1;int n = nums.length;int target = sum - x;int left = 0, right = 0;int curSum = 0;while (right < n) {// 进窗口curSum += nums[right];while (curSum > target && left < n) {//left可能越界                // 如果curSum>target,需要出窗口curSum -= nums[left];left++;}// 出完窗口之后,此时的结果才可能是正确的,// 更新结果if (curSum == target) {len = Math.max(len, right - left + 1);}right++;}if (len == -1) {return -1;}return n - len;}
}

题目5:水果成篮

题目链接:904. 水果成篮 - 力扣(LeetCode)
在这里插入图片描述
在这里插入图片描述

问题转换:求最长的子数组的长度,子数组满足:水果的种类<=2

思路1:暴力解法+哈希表,暴力枚举出所有的子数组,借助哈希表、计数器来判断水果种类是否超过2

思路2:滑动窗口+哈希表
代码实现:

class Solution {public int totalFruit(int[] fruits) {int n = fruits.length;int[] hash = new int[n + 1];// 构建哈希表int left = 0, right = 0;int count = 0;int len = 0;while (right < n) {// 进窗口if (hash[fruits[right]] == 0) {count++;}hash[fruits[right]]++;while (count > 2) {// 出窗口hash[fruits[left]]--;if (hash[fruits[left]] == 0) {count--;//移出哈希表}left++;}// 更新结果len = Math.max(len, right - left + 1);right++;}return len;}
}

题目6:找到字符串中所有的字母异位词

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

在这里插入图片描述

思路1:暴力解法,先把p字符串的词频(字符出现的个数)丢进哈希表中,接着枚举字符串s,枚举出所有长度为len(字符串p的长度)的子串,每枚举一个子串就把该子串丢进一个哈希表中,比较两个哈希表对应字符的频次

思路2:滑动窗口+哈希表,进窗口的操作:把字符扔进哈希表中,何时出窗口?当right位置和left位置长度大于p字符串的长度,此时要出窗口,因为这道题的窗口大小是固定的,窗口大小就是p字符串的长度,出完窗口后,比较两个哈希表的内容,如果内容相同,就把结果扔进集合中
代码实现:

class Solution {public List<Integer> findAnagrams(String s, String p) {List<Integer> ret = new ArrayList<>();int[] hash1 = new int[26];int[] hash2 = new int[26];//把p的字符频次扔进哈希表hash2中for (int i = 0; i < p.length(); i++) {char ch = p.charAt(i);hash2[ch - 'a']++;}//滑动窗口int left = 0, right = 0;while (right < s.length()) {//进窗口char in = s.charAt(right);hash1[in-'a']++;//判断if (right - left + 1 > p.length()) {//出窗口char out = s.charAt(left);hash1[out-'a']--;left++;}//更新结果//比较两个哈希表boolean flg = true;for (int i = 0; i < 26; i++) {if (hash1[i] != hash2[i]) {//两个哈希表内容不同,不是想要的结果flg = false;}}if (flg) {ret.add(left);}right++;}return ret;        }
}

优化:更新结果这里,比较两个哈希表需要遍历一遍哈希表,通过一个变量count,可以优化这个操作,count表示的是有效字符的个数,什么是有效字符?也就是p字符串出现过的字符

核心逻辑:

//进窗口操作
//.....//进窗口后
if(hash1[in]<=hash2[in]){count++;
}//.....//出窗口前
if(hash1[in]<=hash2[in]){count--;
}//出窗口

in和out表示要进窗口、出窗口的字符
在这里插入图片描述

代码实现:

class Solution {public List<Integer> findAnagrams(String s, String p) {List<Integer> ret = new ArrayList<>();//哈希表长度26->题目说明了只有小写字母int[] hash1 = new int[26];int[] hash2 = new int[26];//p的哈希表for (int i = 0; i < p.length(); i++) {char ch = p.charAt(i);hash2[ch - 'a']++;//a->0,b->1,c->2.........}//双指针int left = 0, right = 0;int count = 0;//统计窗口中有效字符的个数while (right < s.length()) {//进窗口char in = s.charAt(right);hash1[in - 'a']++;if (hash1[in - 'a'] <= hash2[in - 'a']) {count++;}//判断if (right - left + 1 > p.length()) {//需要出窗口char out = s.charAt(left);if (hash1[out - 'a'] <= hash2[out - 'a']) {count--;}hash1[out - 'a']--;left++;}if (count == p.length()) {ret.add(left);}right++;}return ret;}
}

题目7:串联所有单词的子串

题目链接:30. 串联所有单词的子串 - 力扣(LeetCode)
在这里插入图片描述

思路:滑动窗口+哈希表

这道题的思路和上一道题"找到字符串中所有的字母异位词"其实是一样的,为什么?

如果把字符串看成一个字母,如图,是不是就变成了找到字符串中所有的字母异位词这个问题?
在这里插入图片描述

不同点:

1、哈希表:创建的哈希表是<String,Integer>类型的

2、left和right指针的移动:每次移动len(words中字符串的长度)

3、滑动窗口的执行次数:执行len次

代码实现:

class Solution {public List<Integer> findSubstring(String s, String[] words) {List<Integer> ret = new ArrayList<>();//1. 把words扔进哈希表中HashMap<String, Integer> hash = new HashMap<>();for (int i = 0; i < words.length; i++) {hash.put(words[i], hash.getOrDefault(words[i], 0) + 1);}int len = words[0].length();//执行len次滑动窗口for (int i = 0; i < len; i++) {int left = i, right = i;int count = 0;//有效字符串的个数HashMap<String, Integer> hashMap = new HashMap<>();//滑动窗口while (right + len <= s.length()) {//进窗口+维护countString in = s.substring(right, right + len);hashMap.put(in, hashMap.getOrDefault(in, 0) + 1);if (hashMap.get(in) <= hash.getOrDefault(in, 0)) {count++;}//判断while ((right - left + 1) > len * words.length) {//需要出窗口+维护countString out = s.substring(left, left + len);if (hashMap.get(out) <= hash.getOrDefault(out, 0)) {count--;}hashMap.put(out, hashMap.get(out) - 1);left += len;}if (count == words.length) {ret.add(left);}right += len;}}return ret;        }
}

题目8:最小覆盖子串

题目链接:76. 最小覆盖子串 - 力扣(LeetCode)

在这里插入图片描述

解法:滑动窗口+哈希表,进窗口的操作就是让left位置的字符进入哈希表,在进窗口之后维护kinds(字符种类个数),当两个哈希表中有效字符的种类相等时,此时要出窗口,出窗口之前维护kinds
代码实现:

class Solution {public String minWindow(String ss, String tt) {// 数组模拟哈希表int[] hash1 = new int[128];int[] hash2 = new int[128];// 保存t的频次char[] s = ss.toCharArray();char[] t = tt.toCharArray();int count = 0;// t字符串中字符种类个数// 保存t的频次for (char ch : t) {if (hash2[ch] == 0) {count++;}hash2[ch]++;}// 滑动窗口启动int left = 0, right = 0, kinds = 0;int minLen = Integer.MAX_VALUE, begin = -1;while (right < s.length) {// 进窗口+维护kindschar in = s[right];hash1[in]++;// 维护有效字符种类if (hash1[in] == hash2[in]) {kinds++;}// 判断,如果kinds==count,也就是说hash1有效字符种类和hash2一样while (kinds == count) {// 更新结果,起始位置和最短长度if (right - left + 1 < minLen) {minLen = right - left + 1;begin = left;}// 出窗口+维护kindschar out = s[left];// 出之前判断有效字符种类if (hash1[out] == hash2[out]) {kinds--;}//出窗口hash1[out]--;left++;}right++;}if (begin == -1) {return new String();}return ss.substring(begin, begin + minLen);}
}

相关文章:

我要成为算法高手-滑动窗口篇

目录 滑动窗口算法题目1:长度最小的子数组题目2:无重复字符的最长子串题目3:最大连续1的个数题目4:将x减到0的最小操作数题目5:水果成篮题目6:找到字符串中所有的字母异位词题目7:串联所有单词的子串题目8:最小覆盖子串 滑动窗口算法 滑动窗口的本质还是双指针&#xff0c;只不…...

jenkins搭建及流水线配置

1.安装docker curl https://mirrors.aliyun.com/repo/Centos-7.repo >> CentOS-Base-Aliyun.repomv CentOS-Base-Aliyun.repo /etc/yum.repos.d/yum -y install yum-utils device-mapper-persistent-data lvm2yum-config-manager --add-repo http://mirrors.aliyun.com/…...

Vue v-on

vue : v-on:func --------------------------- data(){ return{ prop:any; } } methods:{ func(){ } } template:, v-on...

快速生成高质量提示词,Image to Prompt 更高效

抖知书老师推荐&#xff1a; 随着 AI 技术的不断发展&#xff0c;视觉信息与语言信息之间的转换变得越来越便捷。在如今的数字化生活中&#xff0c;图像与文字的交互需求愈发旺盛&#xff0c;很多人都希望能轻松将图像内容直接转化为文本描述。今天我们来推荐一款实用的 AI 工…...

SELS-SSL/TLS

一、了解公钥加密&#xff08;非对称加密&#xff09; 非对称加密中&#xff0c;用于加密数据的密钥与用于解密数据的密钥不同。私钥仅所有者知晓&#xff0c;而公钥则可自由分发。发送方使用接收方的公钥对数据进行加密&#xff0c;数据仅能使用相应的私钥进行解密。 你可以将…...

算法:排序

排序算法 1. 简单排序1.1 直接插入排序1.2 冒泡排序1.3 简单选择排序 2. 希尔排序3. 快速排序4. 堆排序5. 归并排序 将文件的内容按照某种规则进行排列。 排序算法的稳定判定&#xff1a;若在待排序的一个序列中&#xff0c; R i R_i Ri​和 R j R_j Rj​的关键码相同&#xf…...

MyBatis-Plus 更新对象时如何将字段值更新为 null

MyBatis-Plus 是一个 MyBatis 的增强工具&#xff0c;在简化开发、提高效率方面表现非常出色。然而&#xff0c;在使用 MyBatis-Plus 更新对象时&#xff0c;默认情况下是不会将字段值更新为 null 的。这是因为 MyBatis-Plus 使用了非空字段策略&#xff08;FieldStrategy&…...

Unreal5从入门到精通之如何在VR中使用3DUI

文章目录 前言创建3DUI1.新建控件蓝图2.添加控件到画布上3.新建Actor蓝图MyUIActor4.添加控件组件Widget5.设置控件类和画布大小6.创建MyUIActor实例到场景中3DUI和VR射线交互1.添加按钮的点击事件2.设置MyUIActor碰撞响应3.VRPawn添加控件交互组件4.添加手柄Trigger点击事件绑…...

ViSual studio如何安装 并使用GeographicLib

在C的 Boost.Geometry、GDAL/OGR 和 GeographicLib。这些库都可以用于计算两个经纬度点之间的地面距离。 . Boost.Geometry 描述&#xff1a;Boost库的一部分&#xff0c;提供了几何计算功能&#xff0c;包括计算两点之间的地面距离。 优势&#xff1a;轻量级、易于集成到C项…...

Java程序设计:spring boot(11)——分布式缓存 Ehcache 整合

目录 1 Spring Cache 相关注解说明 1.1 CacheConfig 1.2 Cacheable 1.3 CachePut 1.4 CacheEvict 1.5 Caching 2 环境配置 2.1 pom.xml 依赖添加 2.2 ehcahe.xml ⽂件添加 2.3 application.yml 缓存配置 2.4 启动缓存 2.5 JavaBean 对象实现序列化 3 缓存实现 3.…...

豆包,攻克数字是个什么工具?《GKData-挖掘数据的无限可能》(数据爬虫采集工具)

豆包&#xff0c;攻克数字是个什么工具&#xff1f; “攻克数字” 指的是 “攻克数字&#xff08;GKData&#xff09;” 这样一款工具。是一款针对网页、APP中数据自动解析转表存入数据库的软件&#xff0c;为数据工作者而生。它是一个不会编程也能用的可视化数据解析为标准二…...

说一说QWidget

目录 关于QWidget 作为界面组件时&#xff0c;你需要有印象的 1. 控制属性 2. 组件状态与交互属性 3. 外观和样式属性 4. 布局与子组件管理属性 5. 图标和光标属性 6. 大小策略属性 作为单独的窗体的属性 写Qt快两年了&#xff0c;也写过一些规模偏大的软件&#xff0c…...

Web3.0技术入门

Web3.0技术入门是一个涉及多个方面和领域的复杂过程&#xff0c;以下是一些关键的步骤和要点&#xff0c;帮助您初步了解并掌握Web3.0技术。 一、了解Web3.0的基本概念 Web3.0也被称为下一代互联网&#xff0c;它是对当前互联网&#xff08;Web2.0&#xff09;的演进和升级。…...

spygalss cdc 检测的bug(二)

当allow_qualifier_merge设置为strict的时候&#xff0c;sg是要检查门的极性的。 如果qualifier和src经过与门汇聚&#xff0c;在同另一个src1信号或门汇聚&#xff0c;sg是报unsync的。 假设当qualifier为0时&#xff0c;0&&src||src1src1&#xff0c;src1无法被gat…...

集合论(ZFC)之 选择公理(Axiom of Choice)注解

直观感受&#xff08;Intuition&#xff09; 集合论&#xff08;ZFC&#xff09;中的 "C" 指的是选择公理&#xff08;Axiom of Choice&#xff09;中的"choice"。简单来说&#xff0c;对于任一非空集合 S&#xff0c;那么存在一个函数 f&#xff0c;选择出…...

JS:字符串操作

目录 1、 字符串分割 1、 字符串分割 var str "123,456,789"; console.log(str.split(,)); // ["123", "456", "789"]...

.NET 一款二进制文件转换Shellcode的工具

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…...

【CSS】——基础入门常见操作

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 一&#xff1a;CSS引入 二&#xff1a;CSS对元素进行美化 1&#xff1a;style修饰 2&#xff1a;选…...

LuaJIT源码分析(五)词法分析

LuaJIT源码分析&#xff08;五&#xff09;词法分析 lua虽然是脚本语言&#xff0c;但在执行时&#xff0c;还是先将脚本编译成字节码&#xff0c;然后再由虚拟机解释执行。在编译脚本时&#xff0c;首先需要对源代码进行词法分析&#xff0c;把源代码分解为token流。lua的toke…...

005 匿名信

005 匿名信 题目描述 电视剧《分界线》里面有一个片段&#xff0c;男主为了向警察透露案件细节&#xff0c;且不暴露自己&#xff0c;于是将报刊上的字剪下来&#xff0c;剪拼成一封匿名信。现在有一名举报人&#xff0c;希望借鉴这种方式&#xff0c;使用英文报刊完成举报操…...

聊聊Web3D 发展趋势

随着 Web 技术的不断演进&#xff0c;Web3D 正逐渐成为各行业数字化的重要方向。Web3D 是指在网页中展示 3D 内容的技术集合。近年来&#xff0c;由于 WebGL、WebGPU 等技术的发展&#xff0c;3D 内容已经能够直接在浏览器中渲染&#xff0c;为用户提供更加沉浸、互动的体验。以…...

【数据结构与算法】LeetCode: 贪心算法

文章目录 LeetCode&#xff1a; 贪心算法买卖股票的最佳时机 &#xff08;Hot100&#xff09;买卖股票的最佳时机 II跳跃游戏 &#xff08;Hot100&#xff09;跳跃游戏 II&#xff08;Hot100&#xff09;划分字母区间 &#xff08;Hot100&#xff09;分发饼干K次取反后最大化的…...

Date 日期类的实现(c++)

本文用c实现日期类 将会实现以下函数 bool operator<(const Date& d);bool operator<(const Date& d);bool operator>(const Date& d);bool operator>(const Date& d);bool operator(const Date& d);bool operator!(const Date& d);Date&…...

智能家居10G雷达感应开关模块,飞睿智能uA级别低功耗、超高灵敏度,瞬间响应快

在当今科技飞速发展的时代&#xff0c;智能家居已经逐渐成为人们生活中不可或缺的一部分。从智能灯光控制到智能家电的联动&#xff0c;每一个细节都在为我们的生活带来便利和舒适。而在众多智能家居产品中&#xff0c;10G 雷达感应开关模块以其独特的优势&#xff0c;正逐渐成…...

头歌——人工智能(机器学习 --- 决策树2)

文章目录 第5关&#xff1a;基尼系数代码 第6关&#xff1a;预剪枝与后剪枝代码 第7关&#xff1a;鸢尾花识别代码 第5关&#xff1a;基尼系数 基尼系数 在ID3算法中我们使用了信息增益来选择特征&#xff0c;信息增益大的优先选择。在C4.5算法中&#xff0c;采用了信息增益率…...

一七一、React性能优化方式

在 React 中进行性能优化可以通过多种手段来减少渲染次数、优化渲染效率并减少内存消耗。以下是常见的性能优化方法及示例&#xff1a; 1. shouldComponentUpdate shouldComponentUpdate 是类组件中的生命周期方法&#xff0c;它可以让组件在判断是否需要重新渲染时&#xff…...

编写dockerfile生成镜像,并且构建容器运行

编写dockerfile生成镜像&#xff0c;并且构建容器运行 目录 编写dockerfile生成镜像&#xff0c;并且构建容器运行 概述 一、dockerfile文件详解 Dockerfile的基本结构 Dockerfile的常用指令 二、构建过程 概述 随着微服务应用越来越多&#xff0c;大家需要尽快掌握dock…...

Java项目练习——学生管理系统

1. 整体结构 代码实现了基本的学生管理系统功能&#xff0c;包括登录、注册、忘记密码、添加、删除、修改和查询学生信息。 使用了ArrayList来存储用户和学生信息。 使用了Scanner类来处理用户输入。 2. 主要功能模块 登录 (logIn)&#xff1a;验证用户名和密码&#xff0c;…...

sqlserver、达梦、mysql的差异

差异项sqlserver达梦mysql单行注释---- 1、-- &#xff0c;--后面带个空格 2、# 包裹对象名称&#xff0c;如表、表字段等 [tableName] "tableName"tableName表字段自增IDENTITY(1, 1)IDENTITY(1, 1)AUTO_INCREMENT二进制数据类型IMAGEIMAGE、BLOBBLOB 存储一个汉字需…...

Spring AOP(定义、使用场景、用法、3种事务、事务失效场景及解决办法、面试题)

目录 1. AOP定义&#xff1f; 2.常见的AOP使用场景&#xff1a; 3.Spring AOP用法 3.1 Spring AOP中的几个核心概念 3.1.1 切面、切点、通知、连接点 3.1.2 切点表达式AspectJ 3.2 使用 Spring AOP 的步骤总结 3.2.1 添加依赖: 3.2.2 定义切面和切点&#xff08;切点和…...

建设单位招聘用那个网站/网络服务商主要包括哪些

一、创建信用段 二、定义客户信贷组 三、为记分和信贷限额计算创建规则 四、创建风险类 五、定义检查规则 六、指定信用控制区域及信用部分 七、将销售范围分配到信用控制范围 八、定义信贷组 九、设置销售凭证类型的信用额度检查 十、设置交货类型的信用额度检查 十一、定义信…...

南京高新区建设规划局网站/天津seo管理平台

http://poj.org/problem?id1699 题意&#xff1a; 现在给出几个基因片段&#xff0c;要求你将它们排列成一个最短的序列&#xff0c;序列中使用了所有的基因片段&#xff0c;而且不能翻转基因。&#xff0c;这些基因可以重叠&#xff0c;只要一个基因的后段和一个基因的前端一…...

wordpress做小说/免费引流微信推广

margin&#xff08;对齐和居中&#xff09; 微信小程序交流群&#xff1a;111733917 | 微信小程序从0基础到就业的课程&#xff1a;https://edu.csdn.net/topic/huangjuhua 默认样式和代码 效果如图 Wxml代码 <view classzong> <view classfangxing1><text&…...

wordpress从/百度站长工具综合查询

启动流程 /*** 启动流程*/Testpublic void 启动() throws Exception {runtimeService.startProcessInstanceByKey("myProcess");}...

做的响应式网站用什么测试/常德seo招聘

python grib气象数据可视化 基于Python的Grib数据可视化 利用Python语言实现Grib数据可视化主要依靠三个库——pygrib、numpy和matplotlib。pygrib是欧洲中期天气预报中心(ECMWF)的GRIG API C库的Python接口&#xff0c;通过这个库可以将Grib数据读取出来&#xff1b;numpy是Py…...

石家庄市建设局网站/网站制作公司高端

python 简单的网页爬虫与测试 流程 boost.py import time import requests import randomfrom lxml import etree import json def getonepage(n):urlfhttps://zhuanlan.zhihu.com/p/{n}?utm_sourceqq&utm_mediumsocial #要以http开头 f引导 {}占位符header{User-Agent:…...