双指针算法专题

前言

双指针算法入门,干就完了

下面的题目都是来自灵神的基础算法精讲,有思路不清晰的地方,可以去看讲解。

灵茶山艾府的个人空间-灵茶山艾府个人主页-哔哩哔哩视频 (bilibili.com)

相向双指针

1.两数之和

题目链接:167. 两数之和 II - 输入有序数组 - 力扣(LeetCode)

题目描述

给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1]numbers[index2] ,则 1 <= index1 < index2 <= numbers.length

以长度为 2 的整数数组 [index1, index2] 的形式返回这两个整数的下标 index1index2

你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。

你所设计的解决方案必须只使用常量级的额外空间。

示例 1:

输入:numbers = [2,7,11,15], target = 9
输出:[1,2]
解释:2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。返回 [1, 2] 。

示例 2:

输入:numbers = [2,3,4], target = 6
输出:[1,3]
解释:2 与 4 之和等于目标数 6 。因此 index1 = 1, index2 = 3 。返回 [1, 3] 。

示例 3:

输入:numbers = [-1,0], target = -1
输出:[1,2]
解释:-1 与 0 之和等于目标数 -1 。因此 index1 = 1, index2 = 2 。返回 [1, 2] 。

提示:

  • 2 <= numbers.length <= 3 * 104
  • -1000 <= numbers[i] <= 1000
  • numbers非递减顺序 排列
  • -1000 <= target <= 1000
  • 仅存在一个有效答案

代码

C++
class Solution {
public:vector<int> twoSum(vector<int>& numbers, int target) {int n = numbers.size();int left = 0;int right = n - 1;while (left < right) {int s = numbers[left] + numbers[right];if (s == target) {break;} else if (s > target) {right -= 1;} else {left += 1;}}return {left + 1, right + 1};}
};
Java
class Solution {public int[] twoSum(int[] numbers, int target) {int n = numbers.length;int[] res = new int[2]; // 定义数组,用于最终答案的存储int left = 0;int right = n - 1;while (left < right) {int s = numbers[left] + numbers[right];if (s == target) {res[0] = left + 1;res[1] = right + 1;break;} else if (s > target) {right -= 1;} else {left += 1;}}return res;}
}

2.三数之和

题目链接:15. 三数之和 - 力扣(LeetCode)

题目描述

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != ji != kj != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请

你返回所有和为 0 且不重复的三元组。

**注意:**答案中不可以包含重复的三元组。

示例 1:

输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
解释:
nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。
nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。
nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0 。
不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。
注意,输出的顺序和三元组的顺序并不重要。

示例 2:

输入:nums = [0,1,1]
输出:[]
解释:唯一可能的三元组和不为 0 。

示例 3:

输入:nums = [0,0,0]
输出:[[0,0,0]]
解释:唯一可能的三元组和为 0 。

提示:

  • 3 <= nums.length <= 3000
  • -105 <= nums[i] <= 105

代码

C++
class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {sort(nums.begin(), nums.end()); // 对nums数组排序vector<vector<int>> ans;        // 最终结果int n = nums.size();            // nums数组的长度for (int i = 0; i < n - 2; i++) { // i < n - 2是要给left、right留下位置int x = nums[i];if (i && x == nums[i - 1])continue; // 跳过重复数字if (x + nums[i] + nums[i + 1] > 0)break; // 因为nums是排好序的,数组的前三个数相加都大于0了,那么后面的数字相加不可能等于0if (x + nums[n - 1] + nums[n - 2] < 0)continue; // 如果当前的x与最大的两个数相加小于0,那么x与中间的任意数字相加都小于0,直接可以枚举下一个x了。int left = i + 1;int right = n - 1;while (left < right) {int s = x + nums[left] + nums[right]; // 先计算出三者相加的结果if (s > 0)right--; // s > 0的话,代表右边的数大了,所以右指针左移else if (s < 0)left++; // s < 0的话,代表左边的数小了,所以左指针右移else {ans.push_back({x, nums[left], nums[right]});left++;while (left < right &&nums[left] == nums[left - 1]) { // 跳过重复数字left++;}right--;while (right > left &&nums[right] == nums[right + 1]) { // 跳过重复数字right--;}}}}return ans;}
};
Java
class Solution {public List<List<Integer>> threeSum(int[] nums) {Arrays.sort(nums); // 数组排序List<List<Integer>> ans = new ArrayList<>(); // 最终结果int n = nums.length; // 数组长度for (int i = 0; i < n - 2; i++) { // 遍历数组,留出位置给左右指针int x = nums[i];if (i > 0 && x == nums[i - 1])continue; // 跳过重复数字if (x + nums[i + 1] + nums[i + 2] > 0)break; // 如果前三个数相加已经大于0,后面的数字相加不可能等于0if (x + nums[n - 1] + nums[n - 2] < 0)continue; // 如果当前数字与最大的两个数字相加小于0,直接枚举下一个数字int left = i + 1;int right = n - 1;while(left < right){int s = x + nums[left] + nums[right];if(s > 0) right--; // 右指针左移else if(s < 0) left++; // 左指针右移else{ans.add(List.of(x,nums[left],nums[right]));left++;while (left < right && nums[left] == nums[left - 1]) {left++; // 跳过重复数字}right--;while (right > left && nums[right] == nums[right + 1]) {right--; // 跳过重复数字}}}}return ans;}
}

3.最接近的三数之和

题目链接:16. 最接近的三数之和 - 力扣(LeetCode)

题目描述

给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。

返回这三个数的和。

假定每组输入只存在恰好一个解。

示例 1:

输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。

示例 2:

输入:nums = [0,0,0], target = 1
输出:0

提示:

  • 3 <= nums.length <= 1000
  • -1000 <= nums[i] <= 1000
  • -104 <= target <= 104

优化来自灵神,不得不说,灵神yyds,下面为灵神的题解

16. 最接近的三数之和 - 力扣(LeetCode)

代码

C++
class Solution {
public:int threeSumClosest(vector<int>& nums, int target) {sort(nums.begin(),nums.end());int n = nums.size();int minDiff = INT_MAX;int ans = 0;for (int i = 0; i < n - 2; i++) {int x = nums[i];// 优化三if(i > 0 && x == nums[i - 1]){continue;}// 优化一int res = x + nums[i+1] + nums[i+2];if(res > target){ // 后面无论怎么选,选出的三个数的和不会比res小if(res - target < minDiff){ans = res;}break;}// 优化二res = x + nums[n - 1] + nums[n - 2];if(res < target){ // x 加上后面任意两个数都不超过 s,所以下面的双指针就不需要跑了if(target - res < minDiff){minDiff = target - res;ans = res;}continue;}// 双指针int left = i + 1, right = n - 1;while (left < right) {int res = x + nums[left] + nums[right];if (res == target) {return target;} else if (res < target) {if (target - res < minDiff) { // 找到更接近 target 的数minDiff = target - res;ans = res;}left++;} else {// res > targetif (res - target < minDiff) { // 找到更接近 target 的数minDiff = res - target;ans = res;}right--;}}}return ans;}
};
Java
class Solution {public int threeSumClosest(int[] nums, int target) {Arrays.sort(nums);int n = nums.length;int minDiff = Integer.MAX_VALUE;int ans = 0;for (int i = 0; i < n - 2; i++) {int x = nums[i];// 优化三if (i > 0 && x == nums[i - 1]) {continue;}// 优化一int res = x + nums[i + 1] + nums[i + 2];if (res > target) { // 后面无论怎么选,选出的三个数的和不会比res小if (res - target < minDiff) {ans = res;}break;}// 优化二res = x + nums[n - 1] + nums[n - 2];if (res < target) { // x 加上后面任意两个数都不超过 s,所以下面的双指针就不需要跑了if (target - res < minDiff) {minDiff = target - res;ans = res;}continue;}// 双指针int left = i + 1, right = n - 1;while (left < right) {res = x + nums[left] + nums[right];if (res == target) {return target;} else if (res < target) {if (target - res < minDiff) { // 找到更接近 target 的数minDiff = target - res;ans = res;}left++;} else { // res > targetif (res - target < minDiff) { // 找到更接近 target 的数minDiff = res - target;ans = res;}right--;}}}return ans;}
}

4.盛最多水的容器

题目链接:11. 盛最多水的容器 - 力扣(LeetCode)

题目描述

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0)(i, height[i])

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。

**说明:**你不能倾斜容器。

示例 1:

img

输入:[1,8,6,2,5,4,8,3,7]
输出:49 
解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。

示例 2:

输入:height = [1,1]
输出:1

提示:

  • n == height.length
  • 2 <= n <= 105
  • 0 <= height[i] <= 104

代码

C++
class Solution {
public:int maxArea(vector<int>& height) {int n = height.size();int left = 0;int right = n - 1;int res = 0,area = 0;while(left < right){area = (right - left) * min(height[left],height[right]);res = max(res,area);if(height[left] < height[right]){left++;} else {right--;}}return res;}
};
Java
class Solution {public int maxArea(int[] height) {int n = height.length;int left = 0;int right = n - 1;int res = 0;while(left < right){int area = Math.min(height[left],height[right]) * (right - left);res = Math.max(res,area);if(height[left] < height[right]){left++;}else{right--;}}return res;}
}

5.接雨水

题目链接:42. 接雨水 - 力扣(LeetCode)

题目描述

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

示例 1:

img

输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
输出:6
解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 

示例 2:

输入:height = [4,2,0,3,2,5]
输出:9

提示:

  • n == height.length
  • 1 <= n <= 2 * 104
  • 0 <= height[i] <= 105

代码

C++
class Solution {
public:int trap(vector<int>& height) {int n = height.size();int left = 0, right = n - 1;int pre_max = 0, suf_max = 0;int ans = 0;while (left < right) {pre_max = max(pre_max, height[left]); // 更新前缀最大值suf_max = max(suf_max, height[right]); // 更新后缀最大值if (pre_max < suf_max) { // 柱子雨水高度是该柱子前后缀最高柱子的较小者ans += pre_max - height[left]; // 当前位置雨水高度减去柱子高度left++; // 左指针右移} else {ans += suf_max - height[right]; // 当前位置雨水高度减去柱子高度right--; // 右指针左移}}return ans;}
};
Java
class Solution {public int trap(int[] height) {int n = height.length;int left = 0, right = n - 1;int pre_max = 0, suf_max = 0;int ans = 0;while (left < right) {pre_max = Math.max(pre_max, height[left]); // 更新前缀最大值suf_max = Math.max(suf_max, height[right]); // 更新后缀最大值if (pre_max < suf_max) { // 柱子雨水高度是该柱子前后缀最高柱子的较小者ans += pre_max - height[left]; // 当前位置雨水高度减去柱子高度left++; // 左指针右移} else {ans += suf_max - height[right]; // 当前位置雨水高度减去柱子高度right--; // 右指针左移}}return ans;}
}

同向双指针(滑动窗口)

1.长度最小的子数组

题目链接:209. 长度最小的子数组 - 力扣(LeetCode)

题目描述

给定一个含有 n 个正整数的数组和一个正整数 target

找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度**。**如果不存在符合条件的子数组,返回 0

示例 1:

输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。

示例 2:

输入:target = 4, nums = [1,4,4]
输出:1

示例 3:

输入:target = 11, nums = [1,1,1,1,1,1,1,1]
输出:0

提示:

  • 1 <= target <= 109
  • 1 <= nums.length <= 105
  • 1 <= nums[i] <= 105

思路

滑动窗口

代码

C++
class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int n = nums.size();int ans = n + 1;int left = 0, s = 0;for (int right = 0; right < n; right++) {s += nums[right];while (s >= target) {ans = min(ans, right - left + 1);s -= nums[left];left++;}}return ans <= n ? ans : 0;}
};
Java
class Solution {public int minSubArrayLen(int target, int[] nums) {int n = nums.length;int ans = n+1;int left = 0, s = 0;for(int right = 0;right < n; right++){s += nums[right];while(s >= target){ans = Math.min(ans, right - left +1);s -= nums[left];left++;}}return ans <= n ? ans : 0;}
}

2.乘积小于K的子数组

题目链接:713. 乘积小于 K 的子数组 - 力扣(LeetCode)

题目描述

给你一个整数数组 nums 和一个整数 k ,请你返回子数组内所有元素的乘积严格小于 k 的连续子数组的数目。

示例 1:

输入:nums = [10,5,2,6], k = 100
输出:8
解释:8 个乘积小于 100 的子数组分别为:[10]、[5]、[2],、[6]、[10,5]、[5,2]、[2,6]、[5,2,6]。
需要注意的是 [10,5,2] 并不是乘积小于 100 的子数组。

示例 2:

输入:nums = [1,2,3], k = 0
输出:0

提示:

  • 1 <= nums.length <= 3 * 104
  • 1 <= nums[i] <= 1000
  • 0 <= k <= 106

思路

滑动窗口

代码

C++
class Solution {
public:int numSubarrayProductLessThanK(vector<int>& nums, int k) {int n = nums.size();int ans = 0; // 结果int left = 0;int s = 1;if(k <= 1){return 0;}for(int right = 0; right < n; right++){s *= nums[right];while( s >= k){s /= nums[left];left++;}ans += right - left + 1;}return ans;}
};
Java
class Solution {public int numSubarrayProductLessThanK(int[] nums, int k) {int n = nums.length;int ans = 0;int s = 1;int left = 0;if(k <= 1){return 0;}for(int right = 0;right < n; right++){s *= nums[right];while(s >= k){s /= nums[left];left++;}ans += right - left + 1;}return ans;}
}

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

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

题目描述

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

示例 1:

输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:

输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3:

输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

提示:

  • 0 <= s.length <= 5 * 104
  • s 由英文字母、数字、符号和空格组成

思路

滑动窗口

代码

C++
class Solution {
public:int lengthOfLongestSubstring(string s) {int n = s.length();int ans = 0, left = 0;unordered_set<char> window; // 维护当前子串的字符集合for (int right = 0; right < n; right++) {char c = s[right];while (window.count(c)) {window.erase(s[left]);left++;}window.insert(c);ans = max(ans, right - left + 1);}return ans;}
};
Java
class Solution {public int lengthOfLongestSubstring(String s) {int n = s.length();int ans = 0, left = 0;HashSet<Character> window = new HashSet<>();for (int right = 0; right < n; right++) {char c = s.charAt(right);while (window.contains(c)) { // 判断是否重复window.remove(s.charAt(left));left++;}window.add(c);ans = Math.max(ans, right - left + 1);}return ans;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/243364.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VSCode使用Makefile Tools插件开发C/C++程序

提起Makefile&#xff0c;可能有人会觉得它已经过时了&#xff0c;毕竟现在有比它更好的工具&#xff0c;比如CMake&#xff0c;XMake&#xff0c;Meson等等&#xff0c;但是在Linux下很多C/C源码都是直接或者间接使用Makefile文件来编译项目的&#xff0c;可以说Makefile是基石…

YARN节点故障的容错方案

YARN节点故障的容错方案 1. RM高可用1.1 选主和HA切换逻辑 2. NM高可用2.1 感知NM节点异常2.2 异常NM上的任务处理 4. 疑问和思考4,1 RM感知NM异常需要10min&#xff0c;对于app来说是否太长了&#xff1f; 5. 参考文档 本文主要探讨yarn集群的高可用容错方案和容错能力的探讨。…

查找局域网树莓派raspberry的mac地址和ip

依赖python库&#xff1a; pip install socket pip install scapy运行代码&#xff1a; import socket from scapy.layers.l2 import ARP, Ether, srpdef get_hostname(ip_address):try:return socket.gethostbyaddr(ip_address)[0]except socket.herror:# 未能解析主机名ret…

【C++】类和对象(上篇)

文章目录 &#x1f6df;一、面向过程和面向对象初步认识&#x1f6df;二、类的引入&#x1f6df;三、类的定义&#x1f4dd;1、类的两种定义方式&#x1f4dd;2、成员变量命名规则的建议 &#x1f6df;四、类的访问限定符及封装&#x1f369;1、访问限定符&#x1f369;2、封装…

医院网络安全建设:三网整体设计和云数据中心架构设计

医院网络安全问题涉及到医院日常管理多个方面&#xff0c;一旦医院信息管理系统在正常运行过程中受到外部恶意攻击&#xff0c;或者出现意外中断等情况&#xff0c;都会造成海量医疗数据信息的丢失。由于医院信息管理系统中存储了大量患者个人信息和治疗方案信息等&#xff0c;…

unity 单例模式(实例详解)

文章目录 在Unity中&#xff0c;单例模式是一种常用的编程设计模式&#xff0c;用于确保在整个应用程序生命周期中&#xff0c;只有一个类的实例存在。这样可以保证数据的全局唯一性和共享性&#xff0c;例如游戏场景中的资源管理器、游戏控制器、事件管理器等。 以下是一个简单…

C++11手撕线程池 call_once 单例模式 Singleton / condition_variable 与其使用场景

一、call_once 单例模式 Singleton 大家可以先看这篇文章&#xff1a;https://zh.cppreference.com/w/cpp/thread/call_once /*std::call_oncevoid call_once( std::once_flag& flag, Callable&& f, Args&&... args ); */ #include <iostream> #i…

C# 使用System.Threading.Timer 实现计时器

写在前面 以往一般都是用 System.Timers.Timer 来做计时器&#xff0c;而 System.Threading.Timer 也可以实现计时器功能&#xff0c;并且还可以配置首次执行间隔&#xff0c;在功能上比System.Timers.Timer更加丰富&#xff1b;根据这个特性就可以实现按指定时间间隔对委托进…

2023年上半年网络工程师真题(1/3)

1.固态硬盘的存储介质是&#xff08;B&#xff09;。 A.光盘 B.闪存 C.软盘 D.磁盘 SSD存储介质是FLASH(一块块的存储芯片)&#xff0c;HDD(机械硬盘)存储介质是磁盘(机械臂和盘道)&#xff0c;补充:U盘的存储介质也是FLASH闪存。 2.虚拟存储技术把&#xff08;A&#xf…

小封装高稳定性振荡器 Sg2520egn / sg2520vgn, sg2520ehn / sg2520vhn

描述 随着物联网和ADAS等5G应用的实施&#xff0c;数据流量不断增长&#xff0c;网络基础设施变得比以往任何时候都更加重要。IT供应商一直在快速建设数据中心&#xff0c;并且对安装在数据中心内部/内部的光模块有很大的需求。此应用需要具有“小”&#xff0c;“低抖动”和“…

Linux_清理docker磁盘占用

文章目录 前言一、docker system 命令1. docker system df&#xff08;本文重点使用&#xff09;2. docker system prune&#xff08;本文重点使用&#xff09;3. docker system info4. docker system events 二、开始清理三、单独清理Build Cache四、单独清理未被使用的网络 前…

特征融合篇 | YOLOv8 引入长颈特征融合网络 Giraffe FPN

在本报告中,我们介绍了一种名为DAMO-YOLO的快速而准确的目标检测方法,其性能优于现有的YOLO系列。DAMO-YOLO是在YOLO的基础上通过引入一些新技术而扩展的,这些技术包括神经架构搜索(NAS)、高效的重参数化广义FPN(RepGFPN)、带有AlignedOTA标签分配的轻量级头部以及蒸馏增…

一文详解 Berachain 测试网:全面介绍与教程,bitget wallet教程

什么是Berachain&#xff1f; Berachain&#xff08;web3.bitget.com/zh-CN/assets/berachain-wallet&#xff09;是一种尖端区块链技术&#xff0c;使用 Cosmos SDK 构建的 Layer-1&#xff0c;兼容以太坊虚拟机&#xff08;EVM&#xff09;。它基于一种独特的概念&#xff0c…

Unity编程#region..#endregion以及面板提示语标签[Tooltip(““)]

C#中的#region..#endregion 在Unity中&#xff0c;#region和#endregion是用于代码折叠的预处理指令。它们并不是Unity特有的&#xff0c;而是C#语言本身提供的功能。 #region用于标记一段代码的开始&#xff0c;而#endregion用于标记一段代码的结束。在编辑器中&#xff0c;可…

基于YOLOv5、v7、v8的竹签计数系统的设计与实现

文章目录 前言效果演示一、实现思路① 算法原理② 程序流程图 二、系统设计与实现三、模型评估与优化① Yolov5② Yolov7③Yolov8 四、模型对比 前言 该系统是一个综合型的应用&#xff0c;基于PyTorch框架的YOLOv5、YOLOv7和YOLOv8&#xff0c;结合了Django后端和Vue3前端&am…

C内存对齐问题

一、主要参考&#xff1a; C/C编程笔记&#xff1a;C语言对齐问题【结构体、栈内存以及位域对齐】_二进制异常退出,栈对齐-CSDN博客 其中关于内存对齐&#xff0c;讲了结构体以及位域&#xff0c;以及一些容易出错的地方&#xff0c;非常好。 结构体对齐&#xff1a; 下面提…

项目风险管理

风险分类&#xff1a; 分类性质&#xff1a;纯粹风险&#xff0c;投机风险---对应火灾&#xff0c;股票买卖 产生原因&#xff1a;自然&#xff0c;社会&#xff0c;政治&#xff0c;经济&#xff0c;技术 风险性质&#xff1a;客观性&#xff0c;偶然性&#xff0c;相对性&a…

MySQL---多表等级查询综合练习

创建emp表 CREATE TABLE emp( empno INT(4) NOT NULL COMMENT 员工编号, ename VARCHAR(10) COMMENT 员工名字, job VARCHAR(10) COMMENT 职位, mgr INT(4) COMMENT 上司, hiredate DATE COMMENT 入职时间, sal INT(7) COMMENT 基本工资, comm INT(7) COMMENT 补贴, deptno INT…

锂电池SOC估计 | PatchTST时间序列模型锂电池SOC估计

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 锂电池SOC估计 | PatchTST时间序列模型锂电池SOC估计 采用新型PatchTST时间序列模型预测锂电池SOC&#xff0c;送锂电池数据集 可替换数据集&#xff0c;实现负荷预测、流量预测、降雨量预测、空气质量预测等其他多种…

[足式机器人]Part2 Dr. CAN学习笔记- 最优控制Optimal Control Ch07-2 动态规划 Dynamic Programming

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记 - 最优控制Optimal Control Ch07-2 动态规划 Dynamic Programming 1. 基本概念2. 代码详解3. 简单一维案例 1. 基本概念 Richoard Bell man 最优化理论&#xff1a; An optimal policy has the …