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

算法拾遗二十七之窗口最大值或最小值的更新结构

算法拾遗二十七之窗口最大值或最小值的更新结构

      • 滑动窗口
      • 题目一
      • 题目二
      • 题目三
      • 题目四

滑动窗口

第一种:R++,R右动,数会从右侧进窗口
第二种:L++,L右动,数从左侧出窗口

题目一

在这里插入图片描述
arr是N,窗口大小为W,会返回N-W+1个数

	// 暴力的对数器方法public static int[] right(int[] arr, int w) {if (arr == null || w < 1 || arr.length < w) {return null;}int N = arr.length;int[] res = new int[N - w + 1];int index = 0;//第一个窗口0-(w-1)int L = 0;int R = w - 1;while (R < N) {int max = arr[L];for (int i = L + 1; i <= R; i++) {max = Math.max(max, arr[i]);}res[index++] = max;L++;R++;}return res;}
	public static int[] getMaxWindow(int[] arr, int w) {if (arr == null || w < 1 || arr.length < w) {return null;}// qmax 双端队列就是窗口最大值的更新结构// 里面放下标方便更新LinkedList<Integer> qmax = new LinkedList<Integer>();//N-w+1int[] res = new int[arr.length - w + 1];int index = 0;//R表示窗口的右边界for (int R = 0; R < arr.length; R++) {//双端队列上最尾巴上的元素是不是小于当前的值的,如果小于等于则从尾巴弹出while (!qmax.isEmpty() && arr[qmax.peekLast()] <= arr[R]) {qmax.pollLast();}qmax.addLast(R);//窗口的过期数的下标if (qmax.peekFirst() == R - w) {qmax.pollFirst();}//形成窗口的时候,表示需要收集答案,每一步都收集一个答案if (R >= w - 1) {res[index++] = arr[qmax.peekFirst()];}}return res;}

题目二

在这里插入图片描述
思路:
如果L-R已经达标了,那么L-R内部的所有子数组都是达标的,因为L-R范围内部的子数组max在变小,min在变大。
如果L-R范围不达标,那么L往左扩大范围和R往右边扩大范围都不达标。

准备一个窗口内最大值的更新结构,同样准备窗口内最小值的更新结构。【同时使用两个结构维持窗口内的最大和最小】
步骤:
1、L不动,R如果满足【L-R范围的最大值和最小值的差值如果都满足小于等于num】则R一直往右边扩
,直到不满足条件为止。(注意此时是L在0为止,算出从零开始的子数组有多少个累加进结果)
2、L向右移动一位,看看R能不能往右扩,再算从L+1位置到能构成条件的子数组有多少个,再累加进结果。

	// 暴力的对数器方法public static int right(int[] arr, int sum) {if (arr == null || arr.length == 0 || sum < 0) {return 0;}int N = arr.length;int count = 0;for (int L = 0; L < N; L++) {for (int R = L; R < N; R++) {int max = arr[L];int min = arr[L];for (int i = L + 1; i <= R; i++) {max = Math.max(max, arr[i]);min = Math.min(min, arr[i]);}if (max - min <= sum) {count++;}}}return count;}public static int num(int[] arr, int sum) {if (arr == null || arr.length == 0 || sum < 0) {return 0;}int N = arr.length;int count = 0;LinkedList<Integer> maxWindow = new LinkedList<>();LinkedList<Integer> minWindow = new LinkedList<>();int R = 0;for (int L = 0; L < N; L++) {//依次尝试窗口为0开始,1开始。。。。while (R < N) {//R扩到初次不达标的时候停while (!maxWindow.isEmpty() && arr[maxWindow.peekLast()] <= arr[R]) {//维护从大到小列表maxWindow.pollLast();}maxWindow.addLast(R);while (!minWindow.isEmpty() && arr[minWindow.peekLast()] >= arr[R]) {//维护从小到大列表minWindow.pollLast();}minWindow.addLast(R);//最大值减去最小值大于sum则初次不达标了停止if (arr[maxWindow.peekFirst()] - arr[minWindow.peekFirst()] > sum) {break;} else {R++;}}//加结果count += R - L;//如果L即将过期则弹出窗口对应值if (maxWindow.peekFirst() == L) {maxWindow.pollFirst();}if (minWindow.peekFirst() == L) {minWindow.pollFirst();}}return count;}// for testpublic static int[] generateRandomArray(int maxLen, int maxValue) {int len = (int) (Math.random() * (maxLen + 1));int[] arr = new int[len];for (int i = 0; i < len; i++) {arr[i] = (int) (Math.random() * (maxValue + 1)) - (int) (Math.random() * (maxValue + 1));}return arr;}// for testpublic static void printArray(int[] arr) {if (arr != null) {for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}System.out.println();}}public static void main(String[] args) {int maxLen = 100;int maxValue = 200;int testTime = 100000;System.out.println("测试开始");for (int i = 0; i < testTime; i++) {int[] arr = generateRandomArray(maxLen, maxValue);int sum = (int) (Math.random() * (maxValue + 1));int ans1 = right(arr, sum);int ans2 = num(arr, sum);if (ans1 != ans2) {System.out.println("Oops!");printArray(arr);System.out.println(sum);System.out.println(ans1);System.out.println(ans2);break;}}System.out.println("测试结束");}

题目三

在这里插入图片描述
给定两个数组一个是gas数组,一个是cost数组,
0号加油站有1单位的油,但是跑到加油站2需要耗费两单位的油,从哪个加油站开始能转完一圈?
在这里插入图片描述
如上图,只能通过从C出发才能跑完一圈
思路:
加工出一个arr数组,就是gas-cost数组,做一个简化
在这里插入图片描述
再看如下例子
在这里插入图片描述
暴力解:搞定循环数组的遍历,从0位置出发找是否有解,从1位置出发找是否有解依次找下去
方法二:
1、先算累加和:
在这里插入图片描述
这样写的目的:从零出发一直累加到五之前,可以判断从0位置出发不是良好出发点,再看从1位置出发依次累加
在这里插入图片描述
里面包含负数可以知道它不是一个良好出发点,如上图这个数组就是算从零位置开始计算的累加和得到的那个数组减去-2得到的数组。
做一个两倍长度的数组就是想让它所有原始数组中出发的那个位置,在长数组中能把它原始的累加和给加工出来
则每次计算后续的出发点的数组内容时,则减去前一个就能得到了
在这里插入图片描述
搞一个窗口,这个窗口就是原始数组的长度,窗口的最小值(最薄弱点)是-5减去出发位置前面一个数,从而还原出原始数组累加和最薄弱点,还原出的结果还是小于0则不是良好出发点,还原出的结果不小于0则是良好出发点

如0位置出发薄弱点为-5,还原出原始累加和为-5-0还是小于0不是良好出发点。

这道题,在这里插入图片描述
要想到窗口往最大值和最小值上面靠,进而想到累加和最薄弱的点

// 测试链接:https://leetcode.com/problems/gas-station
public class GasStation {// 这个方法的时间复杂度O(N),额外空间复杂度O(N)public static int canCompleteCircuit(int[] gas, int[] cost) {boolean[] good = goodArray(gas, cost);for (int i = 0; i < gas.length; i++) {if (good[i]) {return i;}}return -1;}public static boolean[] goodArray(int[] g, int[] c) {int N = g.length;int M = N << 1;int[] arr = new int[M];for (int i = 0; i < N; i++) {arr[i] = g[i] - c[i];arr[i + N] = g[i] - c[i];}for (int i = 1; i < M; i++) {arr[i] += arr[i - 1];}LinkedList<Integer> w = new LinkedList<>();for (int i = 0; i < N; i++) {while (!w.isEmpty() && arr[w.peekLast()] >= arr[i]) {w.pollLast();}w.addLast(i);}boolean[] ans = new boolean[N];for (int offset = 0, i = 0, j = N; j < M; offset = arr[i++], j++) {if (arr[w.peekFirst()] - offset >= 0) {ans[i] = true;}if (w.peekFirst() == i) {w.pollFirst();}while (!w.isEmpty() && arr[w.peekLast()] >= arr[j]) {w.pollLast();}w.addLast(j);}return ans;}}

题目四

在这里插入图片描述

public class Code04_MinCoinsOnePaper {public static int minCoins(int[] arr, int aim) {return process(arr, 0, aim);}public static int process(int[] arr, int index, int rest) {if (rest < 0) {return Integer.MAX_VALUE;}if (index == arr.length) {return rest == 0 ? 0 : Integer.MAX_VALUE;} else {int p1 = process(arr, index + 1, rest);int p2 = process(arr, index + 1, rest - arr[index]);if (p2 != Integer.MAX_VALUE) {p2++;}return Math.min(p1, p2);}}// dp1时间复杂度为:O(arr长度 * aim)public static int dp1(int[] arr, int aim) {if (aim == 0) {return 0;}int N = arr.length;int[][] dp = new int[N + 1][aim + 1];dp[N][0] = 0;for (int j = 1; j <= aim; j++) {dp[N][j] = Integer.MAX_VALUE;}for (int index = N - 1; index >= 0; index--) {for (int rest = 0; rest <= aim; rest++) {int p1 = dp[index + 1][rest];int p2 = rest - arr[index] >= 0 ? dp[index + 1][rest - arr[index]] : Integer.MAX_VALUE;if (p2 != Integer.MAX_VALUE) {p2++;}dp[index][rest] = Math.min(p1, p2);}}return dp[0][aim];}public static class Info {public int[] coins;public int[] zhangs;public Info(int[] c, int[] z) {coins = c;zhangs = z;}}public static Info getInfo(int[] arr) {HashMap<Integer, Integer> counts = new HashMap<>();for (int value : arr) {if (!counts.containsKey(value)) {counts.put(value, 1);} else {counts.put(value, counts.get(value) + 1);}}int N = counts.size();int[] coins = new int[N];int[] zhangs = new int[N];int index = 0;for (Entry<Integer, Integer> entry : counts.entrySet()) {coins[index] = entry.getKey();zhangs[index++] = entry.getValue();}return new Info(coins, zhangs);}// dp2时间复杂度为:O(arr长度) + O(货币种数 * aim * 每种货币的平均张数)public static int dp2(int[] arr, int aim) {if (aim == 0) {return 0;}// 得到info时间复杂度O(arr长度)Info info = getInfo(arr);int[] coins = info.coins;int[] zhangs = info.zhangs;int N = coins.length;int[][] dp = new int[N + 1][aim + 1];dp[N][0] = 0;for (int j = 1; j <= aim; j++) {dp[N][j] = Integer.MAX_VALUE;}// 这三层for循环,时间复杂度为O(货币种数 * aim * 每种货币的平均张数)for (int index = N - 1; index >= 0; index--) {for (int rest = 0; rest <= aim; rest++) {dp[index][rest] = dp[index + 1][rest];for (int zhang = 1; zhang * coins[index] <= aim && zhang <= zhangs[index]; zhang++) {if (rest - zhang * coins[index] >= 0&& dp[index + 1][rest - zhang * coins[index]] != Integer.MAX_VALUE) {dp[index][rest] = Math.min(dp[index][rest], zhang + dp[index + 1][rest - zhang * coins[index]]);}}}}return dp[0][aim];}// dp3时间复杂度为:O(arr长度) + O(货币种数 * aim)// 优化需要用到窗口内最小值的更新结构public static int dp3(int[] arr, int aim) {if (aim == 0) {return 0;}// 得到info时间复杂度O(arr长度)Info info = getInfo(arr);int[] c = info.coins;int[] z = info.zhangs;int N = c.length;int[][] dp = new int[N + 1][aim + 1];dp[N][0] = 0;for (int j = 1; j <= aim; j++) {dp[N][j] = Integer.MAX_VALUE;}// 虽然是嵌套了很多循环,但是时间复杂度为O(货币种数 * aim)// 因为用了窗口内最小值的更新结构for (int i = N - 1; i >= 0; i--) {for (int mod = 0; mod < Math.min(aim + 1, c[i]); mod++) {// 当前面值 X// mod  mod + x   mod + 2*x   mod + 3 * xLinkedList<Integer> w = new LinkedList<>();w.add(mod);dp[i][mod] = dp[i + 1][mod];for (int r = mod + c[i]; r <= aim; r += c[i]) {while (!w.isEmpty() && (dp[i + 1][w.peekLast()] == Integer.MAX_VALUE|| dp[i + 1][w.peekLast()] + compensate(w.peekLast(), r, c[i]) >= dp[i + 1][r])) {w.pollLast();}w.addLast(r);int overdue = r - c[i] * (z[i] + 1);if (w.peekFirst() == overdue) {w.pollFirst();}dp[i][r] = dp[i + 1][w.peekFirst()] + compensate(w.peekFirst(), r, c[i]);}}}return dp[0][aim];}public static int compensate(int pre, int cur, int coin) {return (cur - pre) / coin;}// 为了测试public static int[] randomArray(int N, int maxValue) {int[] arr = new int[N];for (int i = 0; i < N; i++) {arr[i] = (int) (Math.random() * maxValue) + 1;}return arr;}// 为了测试public static void printArray(int[] arr) {for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}System.out.println();}// 为了测试public static void main(String[] args) {int maxLen = 20;int maxValue = 30;int testTime = 300000;System.out.println("功能测试开始");for (int i = 0; i < testTime; i++) {int N = (int) (Math.random() * maxLen);int[] arr = randomArray(N, maxValue);int aim = (int) (Math.random() * maxValue);int ans1 = minCoins(arr, aim);int ans2 = dp1(arr, aim);int ans3 = dp2(arr, aim);int ans4 = dp3(arr, aim);if (ans1 != ans2 || ans3 != ans4 || ans1 != ans3) {System.out.println("Oops!");printArray(arr);System.out.println(aim);System.out.println(ans1);System.out.println(ans2);System.out.println(ans3);System.out.println(ans4);break;}}System.out.println("功能测试结束");System.out.println("==========");int aim = 0;int[] arr = null;long start;long end;int ans2;int ans3;System.out.println("性能测试开始");maxLen = 30000;maxValue = 20;aim = 60000;arr = randomArray(maxLen, maxValue);start = System.currentTimeMillis();ans2 = dp2(arr, aim);end = System.currentTimeMillis();System.out.println("dp2答案 : " + ans2 + ", dp2运行时间 : " + (end - start) + " ms");start = System.currentTimeMillis();ans3 = dp3(arr, aim);end = System.currentTimeMillis();System.out.println("dp3答案 : " + ans3 + ", dp3运行时间 : " + (end - start) + " ms");System.out.println("性能测试结束");System.out.println("===========");System.out.println("货币大量重复出现情况下,");System.out.println("大数据量测试dp3开始");maxLen = 20000000;aim = 10000;maxValue = 10000;arr = randomArray(maxLen, maxValue);start = System.currentTimeMillis();ans3 = dp3(arr, aim);end = System.currentTimeMillis();System.out.println("dp3运行时间 : " + (end - start) + " ms");System.out.println("大数据量测试dp3结束");System.out.println("===========");System.out.println("当货币很少出现重复,dp2比dp3有常数时间优势");System.out.println("当货币大量出现重复,dp3时间复杂度明显优于dp2");System.out.println("dp3的优化用到了窗口内最小值的更新结构");}}

相关文章:

算法拾遗二十七之窗口最大值或最小值的更新结构

算法拾遗二十七之窗口最大值或最小值的更新结构滑动窗口题目一题目二题目三题目四滑动窗口 第一种&#xff1a;R&#xff0c;R右动&#xff0c;数会从右侧进窗口 第二种&#xff1a;L&#xff0c;L右动&#xff0c;数从左侧出窗口 题目一 arr是N&#xff0c;窗口大小为W&…...

【带你搞定第二、三、四层交换机】

​ 01 第二层交换机 OSI参考模型的第二层叫做数据链路层&#xff0c;第二层交换机通过链路层中的MAC地址实现不同端口间的数据交换。 第二层交换机主要功能&#xff0c;就包括物理编址、错误校验、帧序列以及数据流控制。 因为这是最基本的交换技术产品&#xff0c;目前桌面…...

C++基础了解-22-C++ 重载运算符和重载函数

C 重载运算符和重载函数 一、C 重载运算符和重载函数 C 允许在同一作用域中的某个函数和运算符指定多个定义&#xff0c;分别称为函数重载和运算符重载。 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明&#xff0c;但是它们的参数列表和定义…...

BatchNormalization

目录 Covariate Shift Internal Covariate Shift BatchNormalization &#xff31;1:BN的原理 Q2:BN的作用 Q3:BN的缺陷 Q4&#xff1a;BN的均值、方差的计算维度 Q5&#xff1a;BN在训练和测试时有什么区别 Q6&#xff1a;BN的代码实现 Covariate Shift 机器学习中&a…...

vue 中安装插件实现 rem 适配

vue 中实现 rem 适配vue 项目实现页面自适应&#xff0c;可以安装插件实现。 postcss-pxtorem 是 PostCSS 的插件&#xff0c;用于将像素单元生成 rem 单位。 autoprefixer 浏览器前缀处理插件。 amfe-flexible 可伸缩布局方案替代了原先的 lib-flexible 选用了当前众多浏览…...

Hadoop学习

1.分布式与集群 hosts文件&#xff1a; 域名映射文件 2.Linux常用命令 ls -a&#xff1a;查看当前目录下所有文件mkdir -p&#xff1a;如果没有对应的父文件夹&#xff0c;会自动创建rm -rf&#xff1a;-f&#xff1a;强制删除 -r&#xff1a;递归删除cp -r&#xff1a;复制文…...

Golang反射源码分析

在go的源码包及一些开源组件中&#xff0c;经常可以看到reflect反射包的使用&#xff0c;本文就与大家一起探讨go反射机制的原理、学习其实现源码 首先&#xff0c;了解一下反射的定义&#xff1a; 反射是指计算机程序能够在运行时&#xff0c;能够描述其自身状态或行为、调整…...

Qt之悬浮球菜单

一、概述 最近想做一个炫酷的悬浮式菜单&#xff0c;考虑到菜单展开和美观&#xff0c;所以考虑学习下Qt的动画系统和状态机内容&#xff0c;打开QtCreator的示例教程浏览了下&#xff0c;大致发现教程中2D Painting程序和Animated Tiles程序有所帮助&#xff0c;如下图所示&a…...

易优cms attribute 栏目属性列表

attribute 栏目属性列表 attribute 栏目属性列表 [基础用法] 标签&#xff1a;attribute 描述&#xff1a;获取栏目的属性列表&#xff0c;或者单独获取某个属性值。 用法&#xff1a; {eyou:attribute typeauto} {$attr.name}&#xff1a;{$attr.value} {/eyou:attri…...

表格中的table-layout属性讲解

表格中的table-layout属性讲解 定义和用法 tableLayout 属性用来显示表格单元格、行、列的算法规则。 table-layout有三个属性值&#xff1a;auto、fixed、inherit。 fixed&#xff1a;固定表格布局 固定表格布局与自动表格布局相比&#xff0c;允许浏览器更快地对表格进行布…...

【MFA】windows环境下,使用Montreal-Forced-Aligner训练并对齐音频

文章目录一、安装MFA1.安装anaconda2.创建并进入虚拟环境3.安装pyTorch二、训练新的声学模型1.确保数据集的格式正确2.训练声音模型-导出模型和对齐文件3.报错处理1.遇到类似&#xff1a; Command ‘[‘createdb’,–host‘ ’, ‘Librispeech’]’ returned non-zero exit sta…...

C语言实验小项目实例源码大全订票信息管理系统贪吃蛇图书商品管理网络通信等

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;c项目 获取完整源码源文件视频讲解环境资源包文档说明等 包括火车订票系统、学生个人消费管理系统、超级万年历、学生信息管理系统、网络通信编程、商品管理系统、通讯录管理系统、企业员工管理系统、贪吃蛇游戏、图书管理…...

电脑图片损坏是怎么回事

电脑图片损坏是怎么回事&#xff1f;对于经常使用电脑的我们&#xff0c;总是会下载各种各样的图片&#xff0c;用于平时的使用中。但难免会遇到莫名其妙就损坏的图片文件&#xff0c;一旦发生这种情况&#xff0c;要如何才能修复损坏的图片呢?下面小编为大家带来常用的修复方…...

【论文研读】无人机飞行模拟仿真平台设计

无人机飞行模拟仿真平台设计 摘要&#xff1a; 为提高飞行控制算法的研发效率,降低研发成本,基于数字孪生技术设计一个无人机硬件在环飞行模拟仿真平台。从几何、物理和行为3个方面研究无人机数字模型构建方法,将物理实体以数字化方式呈现。设计一种多元融合场景建模法,依据属…...

【算法题】2379. 得到 K 个黑块的最少涂色次数

插&#xff1a; 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家一起学习鸭~~~ 题目&#xff1a; 给你一个长度为 n 下标从 0 开始的…...

DJ1-3 计算机网络和因特网

目录 一、物理介质 1. 双绞线 2. 同轴电缆 3. 光纤线缆 4. 无线电磁波 二、端系统上的 Internet 服务 1. 面向连接的服务 TCP&#xff08;Transmission Control Protocol&#xff09; 2. 无连接的服务 UDP&#xff08;User Datagram Protocol&#xff09; TCP 和 UD…...

Git学习笔记(六)-标签管理

发布一个版本时&#xff0c;我们通常先在版本库中打一个标签&#xff08;tag&#xff09;&#xff0c;这样&#xff0c;就唯一确定了打标签时刻的版本。将来无论什么时候&#xff0c;取某个标签的版本&#xff0c;就是把那个打标签的时刻的历史版本取出来。所以&#xff0c;标签…...

Semaphore 源码解读

一、Semaphore Semaphore 通过设置一个固定数值的信号量&#xff0c;并发时线程通过 acquire() 获取一个信号量&#xff0c;如果能成功获得则可以继续执行&#xff0c;否则将阻塞等待&#xff0c;当某个线程使用 release() 释放一个信号量时&#xff0c;被阻塞的线程则可以被唤…...

RZ/G2L工业核心板U盘读写速率测试

1. 测试对象HD-G2L-IOT基于HD-G2L-CORE工业级核心板设计&#xff0c;双路千兆网口、双路CAN-bus、2路RS-232、2路RS-485、DSI、LCD、4G/5G、WiFi、CSI摄像头接口等&#xff0c;接口丰富&#xff0c;适用于工业现场应用需求&#xff0c;亦方便用户评估核心板及CPU的性能。HD-G2L…...

《SQL与数据库基础》18. MySQL管理

SQL - MySQL管理MySQL管理系统数据库常用工具mysqlmysqladminmysqlbinlogmysqlshowmysqldumpmysqlimportsource本文以 MySQL 为例 MySQL管理 系统数据库 Mysql数据库安装完成后&#xff0c;自带了以下四个数据库&#xff0c;具体作用如下&#xff1a; 数据库含义mysql存储My…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...