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

代码随想录 贪心算法-难度题目-区间问题

目录

55.跳跃游戏 

45.跳跃游戏||

452.用最少数量的箭引爆气球

435.无重叠区间 

763.划分字母区间

56.合并区间 


55.跳跃游戏 

55. 跳跃游戏

中等

给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。

示例 1:

输入:nums = [2,3,1,1,4]
输出:true
解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。

示例 2:

输入:nums = [3,2,1,0,4]
输出:false
解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。

提示:

  • 1 <= nums.length <= 104
  • 0 <= nums[i] <= 105

运用覆盖位置来求解此题,每到一个位置都去尝试更新cover的值(如果走此步比之前的覆盖位置更大的情况下),如果覆盖位置覆盖到了最后一个数,,表示可以从起点跳到终点,返回true。遍历的结束位置是覆盖位置的最大点,如果此时cover还没有覆盖到最后一个数,说明不能从起点跳到终点。

class Solution {  public boolean canJump(int[] nums) {  // cover变量用来记录当前能够到达的最远位置  int cover = 0;  // 如果数组只有一个元素,则显然可以从该位置跳到终点(自己),返回true  if(nums.length == 1){  return true;  }  // 遍历数组,直到到达当前能够到达的最远位置cover  for(int i = 0; i <= cover; i++){  // 更新当前能够到达的最远位置,取当前位置能够到达的最远位置i + nums[i]和当前已知的最远位置cover中的较大值  cover = Math.max(cover, i + nums[i]);  // 如果当前能够到达的最远位置cover已经大于等于数组长度减一(即已经能够到达或超过数组的最后一个位置),  // 则表示可以从起点跳到终点,返回true  if(cover >= nums.length - 1){  return true;  }  }  // 如果遍历完数组后仍然没有找到能够到达终点的路径,则返回false  return false;  }  
}

45.跳跃游戏||

45. 跳跃游戏 II

中等

给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]

每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处:

  • 0 <= j <= nums[i] 
  • i + j < n

返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]

示例 1:

输入: nums = [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。

示例 2:

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

提示:

  • 1 <= nums.length <= 104
  • 0 <= nums[i] <= 1000
  • 题目保证可以到达 nums[n-1]

这里有nowcover和nextMaxCover两个变量,分别代表这一步能覆盖到的最远地点和下一步能覆盖到的最远地点 ,如果当前位置已经到了这一步能覆盖到的最远地点,跳出这一步,然后一步的nowcover换为在上一步中求得的nextMaxCover,继续向后遍历,如果nextMaxCover覆盖到了最后一个值,跳出这一步,到达最后一个值

class Solution {  public int jump(int[] nums) {  // 如果数组为空或者只有一个元素,则不需要跳跃,直接返回0  if(nums.length < 2 || nums == null){  return 0;  }  // 跳跃次数  int count = 0;  // 当前覆盖的最远位置  int nowCover = 0;  // 下一次跳跃能够覆盖的最远位置  int nextMaxCover = 0;  // 遍历当前覆盖位置中的每个位置  for(int i = 0; i <= nowCover; i++){  // 更新下一次跳跃能够覆盖的最远位置  nextMaxCover = Math.max(i + nums[i], nextMaxCover);  // 如果下一次跳跃能够直接到达数组末尾,则增加一次跳跃并跳出循环  if(nextMaxCover >= nums.length - 1){  count++;  break;  }  // 如果当前位置到达了当前能够覆盖的最远位置,说明需要进行一次跳跃  if(i == nowCover){  count++;  // 更新当前能够覆盖的最远位置为下一次跳跃能够覆盖的最远位置  nowCover = nextMaxCover;  }  }  // 返回跳跃次数  return count;  }  
}

452.用最少数量的箭引爆气球

452. 用最少数量的箭引爆气球

中等

有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points ,其中points[i] = [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。

一支弓箭可以沿着 x 轴从不同点 完全垂直 地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstartxend, 且满足  xstart ≤ x ≤ xend,则该气球会被 引爆 。可以射出的弓箭的数量 没有限制 。 弓箭一旦被射出之后,可以无限地前进。

给你一个数组 points ,返回引爆所有气球所必须射出的 最小 弓箭数 

示例 1:

输入:points = [[10,16],[2,8],[1,6],[7,12]]
输出:2
解释:气球可以用2支箭来爆破:
-在x = 6处射出箭,击破气球[2,8]和[1,6]。
-在x = 11处发射箭,击破气球[10,16]和[7,12]。

示例 2:

输入:points = [[1,2],[3,4],[5,6],[7,8]]
输出:4
解释:每个气球需要射出一支箭,总共需要4支箭。

示例 3:

输入:points = [[1,2],[2,3],[3,4],[4,5]]
输出:2
解释:气球可以用2支箭来爆破:
- 在x = 2处发射箭,击破气球[1,2]和[2,3]。
- 在x = 4处射出箭,击破气球[3,4]和[4,5]。

提示:

  • 1 <= points.length <= 105
  • points[i].length == 2
  • -231 <= xstart < xend <= 231 - 1

思路:用最少的箭射最多的气球

从第二个气球开始,因为之前已经排过序,直接比较第二个气球的最左侧和第一个气球的最右侧,如果第二个气球的最左侧更大,说明两个气球没有交集,需要一支箭来射第二个气球。否则第二个气球和第一个气球有交集,可用同一根箭射,因为第二支箭的最左侧一定大于第一支箭的最左侧,选择第一个气球和第二个气球的最后侧中的最小值,赋值给第二个气球,得到第二个气球的范围即为第一二个气球的交集,之后的第三个气球如果和第二个气球现在的范围有交集,则说明前三个气球和前两个气球可以用同一支箭射,以此类推。

class Solution {  // 方法:找到射穿所有气球所需的最少箭数量  public int findMinArrowShots(int[][] points) {  // 根据每个气球的水平位置x进行排序,如果x相同,则保持原顺序  Arrays.sort(points, (a, b) -> Integer.compare(a[0], b[0]));  // 初始化箭的数量为1,因为至少需要一支箭来射穿第一个气球  int count = 1;  // 遍历所有气球(从第二个开始,因为第一个已经有一支箭了)  for(int i = 1; i < points.length; i++){  // 如果当前气球的水平位置最左侧大于前一个气球的水平位置最右侧if(points[i][0] > points[i-1][1]){  // 则需要增加一支箭来射穿当前气球  count++;  }else{  // 如果当前气球与前一个气球有重叠 // 则更新当前气球的垂直位置y为两个气球中更小的y值  // 这样做是为了保证在后续的迭代中,如果还有气球在这个垂直范围内,它们也可以被这支箭射穿  points[i][1] = Math.min(points[i][1],points[i - 1][1]);  }  }  // 返回所需的箭的数量  return count;  }  
}

435.无重叠区间 

435. 无重叠区间

中等

给定一个区间的集合 intervals ,其中 intervals[i] = [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 

示例 1:

输入: intervals = [[1,2],[2,3],[3,4],[1,3]]
输出: 1
解释: 移除 [1,3] 后,剩下的区间没有重叠。

示例 2:

输入: intervals = [ [1,2], [1,2], [1,2] ]
输出: 2
解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。

示例 3:

输入: intervals = [ [1,2], [2,3] ]
输出: 0
解释: 你不需要移除任何区间,因为它们已经是无重叠的了。

提示:

  • 1 <= intervals.length <= 105
  • intervals[i].length == 2
  • -5 * 104 <= starti < endi <= 5 * 104

思路: 首先对数组进行排序,从第二个开始遍历区间,如果区间和前一个区间有重合,这个时候我们要考虑删除该区间还是前一个区间,为了尽可能避免和后面的区间重合,我们留下结束位置更小的区间以求和下一个区间的开始位置保持距离。

class Solution {  // 方法:删除尽可能多的重叠区间,返回删除的数量  public int eraseOverlapIntervals(int[][] intervals) {  // 根据区间的起始位置进行排序,如果起始位置相同,则保持原顺序  Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0]));  // 初始化计数器,记录重叠区间的数量  int count = 0;  // 遍历所有区间(从第二个区间开始,因为第一个区间不需要比较)  for (int i = 1; i < intervals.length; i++) {  // 如果当前区间的起始位置小于前一个区间的结束位置,说明有重叠  if (intervals[i][0] < intervals[i - 1][1]) {  // 更新当前区间的结束位置为两个区间结束位置的较小值(这里相当于删除结束位置较大的区间) // 这样做是为了保留和下一个区间尽可能远的距离,避免和下一个区间重合intervals[i][1] = Math.min(intervals[i][1], intervals[i - 1][1]);  // 重叠区间数量加1  count++;  }  }  // 返回删除的重叠区间的数量  return count;  }  
}

763.划分字母区间

763. 划分字母区间

中等

提示

给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。

注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s 。

返回一个表示每个字符串片段的长度的列表。

示例 1:

输入:s = "ababcbacadefegdehijhklij"
输出:[9,7,8]
解释:
划分结果为 "ababcbaca"、"defegde"、"hijhklij" 。
每个字母最多出现在一个片段中。
像 "ababcbacadefegde", "hijhklij" 这样的划分是错误的,因为划分的片段数较少。 

示例 2:

输入:s = "eccbbbbdec"
输出:[10]

提示:

  • 1 <= s.length <= 500
  • s 仅由小写英文字母组成

先遍历一遍数组,得到每一个字母的最后出现位置。

再次遍历数组,记录当前区间中所有字母的最后出现位置的最大值,当索引等于该最大值位置时,说明当前区间中的所有字母在后边的数组中都不会出现,故得到一个区间,将长度存入结果集合中,并记录该区间的最后位置用来计算下一个区间的长度

class Solution {  // 方法:将字符串划分为若干个子串,使得每个子串中的所有字符都属于同一个字符集  public List<Integer> partitionLabels(String s) {  // 用于存储最终结果的列表,每个元素代表一个分区的长度  List<Integer> result = new ArrayList<>();  // 用于存储每个字符在字符串中最后出现的位置的数组  int[] charLastIndex = new int[27]; // 因为字符a到z共26个,再加上字符'a'的ASCII码值,所以数组大小为27  // 将字符串转换为字符数组,方便后续遍历  char[] sChar = s.toCharArray();  // 遍历字符串的每个字符,记录它们最后一次出现的位置  for (int i = 0; i < sChar.length; i++) {  charLastIndex[sChar[i] - 'a'] = i;  }  // 当前遍历到的字符在字符串中最后出现的位置  int nowLastIndex = 0;  // 上一个分区的结束位置//相当于第一个区间之前的区间在index为-1的时候结束  int lastEndIndex = -1;  // 遍历字符串的每个字符  for (int i = 0; i < sChar.length; i++) {  // 更新当前遍历到的字符集中所有字符在字符串中最后出现的位置  nowLastIndex = Math.max(nowLastIndex, charLastIndex[sChar[i] - 'a']);  // 如果当前位置是当前字符集中所有字符最后出现的位置  if (i == nowLastIndex) {  // 将当前分区长度(当前位置与上一个分区结束位置之差)加入结果列表  result.add(i - lastEndIndex);  // 更新上一个分区的结束位置为当前位置  lastEndIndex = i;  }  }  // 返回分区长度的列表  return result;  }  
}

56.合并区间 

56. 合并区间

中等

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

示例 1:

输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

示例 2:

输入:intervals = [[1,4],[4,5]]
输出:[[1,5]]
解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。

提示:

  • 1 <= intervals.length <= 104
  • intervals[i].length == 2
  • 0 <= starti <= endi <= 104

 思路:首先对数组排序。从第二个区间开始遍历,如果和前一个区间有交集,就将该区间更新为与前一个区间的并集。如果和前一个区间没有交集,则前一个区间为合并好的区间,放入结果集合中,如果遍历到最后一个区间,直接将最后一个区间放入结果数组中。

class Solution {  public int[][] merge(int[][] intervals) {  // 根据区间的起始位置对数组进行排序  Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0]));  // 用于存储合并后结果的列表  List<int[]> result = new ArrayList<>();  // 如果区间数组为空或只有一个区间,则无需合并,直接返回原数组  if (intervals.length < 2 || intervals == null) {  return intervals;  }  // 从第二个区间开始遍历(第一个区间不需要比较)  for (int i = 1; i < intervals.length; i++) {  // 如果当前区间的起始位置大于前一个区间的结束位置,说明两个区间没有重叠  if (intervals[i][0] > intervals[i - 1][1]) {  // 将前一个区间添加到结果列表中  result.add(intervals[i - 1]);  } else {  // 两个区间有重叠,合并这两个区间  // 更新当前区间的起始位置为两个区间中较小的起始位置  intervals[i][0] = intervals[i - 1][0];  // 更新当前区间的结束位置为两个区间中较大的结束位置  intervals[i][1] = Math.max(intervals[i][1], intervals[i - 1][1]);  }  // 如果是遍历的最后一个区间,则需要将其添加到结果列表中  // 因为如果两个区间有重叠,它们会在下一个循环迭代中被合并,当前区间不会在前面的迭代中被添加到结果列表  if (i == intervals.length - 1) {  result.add(intervals[i]);  }  }  // 将结果列表转换为数组并返回  return result.toArray(new int[result.size()][]);  }  
}

相关文章:

代码随想录 贪心算法-难度题目-区间问题

目录 55.跳跃游戏 45.跳跃游戏|| 452.用最少数量的箭引爆气球 435.无重叠区间 763.划分字母区间 56.合并区间 55.跳跃游戏 55. 跳跃游戏 中等 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大…...

地理数据 vs. 3D数据

在表示我们周围的物理世界时&#xff0c;地理空间数据和 3D 建筑数据是两个最常见的选择。 他们在各个行业和项目中发挥着至关重要的作用。 从构建数字孪生到可视化城市景观和创建沉浸式应用程序。 尽管地理空间和 3D 建筑数据有相似之处&#xff0c;但它们不可互换。 虽然地…...

Redis删除

一、del命令 del命令是Redis提供的一个常规的删除键的命令。它的语法如下&#xff1a; DEL key [key …] 其中&#xff0c;key是要删除的键名。可以指定多个键名&#xff0c;删除多个键。如果指定的键不存在&#xff0c;则会被忽略。 del命令会直接删除指定的键以及与之相关联…...

力扣细节题:字符串中的最大奇数

奇数只要找到第一位是奇数的即可&#xff0c;不是找单个数字 //即从最低位开始&#xff0c;找到第一位为奇数的位 //然后之前的就是需要的数字char * largestOddNumber(char * num){int i strlen(num) - 1;while(i > 0){if((num[i] - 0) % 2 1)break;i--;}//先找到低位开…...

Unity PS5开发 天坑篇 之 申请开发者与硬件部署01

腾了好几天终于把PS5开发机调试部署成功, 希望能帮到国内的开发者, 主机游戏PlayStation/Nintendo Switch都是比较闭塞的&#xff0c;开发者账号是必须的。 开发环境有两个部分&#xff0c;一是DEV Kit 开发机, TEST Kit测试机两部分组成&#xff0c;二是Unity的支持库(安装后…...

十四届蓝桥杯省赛Java B组 合并区域

就是将两个矩阵进行拼接&#xff0c;两矩阵可以旋转90 180 270 度。 因为数据比较小&#xff0c;所以这基本上就是一个大的枚举模拟加搜索&#xff0c;直接暴力求解。 import java.io.*; import java.util.*;public class Main{static int n;static int N 101;static int mo…...

SpringBoot高级

1.自动配置-Condition Condition是Spring4.0后引入的条件化配置接口&#xff0c;通过实现Condition接口可以完成有条件的加载相应的Bean 进入 SpringBoot 启动类&#xff0c;点击进入 run() 可以看到这个方法是有返回值的&#xff0c;返回值为 ConfigurableApplicationConte…...

机试:偶数分解

题目描述: 代码示例: #include <bits/stdc.h> using namespace std; int main(){ // 算法思想1:遍历小于该偶数的所有素数,存入数组中,遍历数组找出两个数之和等于偶数的数int n;cout << "输入样例" << endl;cin >> n;int nums[n];int k …...

一周学会Django5 Python Web开发-Jinja3模版引擎-安装与配置

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计35条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…...

python前端开发

前端开发 快速网站开发 from flask import Flask appFlask(__name__) #创建网址/show/info 和函数index的对应关系&#xff0c; #访问网站&#xff0c;执行index()函数 app.route("/show/info") def index():return "中国联通" if __name__"__main_…...

web学习笔记(三十三)

目录 1.严格模式 1.1严格模式的概念&#xff1a; 1.2严格模式在语义上更改的地方&#xff1a; 1.3如何开启严格模式 1.4严格模式应用上的变化 2.原型链 1.严格模式 1.1严格模式的概念&#xff1a; 严格模式有点像es5向es6过渡而产生的一种模式&#xff0c;因为es6的语法…...

flask库

文章目录 flask库1. 基本使用2. 路由路径和路由参数3. 请求跳转和请求参数4. 模板渲染1. 模板变量2. 过滤器3. 测试器 5. 钩子函数与响应对象 flask库 flask是python编写的轻量级框架&#xff0c;提供Werkzeug&#xff08;WSGI工具集&#xff09;和jinjia2&#xff08;渲染模板…...

专业无网设备如何远程运维?向日葵远程控制能源场景案例解析

清洁能源领域&#xff0c;拥有庞大的上下游产业链&#xff0c;涉及的相关工业设备门类多、技术覆盖全、行业应用广。在这一领域内&#xff0c;相关专业设备的供应商的核心竞争力除了本身产品的技术能力之外&#xff0c;服务也是重要的一环。 某企业作为致力于节能环保方向的气…...

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的稻田虫害检测系统详解(深度学习+Python代码+UI界面+训练数据集)

摘要&#xff1a;本篇文章深入探讨了如何利用深度学习技术开发一个用于检测稻田虫害的系统&#xff0c;并且分享了完整的实现过程和资源代码下载。该系统采用了当前的YOLOv8、YOLOv7、YOLOv6、YOLOv5算法&#xff0c;对其进行了性能对比&#xff0c;包括mAP、F1 Score等关键指标…...

实现upt下客户端用tftp文件传输协议编写客户端发送下载文件

#include <myhead.h> #define SEP_IP #define SEP_PORT int main(int argc, const char *argv[]) {//创建套接字if(int crdsocket(AF_INET,SOCK-DGRAM)-1);{perror("socket error");return -1;}printf("创建成功\n");//填充地址struct sockaddr_in s…...

什么软件可以改ip地址

修改ip地址的软件有哪些&#xff0c;什么软件可以切换电脑手机的ip地址想必很多朋友都在寻找类似的软件&#xff0c;也想知道其中的答案&#xff0c;也能提高自己工作的效率。 经过小编在互联网摸爬滚打这些年&#xff0c;测试认证和整理后&#xff0c;发现一款名叫深度IP转换…...

C#,文字排版的折行问题(Word-wrap problem)的算法与源代码

1、英文的折行问题 给定一个单词序列&#xff0c;以及一行中可以输入的字符数限制&#xff08;线宽&#xff09;。 在给定的顺序中放置换行符&#xff0c;以便打印整齐。 假设每个单词的长度小于线宽。 像MS word这样的文字处理程序负责放置换行符。 这个想法是要有平衡的线条。…...

VUE+VScode+elementUI开发环境

0.vue官方文档 你正在阅读的是 Vue 3 的文档&#xff01; 1.前端准备阶段 VUEVScodeelementUI开发环境 2.Vue外部组件 element-ui 3.angular外部组件 angular-ui 4.教学视频 尚学堂b站视频 5.教学视频配套文档 D:\BaiduNetdiskDownload\025【尚学堂】全新2022版WEB前端为初学者…...

第十四届蓝桥杯省赛真题 Java A 组【原卷】

文章目录 发现宝藏【考生须知】试题 A \mathrm{A} A : 特殊日期试题 B: 与或异或试题 C : \mathrm{C}: C: 平均试题 D: 棋盘试题 E : \mathrm{E}: E: 互质数的个数试题 F: 阶乘的和试题 G: 小蓝的旅行计划试题 H: 太阳试题 I: 高塔试题 J \mathrm{J} J : 反异或 01 串 发现…...

可视化展示与交互编辑:探索3D Web轻量化平台HOOPS WEB Platform在BIM中的新可能性

随着数字技术的飞速发展&#xff0c;建筑行业也在不断迈向数字化转型的道路。在这个过程中&#xff0c;BIM&#xff08;Building Information Modeling&#xff0c;建筑信息模型&#xff09;技术已经成为建筑设计、施工和管理领域中的一项重要工具。 而在BIM的应用中&#xff…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例

目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码&#xff1a;冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...

背包问题双雄:01 背包与完全背包详解(Java 实现)

一、背包问题概述 背包问题是动态规划领域的经典问题&#xff0c;其核心在于如何在有限容量的背包中选择物品&#xff0c;使得总价值最大化。根据物品选择规则的不同&#xff0c;主要分为两类&#xff1a; 01 背包&#xff1a;每件物品最多选 1 次&#xff08;选或不选&#…...