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

基础暴力算法

线性枚举

线性枚举(Linear Enumeration)是一种暴力枚举的方法,它逐一检查每个可能的解,适用于搜索和枚举问题。

其核心思路是:对问题的所有可能情况逐一进行遍历,并针对每种情况判断是否满足条件,从而得到解答。

线性枚举是一种顺序搜索算法,从线性表的第一个元素开始,根据特定的判断条件,做出相应的行为。变种比较多,最常见的就是求最值、求和等等。比如:

  1. 求最大值,伪代码

    最大值 = 非常小的数
    for 当前元素 in 给定的线性表:if 当前元素 > 最大值:最大值 = 当前元素
    返回 最大值 的值
    
  2. 求和,伪代码

    求和 = 0
    for 当前元素 in 给定的线性表:求和 = 求和 + 当前元素
    返回 求和 的值
    

时间复杂度

线性枚举需要遍历列表中的每个元素。

线性枚举的时间复杂度为 O (nm),其中 n 是线性表的长度,m 是每次操作的量级。

对于求最大值和求和来说,因为操作比较简单,所以 m 为 1,则整体的时间复杂度是 O (n) 的。

线性枚举是一种简单而有效的算法思想,它可以用于解决许多基本的算法问题。虽然它的时间复杂度较高,但在处理小型数据集时仍然是一种常用的算法。

线性枚举的优化

对于线性枚举,有很多优化算法:

  1. 二分查找:如果线性表已经排序,可以使用二分搜索来提高搜索效率。
  2. 哈希表:可以使用哈希表来存储已经搜索过的元素,避免重复搜索。
  3. 前缀和:可以存储前 i 个元素的和,避免重复计算。
  4. 双指针:可以从两头开始搜索,提升搜索效率。

实战

存在连续三个奇数的数组

力扣链接

给你一个整数数组 arr,请你判断数组中是否存在连续三个元素都是奇数的情况:如果存在,请返回 true ;否则,返回 false

示例 1:

输入:arr = [2,6,4,1]
输出:false
解释:不存在连续三个元素都是奇数的情况。

示例 2:

输入:arr = [1,2,34,3,4,5,7,23,12]
输出:true
解释:存在连续三个元素都是奇数的情况,即 [5,7,23] 。

提示:

  • 1 <= arr.length <= 1000
  • 1 <= arr[i] <= 1000
题解
class Solution {
public:bool threeConsecutiveOdds(vector<int>& arr) {int count = 0; // 计数器:记录连续的奇数个数for (int i = 0; i < arr.size(); ++i){	if (arr[i] % 2 != 0){ // 取模判断是否为奇数count ++;if (count == 3){return true; // 当计数器为3时直接返回}}else{count = 0; // 遇到偶数重置计数器}}return false;}
};
官方题解
class Solution {
public:bool threeConsecutiveOdds(vector<int>& arr) {int n = arr.size();for (int i = 0; i <= n - 3; ++i) {if ((arr[i] & 1) && (arr[i + 1] & 1) && (arr[i + 2] & 1)) {return true;}}return false;}
};
Note
  • 判断奇数可以用按位与运算符 &arr[i] & 1:如果 arr[i] 是奇数,则其最低位是 1,因此 arr[i] & 1 结果为 1(真);如果是偶数,则结果为 0(假)。

最大连续 1 的个数

给定一个二进制数组 nums ,计算其中最大连续 1 的个数。

示例 1:

输入:nums = [1,1,0,1,1,1]
输出:3
解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.

示例 2:

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

提示:

  • 1 <= nums.length <= 105
  • nums[i] 不是 0 就是 1.
官方题解
class Solution {
public:int findMaxConsecutiveOnes(vector<int>& nums) {int maxCount = 0, count = 0;int n = nums.size();for (int i = 0; i < n; i++) {if (nums[i] == 1) {count++;} else {maxCount = max(maxCount, count);	// 刷新最大计数count = 0;}}// 如果数组末位为1不会触发刷新最大计数,需要手动刷新一次最大计数maxCount = max(maxCount, count);return maxCount;}
};

有序数组中的单一元素

给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。

请你找出并返回只出现一次的那个数。

你设计的解决方案必须满足 O(log n) 时间复杂度和 O(1) 空间复杂度。

示例 1:

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

示例 2:

输入: nums =  [3,3,7,7,10,11,11]
输出: 10
题解

暴力求解很简单,但时间复杂度不满足要求,没想出标准答案。数组有序,复杂度要求为 O (logn),就是在暗示用二分法。

class Solution {
public:int singleNonDuplicate(vector<int>& nums) {// 遍历前n-1个元素for (int i = 0; i < nums.size()-1; i += 2) {if (nums[i] != nums[i+1]){return nums[i];}}// 默认返回数组最后一个元素return nums.back();}
};
官方题解
class Solution {
public:int singleNonDuplicate(vector<int>& nums) {int low = 0, high = nums.size() - 1;while (low < high) {int mid = (high - low) / 2 + low;if (nums[mid] == nums[mid ^ 1]) {low = mid + 1;} else {high = mid;}}return nums[low];}
};

先找规律:

(0,1),2,(3,4),(5,6),(7,8) // 索引
(1,1),2,(3,3),(4,4),(8,8) // 数组

数组有序,且两两为一对。可以观察到,在单身狗 2 的左侧,每一对相同元素的前一个元素的索引都是偶数(规律 1), 比如 0;直到单身狗打破规律,因为它是单独的一个,没有人和它一对,所以从这个单身狗以后的右侧,每一对相同元素的前一个元素的索引就变成了奇数(规律 2),比如 3,5,7。

假设要找的数的索引为 x,我们把符合规律 1 的称为”正常的“,这些数全在 x 的左边,那么”不正常的“就是符合规律 2 的,这些数全在 x 的右边。

使用二分查找,目标是找到 x:

  • 如果 mid 是偶数,就比较 nums[mid]nums[mid+1],如果相等,说明是正常的符合规律 1,x 在 mid 的右边,此时更新 low=mid;如果不相等,说明规律 1 被打破,那么 x 就在 mid 的左边,此时更新 high=mid。

  • 如果 mid 是奇数,就比较 nums[mid-1]nums[mid],如果相等,说明是正常的符合规律 1,x 在 mid 的右边,此时更新 low=mid;如果不相等,说明规律 1 被打破,那么 x 就在 mid 的左边,此时更新 high=mid。

这样,不断缩小区间,直到 low=high,就是 x 的索引。

细节

官方题解中没有分奇偶数考虑比较的数,而是使用了 nums[mid] == nums[mid ^ 1]。按位异或运算符 ^ 是一个二元运算符,它对两个操作数的每一位进行比较。如果两个对应的位不同,则结果为 1;如果相同,则结果为 0

  1. mid 是偶数时,mid + 1 = mid ^ 1

    • 如果 mid 是偶数,它的二进制表示的最低位是 0

    • mid ^ 1 会将最低位从 0 变成 1,而其他位保持不变。

    • 这等价于将 mid 加上 1

  2. mid 是奇数时,mid - 1 = mid ^ 1

    • 如果 mid 是奇数,它的二进制表示的最低位是 1
    • mid ^ 1 会将最低位从 1 变成 0,而其他位保持不变。
    • 这等价于将 mid 减去 1

模拟

前言

模拟算法是一类通过模仿自然现象或物理过程来解决复杂问题的计算方法。

模拟算法其实就是根据题目做,题目要求什么,就做什么。一些复杂的模拟题其实还是把一些简单的操作组合了一下,所以模拟题是最锻炼耐心的,也是训练编码能力的最好的暴力算法。

数据结构

​ 对于模拟题而言,最关键的其实是数据结构,看到一个问题,选择合适的数据结构,然后根据问题来实现对应的功能。模拟题的常见数据结构主要就是:数组、字符串、矩阵、链表、二叉树 等等。

1、基于数组

​ 利用数组的数据结构,根据题目要求,去实现算法,如:1920.基于排列构建数组、1389.按既定顺序创建目标数组、1603.设计停车系统、2149.按符号重排数组、2221.数组的三角和

2、基于字符串

​ 利用字符串的数据结构,根据题目要求,去实现算法,如:2011.执行操作后的变量值、2744.最大字符串配对数目、LCP 17.速算机器人、537.复数乘法

3、基于链表

​ 利用链表的数据结构,根据题目要求,去实现算法,如:2181.合并零之间的节点、1823.找出游戏的获胜者

4、基于矩阵

​ 利用矩阵的数据结构,根据题目要求,去实现算法,如:2120.执行所有后缀指令、1252.奇数值单元格的数目、832.翻转图像、657.机器人能否返回原点、289.生命游戏、59.螺旋矩阵 II、885.螺旋矩阵 III

5、基于栈

​ 利用栈的数据结构,如:1441.用栈操作构建数组

6、基于队列

​ 利用队列的数据结构,如:1700.无法吃午餐的学生数量

算法技巧

​ 模拟时一般会用到一些算法技巧,或者说混合算法,比如 排序、递归、迭代 等等。

1、排序

​ 排序后,干一件事情,如:950.按递增顺序显示卡牌

2、递归

​ 需要借助递归来实现,如:1688.比赛中的配对次数 、2169.得到 0 的操作数、258.各位相加

3、迭代

​ 不断迭代求解,其实就是利用 while 循环来实现功能,如:1860.增长的内存泄露、258.各位相加

实战

交换数字

交换数字

编写一个函数,不用临时变量,直接交换numbers = [a, b]ab的值。

示例:

输入: numbers = [1,2]
输出: [2,1]

提示:

  • numbers.length == 2
  • -2147483647 <= numbers[i] <= 2147483647
题解

不正确的解法:

class Solution {
public:vector<int> swapNumbers(vector<int>& numbers) {numbers[0] = numbers[1] - numbers[0];numbers[1] = numbers[1] - numbers[0];numbers[0] = numbers[1] + numbers[0];return numbers;}
};

最直接的想法就是使用加减法,通过记录两个数的和或者差来消除中间变量。可以通过绝大多数测试用例,但是有溢出风险,如果:

numbers = [-2147483647,2147483647]

对这两个数进行加减就会溢出,需要强转类型。

实际上这个题的考点在于按位异或^的巧用,异或即:相同为0,不同为1,那么一个数异或上它自己就是0,即:a ^ a = 0;

正确解法如下:

class Solution {
public:vector<int> swapNumbers(vector<int>& numbers) {numbers[0] = numbers[0] ^ numbers[1];numbers[1] = numbers[0] ^ numbers[1]; // 此时number[1] = number[0]numbers[0] = numbers[0] ^ numbers[1];return numbers;}
};
STEPnumbers[0]numbers[1]
1numbers[0] ^ numbers[1]numbers[1]
2numbers[0] ^ numbers[1]numbers[0] ^ (numbers[1] ^ numbers[1])= numbers[0]
3numbers[0] ^ numbers[1] ^ numbers[0] = numbers[1]numbers[0]

位1的个数

位1的个数

编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为 汉明重量).)。

提示:

  • 请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。
  • 在 Java 中,编译器使用 二进制补码 记法来表示有符号整数。因此,在上面的 示例 3 中,输入表示有符号整数 -3

示例 1:

输入:n = 11 (控制台输入 00000000000000000000000000001011)
输出:3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。

示例 2:

输入:n = 128 (控制台输入 00000000000000000000000010000000)
输出:1
解释:输入的二进制串 00000000000000000000000010000000 中,共有一位为 '1'。

示例 3:

输入:n = 4294967293 (控制台输入 11111111111111111111111111111101,部分语言中 n = -3)
输出:31
解释:输入的二进制串 11111111111111111111111111111101 中,共有 31 位为 '1'。

提示:

  • 输入必须是长度为 32二进制串
题解
解法一

和整数按位取值的思路一样,当n不为0时(不为0说明一定有1在),取出低位进行判断:

class Solution {
public:int hammingWeight(uint32_t n) {int count = 0;while (n > 0) {if (n % 2) count++;n = n / 2;	}return count;}
};
解法二

直接循环检查给定整数 n 的二进制位的每一位是否为 1。当检查第 i 位时,我们可以让 n 与 $2^i $ 进行与运算,根据结果判断这一位是否为1,如果这一位是1,那么与运算的结果就是1,反之为0。

class Solution {
public:int hammingWeight(uint32_t n) {int ret = 0;for (int i = 0; i < 32; i++) {if (n & (1 << i)) {ret++;}}return ret;}
}; 

找到数组的中间位置

找到数组的中间位置

给你一个下标从 0 开始的整数数组 nums ,请你找到 最左边 的中间位置 middleIndex (也就是所有可能中间位置下标最小的一个)。

中间位置 middleIndex 是满足 nums[0] + nums[1] + ... + nums[middleIndex-1] == nums[middleIndex+1] + nums[middleIndex+2] + ... + nums[nums.length-1] 的数组下标。

如果 middleIndex == 0 ,左边部分的和定义为 0 。类似的,如果 middleIndex == nums.length - 1 ,右边部分的和定义为 0

请你返回满足上述条件 最左边middleIndex ,如果不存在这样的中间位置,请你返回 -1

示例 1:

输入:nums = [2,3,-1,8,4]
输出:3
解释:
下标 3 之前的数字和为:2 + 3 + -1 = 4
下标 3 之后的数字和为:4 = 4

示例 2:

输入:nums = [1,-1,4]
输出:2
解释:
下标 2 之前的数字和为:1 + -1 = 0
下标 2 之后的数字和为:0

示例 3:

输入:nums = [2,5]
输出:-1
解释:
不存在符合要求的 middleIndex 。

示例 4:

输入:nums = [1]
输出:0
解释:
下标 0 之前的数字和为:0
下标 0 之后的数字和为:0

提示:

  • 1 <= nums.length <= 100
  • -1000 <= nums[i] <= 1000
题解
解法一:暴力求解
class Solution {
public:int findMiddleIndex(vector<int>& nums) {// 遍历数组,检查是否满足左侧和等于右侧和for (int i = 0; i < nums.size(); ++i) {int l = 0, r = 0;for (int j = 0; j < i; ++j){	// 计算 i 的左侧和l += nums[j];}for (int k = i+1; k < num.size(); ++k){	// 计算 i 的右侧和r += nums[k];}if( l == r){return i;}}return -1; // 如果没有找到中间索引}
};

解法二:前缀和

class Solution {
public:int findMiddleIndex(vector<int>& nums) {int totalSum = 0, leftSum = 0;// 计算数组的总和for (int num : nums) {totalSum += num;}// 遍历数组,检查是否满足左侧和等于右侧和for (int i = 0; i < nums.size(); ++i) {// 右侧和 = 总和 - 左侧和 - 当前元素int rightSum = totalSum - leftSum - nums[i];if (leftSum == rightSum) {return i;}leftSum += nums[i]; // 更新左侧和}return -1; // 如果没有找到中间索引}
};

递推

递推算法是一种通过已知条件和特定递推关系式,逐步推导出问题结果的算法。它通常以一个明确的初始条件(或边界条件)开始,然后通过递推公式逐步求解后续结果。

递推算法的结构

  1. 初始条件
    • 给定问题的边界或起点。
  2. 递推关系
    • 根据问题规律,确定如何通过前面的结果推导当前结果。
  3. 终止条件
    • 决定何时停止递推。

经典示例:斐波那契数列

斐波那契数列的定义:

F(0) = 0
F(1) = 1
F(n) = F(n−1) + F(n−2) (n≥2)

采用递推算法:

int fibonacci(int n) {if (n == 0) return 0;if (n == 1) return 1;int prev1 = 0, prev2 = 1; // 初始化 F(0) 和 F(1)int current;for (int i = 2; i <= n; ++i) {current = prev1 + prev2; // F(i) = F(i-1) + F(i-2)prev1 = prev2;prev2 = current;}return current;
}

递归算法也可以,更容易理解,但有重复计算,可能会超时:

int fibonacci(int n) {if (n == 0) return 0;if (n == 1) return 1;return fibonacci(n - 1) + fibonacci(n - 2);
}

实战

爬楼梯

爬楼梯

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 12 个台阶。你有多少种不同的方法可以爬到楼顶呢?

示例 1:

输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶

示例 2:

输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶

提示:

  • 1 <= n <= 45
题解

这道题其实是斐波那契数列的变形。

由于每次可以只能爬1个或2个台阶,所以,如果处在第 i 阶台阶,那么它只能是从第 i-1或者第i-2阶台阶爬上来的,那么就有 f(i) = f(i-1) + f(i-2)。

class Solution {
public:int climbStairs(int n) {int f = 0, f1 = 1, f2 = 2;if (n == 1)return f1;if (n == 2)return f2;for (int i = 3; i <= n; ++i) {f = f1 + f2;f1 = f2;f2 = f;}return f;}
};

杨辉三角

杨辉三角

给定一个非负整数 *numRows,*生成「杨辉三角」的前 numRows 行。

在「杨辉三角」中,每个数是它左上方和右上方的数的和。

在这里插入图片描述

示例 1:

输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]

示例 2:

输入: numRows = 1
输出: [[1]]

提示:

  • 1 <= numRows <= 30
题解
class Solution {
public:vector<vector<int>> generate(int numRows) {vector<vector<int>> ret(numRows);for (int i = 0; i < numRows; ++i) {ret[i].resize(i + 1);	// 每一行有 i+1 个元素ret[i][0] = ret[i][i] = 1;	// 首尾固定为 1// 处理中间元素for (int j = 1; j < i; ++j) {ret[i][j] = ret[i - 1][j] + ret[i - 1][j - 1]; // 递推关系式}}return ret;}
};

相关文章:

基础暴力算法

线性枚举 线性枚举&#xff08;Linear Enumeration&#xff09;是一种暴力枚举的方法&#xff0c;它逐一检查每个可能的解&#xff0c;适用于搜索和枚举问题。 其核心思路是&#xff1a;对问题的所有可能情况逐一进行遍历&#xff0c;并针对每种情况判断是否满足条件&#xf…...

【复变函数】三、复变函数的积分

目录 1. 复变函数积分1.1. 复积分1.2. 存在性与计算1.2.1 第二类曲线积分与格林公式1.2.2 第一类曲线积分与参数式 1.3. 性质1.4. 圆径积分 2. 柯西积分定理2.1. 柯西&#xff08;Cauchy&#xff09;基本定理与莫雷拉&#xff08;Morrera&#xff09;定理2.2. 复合闭路定理2.3.…...

ChatGPT Pro是什么

ChatGPT Pro 和 ChatGPT Plus 的区别主要体现在功能范围、适用场景和目标用户上。 ChatGPT Plus 功能 • 价格&#xff1a;20美元/月。 • 目标用户&#xff1a;针对个人用户设计。 • 主要特点&#xff1a; • 在高峰期响应速度更快。 • 使用高级模型&#xff08;如 GPT-4…...

React - echarts 世界地图,中国地图绘制

中国地图 首先需要一个包含中国所有省份名称的 json&#xff0c;这个好多网站都能找到。 我传到资源里了&#xff0c;放百度网盘怕太长时间不登录给我删掉了。 中国地图中文版json 我把地图抽出来单独做成了组件&#xff0c;这样用的时候比较方便. 使用的时候&#xff1a; …...

knife4j-openapi3 4.5 最基本的使用 openAPI

最基本的使用&#xff0c;配置太多懒得研究 SpringBoot 整合 knfe4j &#xff0c;使用 OpenAPI3 规范&#xff0c;这个兄弟写的挺好 环境&#xff1a; spring-boot-starter-parent&#xff1a;3.4.0 1. 依赖 <dependency><groupId>com.github.xiaoymin</gr…...

如何在 Ubuntu 22.04 上安装和使用 Apache Kafka

简介 Apache Kafka是一个高性能、低延迟的分布式流处理平台&#xff0c;广泛用于构建实时数据管道和流式应用。本文将指导你如何在Ubuntu 22.04系统上快速部署Apache Kafka&#xff0c;让你体验到Kafka在处理大规模实时数据流方面的强大能力。通过本教程&#xff0c;你将学会如…...

Linux:network:添加ip的时候自动添加一个本地路由

文章目录 问题问题 最近在看一个路由的问题,顺便看内核代码,发现在添加IP的时候,内核会自动添加一个local route。 net/ipv4/devinet.c inet_rtm_newaddr->__inet_insert_ifa /* Send message first, then call notifier.Notifier will trigger FIB update, so thatlis…...

Android 10、11、12存储适配相关

AndroidQ(10)分区存储完美适配 - 简书前言 最近时间在做AndroidQ的适配&#xff0c;截止到今天AndroidQ分区存储适配完成&#xff0c;期间出现很多坑&#xff0c;目前网上的帖子大部分都是概述变更内容&#xff0c;接下来的几篇帖子都是对分区存储实际...https://www.jianshu.c…...

如何将视频转化为音频?五个方法策略

在日常生活中&#xff0c;我们经常需要将视频中的音频提取出来&#xff0c;以便在特定的场合使用。无论是为了制作铃声、背景音乐&#xff0c;还是为了进行语音转文字处理&#xff0c;视频转音频的需求都非常普遍。如何将视频转化为音频&#xff1f;本文将详细介绍多种将视频转…...

ecovadis评估最新标准

EcoVadis评估的最新标准主要包括奖牌评估规则和新增的徽章规则&#xff0c;以下是对这两方面的详细阐述&#xff1a; 一、奖牌评估规则 评估范围&#xff1a;EcoVadis的评估总分为100分&#xff0c;评估内容涵盖环境、劳工与人权、商业道德、可持续采购等四大主题。 奖牌等级…...

Java版-图论-最小生成树-Kruskal算法

实现描述 为了造出一棵最小生成树&#xff0c;我们从最小边权的边开始&#xff0c;按边权从小到大依次加入&#xff0c;如果某次加边产生了环&#xff0c;就扔掉这条边&#xff0c;直到加入了 n-1 条边&#xff0c;即形成了一棵树。 实现代码 首选我们对所有的边&#xff0c…...

【单片机开发】MCU三种启动方式(Boot选择)[主Flash/系统存储器(BootLoader)/嵌入式SRAM]

目录 参考资料&#xff1a; 利用 Boot 选择不同的启动方式&#xff1a; 单片机的存储结构(主 FLASH/系统存储器/嵌入式 SRAM)&#xff1a; 1. Cortex-M 内核芯片——启动原理&#xff1a; 1.1. 启动流程&#xff1a; 1.2. 根据单片机的存储器映射和架构图&#xff1a;启动…...

实验15 验证LSTM模型的长程依赖

本次实验依托上个实验 一 模型构建 创建LSTM模型&#xff0c;里面包括初始化init函数、初始化权重函数_init_weights、初始化状态函数init_state、前向传播函数forward。 init函数&#xff1a;虽然每个时间的输入和隐层都是一样的&#xff0c;但是他们会有四组不同的权重&am…...

Charles功能说明

1.扫把(clear the current Session) (前头方向) 作用:清除所有抓取的包(正方形框) 2.中心圈-未启用显示(Star Recording)点击启动 -启动之后显示(Stop Recording)点击停止 作用:启动之后开始抓取包(刷新一次页面或跳转抓取内容) 3.锁-未启动显示(Star SSL Proxying)点击启动 -启…...

自动秒收录程序与自动秒收录网站源码论坛版本下载

自动秒收录程序与自动秒收录网站源码论坛版本下载 随着互联网的快速发展&#xff0c;网站优化已成为众多企业和个人博主提升在线影响力的关键手段。其中&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;作为提升网站排名的核心策略&#xff0c;备受关注。而SEO优化的一个…...

HTML颜色-HTML脚本

HTML脚本 js使得HTML页面具有更强的动态和交互性 HTML<script>标签 标签用于定义客户端脚本&#xff0c;比如javascript 可包含脚本语句&#xff0c;也可以通过src属性指向外部的脚本文件 JavaScript最常用于图片操作&#xff0c;表单验证以及动态的内容更新 HTML<n…...

【WRF理论第十三期】详细介绍 Registry 的作用、结构和内容

目录 1. Introduction&#xff1a;介绍 Registry 的作用和功能。2. Registry Contents&#xff1a;详细描述 Registry 的结构和内容&#xff0c;包括各个部分的条目类型。2.1. DIMSPEC ENTRIES&#xff08;维度规格条目&#xff09;2.2. STATE ENTRIES&#xff08;状态变量条目…...

使用Kimi开发自己的问答应用

概述 Kimi是大家常用的一个人工智能助手&#xff0c;本文使用Kimi开发文档&#xff0c;以node作为后端&#xff0c;开发与一个问答系统 实现效果 Kimi简介 Kimi是由Moonshot AI开发的人工智能助手&#xff0c;擅长中文和英文对话。目标是帮助用户解决问题、提供信息和执行任…...

Vue前端开发-路由其他配置

在路由文件中&#xff0c;除了跳转配置外&#xff0c;还可以进行路径重定向配置&#xff0c;如果没有找到对应的地址&#xff0c;还可以实现404的配置&#xff0c;同时&#xff0c;如果某个页面需要权限登录&#xff0c;还可以进行路由守卫配置&#xff0c;接下来&#xff0c;分…...

AI与遥感的融合:构建新一代智能监测作业平台

在测绘地理信息与遥感领域&#xff0c;人工智能&#xff08;AI&#xff09;技术的融合正推动着一场监测作业模式的革命。AI不仅提升了数据处理的效率&#xff0c;还极大地扩展了遥感技术的应用范围和深度。 遥感监测的智能化趋势 随着遥感数据量的激增&#xff0c;传统的人工…...

3D 视觉定位技术:汽车零部件制造的智能变革引擎

在汽车零部件制造领域&#xff0c;传统工艺正面临着前所未有的挑战。市场对于零部件精度与生产效率近乎苛刻的要求&#xff0c;促使企业寻求突破之道。而 3D 视觉定位技术&#xff0c;为汽车零部件制造开启了精准定位与智能化生产的新纪元。 3D 视觉定位系统的核心技术原理 3…...

git提交时出现merge branch main of xxx

git提交时出现merge branch main of xxx 原因&#xff1a; 1、同事commit了一个修改A&#xff0c;push到remote 2、我把这个修改直接pull了下来&#xff08;pull是fetchmerge的操作&#xff0c;自动合并到本地workspace&#xff09; 3、同事因为后续的commit有冲突&#xff0c…...

重生之我在异世界学编程之C语言:深入结构体篇(上)

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文《1》 结构体的两种声明一、结构…...

到达率和服务率在python中实现

到达率和服务率在python中实现 概念理解 到达率(Arrival Rate):是指顾客(或任务、事件等)到达服务系统的平均速率,通常用单位时间内到达的数量来表示。例如,在一个客服中心,每小时平均有10个客户来电咨询,这里的每小时10个客户就是到达率。服务率(Service Rate):是…...

重视猫艾滋:宠物健康的隐秘挑战

猫艾滋&#xff0c;全称为猫获得性免疫缺陷综合征&#xff08;Feline Acquired Immunodeficiency Syndrome&#xff09;&#xff0c;是由猫免疫缺陷病毒&#xff08;FIV&#xff09;感染引起的一种严重危害猫类健康的疾病。虽然其名称与人类艾滋病相似&#xff0c;但猫艾滋仅在…...

使用长轮询解决某些场景的实时消息推送需求

需求来源 最近做一个需求实现在移动端通过按钮&#xff0c;远程控制大屏幕上展示的资源进行实时切换&#xff0c;可以展示一个大屏页面&#xff0c;可以展示一段视频&#xff0c;也可以展示一张图片。 解决思路 大屏幕上打开一个游览器&#xff0c;访问指定动态资源展示页面…...

uniapp-内部项目使用文档

uniapp-内部项目使用文档 目录 uniapp-内部项目使用文档阶段1自行实现内容&#xff1a;阶段1问题记录&#xff1a; 阶段2自行实现内容&#xff1a; 阶段3 APP项目介绍及规范阶段4 公共组件方法UseList 列表页面HooksListItem 列表项uni-load-more 列表加载更多组件CardTitle 列…...

linux搭建NFS服务和autofs自动挂载NFS

文章目录 1、nfs服务1、nfs原理2、RPC和NFS通讯原理3、RPC和NFS流程4、NFS工作流程5、服务端搭建6、客户端搭建7、autofs自动挂载 1、nfs服务 1、nfs原理 是一个NAS的存储&#xff0c;通过网络来进行文件的共享&#xff0c;表现出来的形式就是一个文件夹 可以支持多个linux挂…...

springboot415社区网格化管理平台的构建-(论文+源码)_kaic

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本社区网格化管理平台就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据…...

ubuntu下open-webui + ollama本地大模型部署

文章目录 nvidia gpu驱动安装 安装卸载 ollama 部署 添加docker秘钥docker配置添加国内镜像源ollama安装 从源拉取ollama镜像。启动一个ollama容器 通过ollama下载模型到本地检验本地模型 open-webui 部署 安装容器和镜像下载webui使用查看模型运行时内存、cpu、gpu占用 业余…...

自动化运维-配置Mysql、emqx、redis、nginx等通用性Linux日志分割工具 - logrotate

前言&#xff1a;logrotate 是一个在 Linux 系统中用于管理和轮转日志文件的工具。它的主要目的是帮助系统管理员自动执行日志文件的轮转、压缩、删除和邮件通知等任务&#xff0c;以防止日志文件占用过多的磁盘空间&#xff0c;同时保持日志文件的可管理性。 参考命令&#x…...

71、docker镜像制作上传/下载到阿里云

基本思想:简单学习一下如何制作镜像和上传下载到私有阿里云,然后构建一个gpu的训练/推理环境,以备后续使用 一、配置环境 ubuntu@ubuntu:~$ sudo apt-get install docker.ioubuntu@ubuntu:~$ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS P…...

力扣--LCR 178.训练计划VI

题目 教学过程中&#xff0c;教练示范一次&#xff0c;学员跟做三次。该过程被混乱剪辑后&#xff0c;记录于数组 actions&#xff0c;其中 actions[i] 表示做出该动作的人员编号。请返回教练的编号。 示例 1&#xff1a; 输入&#xff1a;actions [5, 7, 5, 5] 输出&#…...

独孤思维:又有一个副业项目降价了

不要过早量出底牌&#xff0c;不然会变得低贱且廉价。 昨天在一个群里&#xff0c;看到有个博主&#xff0c;没有成交订单。 她把和用户的聊天对话发出来&#xff0c;我们大致看了下。 发现人家是有意向付费的。 但是这个博主过于心急&#xff0c;说今天加入可以优惠&#…...

【笔记】分布式任务调度平台XXL-JOB

这篇笔记主要记录以下内容&#xff1a; &#xff08;1&#xff09;第一次启动xxl-job的过程 &#xff08;2&#xff09;模块、文件、数据库&#xff08;表和字段&#xff09;的作用 &#xff08;3&#xff09;极少的源码解读&#xff08;XxlJobConfig&#xff09; 有点像实…...

Java基础总结上(Ref:JavaGuide)

基础概念与常识 Java语言有哪些特点&#xff0c;优点&#xff1f; 简单易学&#xff0c;是一门面向对象的语言&#xff0c;有封装继承多态三大特性&#xff0c;而且有多重防护机制保证安全性&#xff0c;例如权限修饰符&#xff0c;限制程序直接访问操作系统资源。通过JIT编译…...

嘉誉府5区共有产权看房记

特地工作日来看下嘉誉府5区的网红共有产权的房子&#xff0c;主要是冲着均价2.1万/平才来看。说实话从塘尾地铁步行到嘉誉府5区还挺需要时间的哈。可能以后需要电驴代步到地铁&#xff1f;确实楼盘现在是现楼&#xff0c;今年买明年住。鸿荣源确实很666哈。 今天来不需要排队&a…...

PostgreSQL函数中使用now()或current_timestamp的异同

在PostgreSQL函数中使用now()或current_timestamp可以获取当前的日期和时间。 now()函数返回当前的日期和时间&#xff0c;包括时区信息。它可以用于记录操作的时间戳或在查询中进行时间比较。 current_timestamp函数也返回当前的日期和时间&#xff0c;但不包括时区信息。它…...

跟李笑来学美式俚语(Most Common American Idioms): Part 56

Most Common American Idioms: Part 56 前言 本文是学习李笑来的Most Common American Idioms这本书的学习笔记&#xff0c;自用。 Github仓库链接&#xff1a;https://github.com/xiaolai/most-common-american-idioms 使用方法: 直接下载下来&#xff08;或者clone到本地…...

类和对象一

目录 1.类的引入 2.类的定义 3.访问限定符 4.类的作用域 5.类对象模型 6.类的大小 1.类的引入 C语言结构体中只能定义变量&#xff0c;在C中&#xff0c;结构体不仅可以定义变量&#xff0c;也可以定义函数。 C兼容C语言&#xff0c;结构用法可以继续使用 同时sruct也升…...

两个数的和最小

两个数的和最小 C 代码C 代码Java 代码Python 代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 给你n个整数&#xff0c;你可以从中任意取两个数a和b&#xff0c;问a加上b的和的绝对值最小可能是多少&#xff1f; 输入 有多组测试数据…...

Mac mini m4本地跑大模型(ollama + llama + ComfyUI + Stable Diffusion | flux)

安装chat大模型&#xff08;不推荐&#xff0c;本地运行的大模型只能聊废话&#xff0c;不如网页版使用openAI等高效&#xff09; 首先下载ollama的安装包 https://ollama.com/ 点击启动访问&#xff1a;http://localhost:11434 Ollama is running 代表已经运行起来了&#x…...

IoTDB AINode 报错,call inference 301: Error ocurred while executing inference

问题及现象 使用时序数据库 IoTDB 的 AINode 的 call inference 语句后报错&#xff1a; Msg: org.apache.iotdb.jdbc.IoTDBSOLException&#xff1a;301: Error ocurred while executing inference:[tuple object has no attribute inference]解决方法 可以替换 venv 里面的…...

Linux网络 UDP socket

背景知识 我们知道&#xff0c; IP 地址用来标识互联网中唯一的一台主机&#xff0c; port 用来标识该主机上唯一的一个网络进程&#xff0c;IPPort 就能表示互联网中唯一的一个进程。所以通信的时候&#xff0c;本质是两个互联网进程代表人来进行通信&#xff0c;{srcIp&…...

Day2——需求分析与设计

教师端签到应用软件的需求分析&#xff1b; 产品经理如何写好产品需求文档&#xff08;附模板&#xff09; 需求分析是软件开发过程中的关键步骤&#xff0c;它确保了开发的软件能够满足用户的需求。以下是进行需求分析的具体步骤&#xff1a; 1. 确定分析目标 明确教师端签到…...

aosp15上winscope离线html如何使用?

背景&#xff1a; aosp15上的如何使用Winscope前面已经有分享过相关的blog&#xff0c;这块其实和aosp14没啥大的差别&#xff0c;具体可以看如下2个文章&#xff1a; 手把手教你aosp14编译Winscope 安卓aosp15手机上如何离线获取winscope文件 文章中也说明在aosp15如果直接使…...

AttributeError: module numpy has no attribute int .报错解决

AttributeError: module numpy has no attribute int .报错解决方案_attributeerror: module numpy has no attribute i-CSDN博客 以上为参考教程&#xff0c;试了卸载再安装&#xff0c;不行&#xff0c;报错&#xff1a; Found existing installation: numpy 1.24.3 error: …...

python爬虫常用数据保存模板(Excel、CSV、mysql)——scrapy中常用数据提取方法(CSS、XPATH、正则)(23)

文章目录 1、常用数据保存模板2.1 保存为Excel格式2.2 保存为CSV格式2.3 保存至mysql数据库2、scrapy中常用数据提取方法2.1 XPath选择器2.2 CSS选择器2.3 正则表达式1、常用数据保存模板 2.1 保存为Excel格式 # 1、导入模块 from openpyxl import workbook# 2、创建一个exce…...

【面试题】简述rabbitmq的组织架构

[面试题]简述rabbitmq的组织架构 RabbitMQ 是一种流行的消息中间件&#xff0c;其架构设计围绕消息生产者, 消息消费者和消息中转&#xff08;Broker&#xff09;展开。以下是 RabbitMQ 的主要组织架构组件和它们之间的关系&#xff1a; 1. 核心组件 1.1 Producer&#xff0…...

C#-WPF 常见类型转换方法(持续更新)

目录 一、普通类型转换 1、Convert类 2、Parse(转String) 3、TryParse(转String) 4、ToString(转String) 5、int转double 6、String转DateTime 7、自定义类型的显示/隐式转换 二、byte[]转ImageSource 方法一 方法二 一、普通类型转换 1、Convert类 提供了一种安全…...