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

【leetcode刷题之路】剑指Offer(4)——分治+排序算法+动态规划

文章目录

      • 8 分治算法
        • 8.1 【递归】剑指 Offer 07 - 重建二叉树
        • 8.2 【递归】【快速幂】剑指 Offer 16 - 数值的整数次方
        • 8.3 【递归】剑指 Offer 33 - 二叉搜索树的后序遍历序列
        • 8.4 【递归】【分治】剑指 Offer 17 - 打印从1到最大的n位数
        • 8.5 【归并排序】【分治】剑指 Offer 51 - 数组中的逆序对
      • 9 排序
        • 9.1 【冒泡排序】剑指 Offer 45 - 把数组排成最小的数
        • 9.2 【排序】剑指 Offer 61 - 扑克牌中的顺子
        • 9.3 【堆排序】剑指 Offer 40 - 最小的k个数
        • 9.4 【堆排序】【优先队列】剑指 Offer 41 - 数据流中的中位数
      • 10 动态规划
        • 10.1 【动态规划】【哈希表】【DFS】剑指 Offer 10- I - 斐波那契数列
        • 10.2 【动态规划】【哈希表】【DFS】剑指 Offer 10- II - 青蛙跳台阶问题
        • 10.3 【动态规划】剑指 Offer 63 - 股票的最大利润
        • 10.4 【动态规划】【分治】剑指 Offer 42 - 连续子数组的最大和
        • 10.5 【动态规划】剑指 Offer 47 - 礼物的最大价值

8 分治算法

8.1 【递归】剑指 Offer 07 - 重建二叉树

https://leetcode.cn/problems/zhong-jian-er-cha-shu-lcof/

  前序遍历是根左右,中序遍历是左根右,这也就意味着前序遍历的第一个节点是整棵树的根节点,顺着这个节点找到它在中序遍历中的位置,即为in_root,那么in_root左边的都在左子树,右边的都在右子树,这样就可以知道左子树一共有多少个节点,然后去前序遍历中找到左右子树的分界点,分成左右两部分,分别重复上述过程,找到各自部分的第一个根节点,然后再依次往下进行,直到最后左右子树的边界发生重合,此时二叉树重建完毕。

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
private:unordered_map<int,int> hash_table;
public:TreeNode* subTree(vector<int>& preorder, vector<int>& inorder, int pre_l, int pre_r, int in_l, int in_r){if(pre_l > pre_r) return nullptr;//找到根节点,计算左子树的节点数int pre_root = pre_l;int in_root = hash_table[preorder[pre_l]];int sub_l = in_root - in_l;//开始生成rootTreeNode* root = new TreeNode(preorder[pre_l]);//对于左子树而言,前序遍历的[左边界+1,左边界+左子树节点数]即为中序遍历的[左边界,根节点-1]root->left = subTree(preorder, inorder, pre_l+1, pre_l+sub_l, in_l, in_root-1);//对于右子树而言,前序遍历的[左边界+左子树节点数+1,右边界]即为中序遍历的[根节点+1,右边界]root->right = subTree(preorder, inorder, pre_l+sub_l+1, pre_r, in_root+1, in_r);return root;}TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {int n = inorder.size();for(int i=0;i<n;i++){hash_table[inorder[i]] = i;}return subTree(preorder, inorder, 0, n-1, 0, n-1);}
};

8.2 【递归】【快速幂】剑指 Offer 16 - 数值的整数次方

https://leetcode.cn/problems/shu-zhi-de-zheng-shu-ci-fang-lcof/description/

  这道题可以用快速幂来解决,具体思路就是把幂次按照二进制拆开,分别计算,下面举个例子: 假设我要计算 x 10 x^{10} x10,因为10的二进制表示为1010,那么 x 10 = x 2 0 ∗ 0 ∗ x 2 1 ∗ 1 ∗ x 2 2 ∗ 0 ∗ x 2 3 ∗ 1 x^{10}=x^{2^0*0}*x^{2^1*1}*x^{2^2*0}*x^{2^3*1} x10=x200x211x220x231,可以看作按照x的2次方依次递增,只需要看这一个次方对应的二进制是否为1。

class Solution {
public:double myPow(double x, int n) {if(x==1 || n==0) return 1;if(x==0) return 0;double ans = 1;long num = n;if(n<0){num = -num;x = 1/x;}while(num){if(num & 1) ans *= x;x *= x;num >>= 1;}return ans;}
};

8.3 【递归】剑指 Offer 33 - 二叉搜索树的后序遍历序列

https://leetcode.cn/problems/er-cha-sou-suo-shu-de-hou-xu-bian-li-xu-lie-lcof

  后序遍历的特点就是先访问左子树再访问右子树最后访问根节点,所以最后一个元素一定根节点,而二叉搜索树的特点就是左子树<根节点<右子树,所以我们可以根据根节点的值把数组分为两部分,然后分别判断是否符合二叉搜索树的特点,重复上述过程直到所有情况都判断完为止。

class Solution {
public:bool dfs(vector<int>& postorder, int left, int right){if(left >= right) return true;int i = left;while(postorder[i]<postorder[right]){i++;}int mid = i;while(postorder[i]>postorder[right]){i++;}return i==right & dfs(postorder,left,mid-1) & dfs(postorder,mid,right-1);}bool verifyPostorder(vector<int>& postorder){return dfs(postorder,0,postorder.size()-1);}
};

8.4 【递归】【分治】剑指 Offer 17 - 打印从1到最大的n位数

https://leetcode.cn/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof

  这道题目由于指定了数组是int型,所以不用考虑大整数问题,直接暴力就可以解决,但如果是大整数的话,需要采用分治递归的思想,主要如下:

(1)第一层遍历,为n,分别考虑到生成的数字是1位数、2位数、3位数…n位数;

(2)第二层遍历,分别遍历每一位数是几,除了第一位是1-9之外,其余都是0-9。

class Solution {
public:vector<int> printNumbers(int n) {int cnt = pow(10,n);vector<int> ans;for(int i=1;i<cnt;i++){ans.push_back(i);}return ans;}
};

8.5 【归并排序】【分治】剑指 Offer 51 - 数组中的逆序对

https://leetcode.cn/problems/shu-zu-zhong-de-ni-xu-dui-lcof

  这位大佬写的很好!(https://leetcode.cn/problems/shu-zu-zhong-de-ni-xu-dui-lcof/solutions/622496/jian-zhi-offer-51-shu-zu-zhong-de-ni-xu-pvn2h)

class Solution {
public:int merge_sort(int left, int right, vector<int>& nums, vector<int>& tmp){if(left >= right) return 0;int mid = (left + right) / 2;int res = merge_sort(left, mid, nums, tmp) + merge_sort(mid+1, right, nums, tmp);int i = left, j = mid + 1;for(int k=left;k<=right;k++){tmp[k] = nums[k];}for(int k=left;k<=right;k++){ if(i == mid+1) nums[k] = tmp[j++];else if(j == right+1 || tmp[i] <= tmp[j]) nums[k] = tmp[i++];else{nums[k] = tmp[j++];res += mid - i + 1;}}return res;}int reversePairs(vector<int>& nums){vector<int> tmp(nums.size());return merge_sort(0, nums.size()-1, nums, tmp);}
};

9 排序

9.1 【冒泡排序】剑指 Offer 45 - 把数组排成最小的数

https://leetcode.cn/problems/ba-shu-zu-pai-cheng-zui-xiao-de-shu-lcof

  这题可以看作是冒泡排序,只不过针对的对象是字符串,我们需要找到里面表示最大的字符串,然后把它放到字符串的最后即可,例如“32”和“3”,因为“323”<“332”,所以“32”<“3”,所以应该把“3”放在“32”后面,借助这种排序思路来解题。

class Solution {
public:string minNumber(vector<int>& nums) {for(int i=nums.size()-1;i>0;i--){for(int j=0;j<i;j++){if(string_sort(nums[j],nums[j+1])){swap(nums[j],nums[j+1]);}}}string ans = "";for(int i=0;i<nums.size();i++){ans += to_string(nums[i]);}return ans;}bool string_sort(int num1, int num2){string s1 = to_string(num1) + to_string(num2);string s2 = to_string(num2) + to_string(num1);if(s1>s2) return true;else return false;}
};

9.2 【排序】剑指 Offer 61 - 扑克牌中的顺子

https://leetcode.cn/problems/bu-ke-pai-zhong-de-shun-zi-lcof

  这道题不难,想清楚顺子的判断条件即可,主要为以下几个方面:

(1)五个数中除了0以外不能有其他的重复数字,否则肯定不是顺子;

(2)找出五个数中的最大值和最小值,看看这两个数之间缺的数的个数是多少,记为gap,然后计算五个数中0的个数,记为zero_num,如果gap<=zero_num,说明0的个数可以补全缺的数,否则就肯定不是顺子。

class Solution {
public:bool isStraight(vector<int>& nums) {int arr[14] = {0};int max_num = 0, min_num = 14, zero_num = 0;for(int i=0;i<5;i++){if(nums[i]==0) zero_num++;else{if(arr[nums[i]]) return false;else{arr[nums[i]] = 1;min_num = min(min_num, nums[i]);max_num = max(max_num, nums[i]);}}}int gap = 0;for(int i=min_num;i<max_num;i++){if(arr[i]!=1) gap++;}if(gap <= zero_num) return true;else return false;}
};

9.3 【堆排序】剑指 Offer 40 - 最小的k个数

https://leetcode.cn/problems/zui-xiao-de-kge-shu-lcof

  方法一:直接用sort排序,然后选前k个数就好了。

  方法二:用堆排序,堆排序,采用大根堆,首先把前k个数字存入大根堆中,之后的数字依次和大根堆的top比较,如果比top小就更新大根堆,最后把大根堆中的数字存入vector中作为答案返回。

//方法一:直接排序
class Solution {
public:vector<int> getLeastNumbers(vector<int>& arr, int k) {sort(arr.begin(),arr.end());vector<int> ans;for(int i=0;i<k;i++){ans.push_back(arr[i]);}return ans;}
};
//方法二:堆排序
class Solution {
public:vector<int> getLeastNumbers(vector<int>& arr, int k) {vector<int> ans;if(k == 0) return ans;priority_queue<int, vector<int>, less<int>> max_stack;//把前k个数字存入大根堆for(int i=0;i<k;i++){max_stack.push(arr[i]);}//依次和大根堆的top比较,如果比top小就更新大根堆for(int j=k;j<arr.size();j++){if(arr[j] < max_stack.top()){max_stack.pop();max_stack.push(arr[j]);}}//把大根堆中的数字存入vector中作为答案返回while(k--){ans.push_back(max_stack.top());max_stack.pop();}return ans;}
};

9.4 【堆排序】【优先队列】剑指 Offer 41 - 数据流中的中位数

https://leetcode.cn/problems/shu-ju-liu-zhong-de-zhong-wei-shu-lcof

  这道题如果直接对所有数进行排序的话,最后会runtime,其实只要能找出每一次执行findMedian函数时整个数据流中间的两个数或者一个数就行了,这是我们可以考虑用堆排序,同时维持一个大根堆和一个小根堆,把数据流中的数分为两部分,同时也要保证大根堆中的top要比小根堆中的top小,这样最后的中位数要么是小根堆top,要么就是大根堆和小根堆的top取平均,构造方法如下:

  • 如果大根堆和小根堆的size一样,那么此时add的num就加入大根堆,然后把大根堆的top插入到小根堆中,保证大根堆的size<=小根堆的size;
  • 如果大根堆和小根堆的size不一样,那么此时add的num就加入小根堆,然后把小根堆的top插入到大根堆中,保证小根堆的size<=大根堆的size;
  • 执行findMedian函数时,看看此时大根堆和小根堆的size是否相等,如果相等的话,中位数就是各自取top元素相加取平均,如果不相等,那么中位数就是小根堆的top。
class MedianFinder {
public:/** initialize your data structure here. */priority_queue<int, vector<int>, greater<int>> min_stack;priority_queue<int, vector<int>, less<int>> max_stack;MedianFinder() {}void addNum(int num) {//如果大根堆和小根堆的size一样,那么此时add的num就加入大根堆,然后把大根堆的top插入到小根堆中,保证大根堆的size<=小根堆的sizeif(min_stack.size() == max_stack.size()){max_stack.push(num);min_stack.push(max_stack.top());max_stack.pop();}//如果大根堆和小根堆的size不一样,那么此时add的num就加入小根堆,然后把小根堆的top插入到大根堆中,保证小根堆的size<=大根堆的sizeelse{min_stack.push(num);max_stack.push(min_stack.top());min_stack.pop();}}//执行findMedian函数时,看看此时大根堆和小根堆的size是否相等,如果相等的话,中位数就是各自取top元素相加取平均,如果不相等,那么中位数就是小根堆的topdouble findMedian() {if(min_stack.size() == max_stack.size()){return (max_stack.top() + min_stack.top()) / 2.0;}else return min_stack.top();}
};/*** Your MedianFinder object will be instantiated and called as such:* MedianFinder* obj = new MedianFinder();* obj->addNum(num);* double param_2 = obj->findMedian();*/

10 动态规划

10.1 【动态规划】【哈希表】【DFS】剑指 Offer 10- I - 斐波那契数列

https://leetcode.cn/problems/fei-bo-na-qi-shu-lie-lcof

  这道题如果直接用动态规划会runtime,主要是因为在计算过程中会有一些数被反复计算,所以我们在这里采用哈希表来存放已经被计算过的数,这样在之后再次被计算时直接用就好了。

class Solution {
public:unordered_map<int,int> hash_table;int dfs(int n){if(n == 0) return 0;else if(n == 1) return 1;else{if(hash_table.count(n)) return hash_table[n];else{int num1 = dfs(n-1) % 1000000007;int num2 = dfs(n-2) % 1000000007;hash_table[n] = (num1 + num2) % 1000000007;return hash_table[n];}}}int fib(int n) {return dfs(n);}
};

10.2 【动态规划】【哈希表】【DFS】剑指 Offer 10- II - 青蛙跳台阶问题

https://leetcode.cn/problems/qing-wa-tiao-tai-jie-wen-ti-lcof

  这道题目就是变形的斐波那契数列,在这里采用哈希表来存放已经被计算过的数,这样在之后再次被计算时直接用就好了。

class Solution {
public:unordered_map<int,int> hash_table;int dfs(int n){if(n == 0) return 1;else if(n == 1) return 1;else{if(hash_table.count(n)) return hash_table[n];else{int num1 = dfs(n-1) % 1000000007;int num2 = dfs(n-2) % 1000000007;hash_table[n] = (num1 + num2) % 1000000007;return hash_table[n];}}}int numWays(int n) {return dfs(n);}
};

10.3 【动态规划】剑指 Offer 63 - 股票的最大利润

https://leetcode.cn/problems/gu-piao-de-zui-da-li-run-lcof

  动态规划类题目的解题主要是找到状态转移方程就好了,对于这道题目的状态转移就在于某一天有无股票,我们以此为分界来定义状态转移方程dp[i][2]:

(1)前i天未持有股票

d p [ i ] [ 0 ] = m a x ( d p [ i − 1 ] [ 0 ] , d p [ i − 1 ] [ 1 ] + p r i c e s [ i ] ) dp[i][0] = max(dp[i-1][0], dp[i-1][1] + prices[i]) dp[i][0]=max(dp[i1][0],dp[i1][1]+prices[i])

(2)前i天持有股票

d p [ i ] [ 1 ] = m a x ( d p [ i − 1 ] [ 1 ] , 0 − p r i c e s [ i ] ) dp[i][1] = max(dp[i-1][1], 0 - prices[i]) dp[i][1]=max(dp[i1][1],0prices[i])

  同时还要预判一下prices为空的情况,此时返回0,因为dp的两个元素在反复调用,所以在代码中也是直接用两个变量来进行代替了。

class Solution {
public:int maxProfit(vector<int>& prices) {if(!prices.size()) return 0;int dp_0 = 0, dp_1 = -prices[0];for(int i=1;i<prices.size();i++){dp_0 = max(dp_0, dp_1 + prices[i]);dp_1 = max(dp_1, 0 - prices[i]);}return dp_0;}
};

10.4 【动态规划】【分治】剑指 Offer 42 - 连续子数组的最大和

https://leetcode.cn/problems/lian-xu-zi-shu-zu-de-zui-da-he-lcof

  这道题用到一点点分治的思想,假设现在数组长度为 n n n,连续子数组的最大和为 f ( n ) f(n) f(n),那么 f ( n ) = m a x ( f ( n − 1 ) + n u m s [ i ] , n u m [ i ] ) f(n)=max(f(n-1)+nums[i],num[i]) f(n)=max(f(n1)+nums[i],num[i]),也就意味着最大和要么是前 n − 1 n-1 n1个数的最大和加上第 i i i个数,要么就是第 i i i个数本身,如果是第 i i i个数本身的话,就要从这里开始重新找到连续子数组了,在这个过程中记录下最大值即可。

class Solution {
public:int maxSubArray(vector<int>& nums) {int pre = 0, max_seqsum = nums[0];for(int i=0;i<nums.size();i++){pre = max(pre + nums[i], nums[i]);max_seqsum = max(max_seqsum, pre);}return max_seqsum;}
};

10.5 【动态规划】剑指 Offer 47 - 礼物的最大价值

https://leetcode.cn/problems/li-wu-de-zui-da-jie-zhi-lcof

  其实每个地方的最大值只与两个状态有关,假设目前要求的是 v a l u e [ i ] [ j ] value[i][j] value[i][j]的最大值,那么 v a l u e [ i ] [ j ] = m a x ( v a l u e [ i ] [ j − 1 ] , v a l u e [ i − 1 ] [ j ] ) + g r i d [ i ] [ j ] value[i][j] = max(value[i][j-1],value[i-1][j]) + grid[i][j] value[i][j]=max(value[i][j1],value[i1][j])+grid[i][j],这里为了方便初始化,把初始数组的大小设置为 ( m + 1 ) ∗ ( n + 1 ) (m+1)*(n+1) (m+1)(n+1)

class Solution {
public:int maxValue(vector<vector<int>>& grid) {int m = grid.size(), n = grid[0].size();int value[m+1][n+1];memset(value,0,sizeof(value));for(int i=0;i<m;i++){for(int j=0;j<n;j++){value[i+1][j+1] = max(value[i+1][j],value[i][j+1]) + grid[i][j];}}return value[m][n];}
};

相关文章:

【leetcode刷题之路】剑指Offer(4)——分治+排序算法+动态规划

文章目录 8 分治算法8.1 【递归】剑指 Offer 07 - 重建二叉树8.2 【递归】【快速幂】剑指 Offer 16 - 数值的整数次方8.3 【递归】剑指 Offer 33 - 二叉搜索树的后序遍历序列8.4 【递归】【分治】剑指 Offer 17 - 打印从1到最大的n位数8.5 【归并排序】【分治】剑指 Offer 51 -…...

美创科技“签”手柠檬文才学堂,共推高校数据安全建设

近日&#xff0c;由柠檬文才学堂联合中国教育在线、东北财经大学网络教育学院共同主办的“三教统筹下高校继续教育数字化转型研讨”顺利召开。 国内高等院校&#xff08;高职院校&#xff09;继续教育分管领导&#xff0c;继续教育学院领导及继续教育信息化、教学教务管理、课程…...

【JAVA基础】数据类型,逻辑控制

❤️ Author&#xff1a; 老九 ☕️ 个人博客&#xff1a;老九的CSDN博客 &#x1f64f; 个人名言&#xff1a;不可控之事 乐观面对 &#x1f60d; 系列专栏&#xff1a; 文章目录 数据类型整型变量 int长整型变量 long单精度浮点数 float双精度浮点数 double字符类型 char字节…...

计算机竞赛 基于图像识别的跌倒检测算法

前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于图像识别的跌倒检测算法 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-senior/…...

计算机竞赛 基于大数据的股票量化分析与股价预测系统

文章目录 0 前言1 课题背景2 实现效果3 设计原理QTChartsarma模型预测K-means聚类算法算法实现关键问题说明 4 部分核心代码5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于大数据的股票量化分析与股价预测系统 该项目较为新颖…...

input子系统

内核分三层 1、事件处理层 2、核心层 3、设备驱动层 当硬件按下&#xff0c;在设备驱动中触发中断&#xff0c;中断程序会将事件上报给核心层 核心层将事件给事件处理层&#xff0c;最后事件处理层控制app应用层的怎么操作将数据发送到用户空间...

mac 10.13.6安装后开发准备工作

git下载安装 xcode旧版安装搜索 brew国内源安装 brew国内源安装地址2 brew更换源 SwitchHosts github hosts nfts磁盘读写工具 更新ssl证书 证书下载 然后备份一下系统原来的pem文件 cp /etc/ssl/cert.pem /etc/ssl/cert.bak.pem 之后将新下载的pem文件&#xff0c;拷贝到/etc…...

C++ using关键字

C using关键字 using关键字用来简化代码和提高可读性。 using关键字提供了一种灵活的方式&#xff0c;可以在C中导入命名空间和定义别名。 1. 导入命名空间 using namespace 可以将一个命名空间中的所有名称导入到当前作用域中&#xff0c;从而可以直接使用该命名空间中的所…...

让你对es有一个初步的了解

首先es在海量数据的搜索能力非常好&#xff0c;es你可以把他看成一个搜索引擎数据库&#xff0c;他是个非关系型数据库。他的语法有很大的不同&#xff0c;好像都是json风格的。还有一点需要说的就是es 的数据是存在硬盘上的&#xff0c; 我们先来看一下mysql和es的区别吧。一…...

编绎和优化,脚本代码小米加步枪赶超英法美

编程达人&#xff1a;冰冻牡蛎 测试&#xff0c;总结》》 今有空&#xff0c;继续看了一下竹笋大师几天前提出的“使用for循环查找10亿内可被7整除的数的个数”的题目&#xff08;相关文件&#xff1a;群文件 10亿以内多少个数字可以整除7.7z &#xff09; 1. 论输出的exe大小…...

数字电路-二进制学习

什么是二进制&#xff1f; 数字电路 中 只有 高电平 和低电平 就是 1 和0 进位规则是“逢二进一”&#xff0c;借位规则是“借一当二”。 二进制、八进制 、十进制、十六进制 二进制 有两个数来表示 &#xff1a; 0、1 八进制 有8个数来表示 &#xff1a; 0、1、2、3、4、…...

运维Shell脚本小试牛刀(一)

运维Shell脚本小试牛刀(一) 运维Shell脚本小试牛刀(二) 一: Shell中循环剖析 for 循环....... #!/bin/bash - # # # # FILE: countloop.sh # USAGE: ./countloop.sh # DESCRIPTION: # OPTIONS: ------- # …...

screen命令,可以断开服务器连接,依旧能运行你的程序了

可以参考博客1&#xff1a;https://blog.csdn.net/nima_zhang_b/article/details/82797928 可以参考博客2:https://blog.csdn.net/herocheney/article/details/130984403 Linux中的screen是一个命令行工具&#xff0c;可以让用户在同一个终端会话中创建多个虚拟终端。它非常有…...

【ArcGIS Pro二次开发】(63):批量更改字段别名

在我工作中遇到的大多数图斑&#xff0c;字段名称一般是英文&#xff0c;字段别名是中文&#xff0c;使用起来是比较方便的。 但有时候也会遇到一些不一样的情况&#xff0c;不知是经过了怎样的处理&#xff0c;图斑的字段别名被修改成了和字段名称一样的英文&#xff0c;这样…...

redis全套参数配置及降级解决方案

文章目录 redis高可用核心参数配置1.Lettuce2.Jedis3.Redisson4.其他客户端 redis降级场景简介一、业务背景二、设计方案三、实现方案四、总结 redis高可用核心参数配置 1.Lettuce 提示&#xff1a;该客户端无主动探活机制&#xff0c;只能依赖于 OS KeepaAlive 机制&#xf…...

AMD即将上市大量中端显卡,为新显卡支付过高价格的日子可能结束

​AMD在本周末&#xff08;8月25日&#xff09;的德国Gamescom活动中展示了两款新显卡和一些新的升级技术&#xff0c;这些新GPU的定价将与英伟达的GeForce RTX 4000卡竞争。 这是一件大事&#xff0c;因为新的Radeon RX 7700 XT和7800 XT卡占据了AMD Radeon RX 7000系列产品线…...

go学习一之go的初体验

go语言学习笔记 一、golang初体验: 1.简单体验案例&#xff1a; package main{ //把这个test.go归属到main import "fmt" //引入一个包 func main(){//输出hellofmt.Println("hello world")} }2.从案例学到的知识点&#xff1a; (1) go文件的后缀是.…...

智能制造产业链数字化转型、数字化互联工厂建设方案PPT

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除&#xff0c;更多浏览公众号&#xff1a;智慧方案文库 篇幅有限&#xff0c;无法完全展示&#xff0c;喜欢资料可转发评论&#xff0c;私信了解更多信息。...

【安卓】拿注册码的两种方式

【安卓】拿注册码的两种方式 文章仅用于学习交流&#xff0c;请勿利用文章中的技术对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xff0c;均由使用者本人负责。首发吾爱&#xff1a;https://www.52pojie.cn/thread-1826802-1-1.html言归…...

【C++】—— 异常处理

前言&#xff1a; 本期&#xff0c;我将给大家讲解的是有关 异常处理 的相关知识&#xff01; 目录 &#xff08;一&#xff09;C语言传统的处理错误的方式 &#xff08;二&#xff09;C异常概念 &#xff08;三&#xff09;异常的使用 1、异常的抛出和捕获 1️⃣ 异常的…...

cookie和session是什么,区别是什么?

cookie HTTP 协议中的 Cookie 包括 Web Cookie 和浏览器 Cookie&#xff0c;它是服务器发送到 Web 浏览器的⼀ ⼩块数据。服务器发送到浏览器的 Cookie&#xff0c;浏览器会进⾏存储&#xff0c;并与下⼀个请求⼀起发送到服务器。通 常&#xff0c;它⽤于判断两个请求是否来⾃…...

linux的mmc子系统与块设备关联

1.前言 本文主要block组件的主要流程&#xff0c;在介绍的过程中&#xff0c;将详细说明和block相关的流程&#xff0c;涉及到其它组件的详细流程再在相关文章中说明。 2.主要数据结构和API 2.1 struct mmc_card Elemete Namestruct mmc_cardPathinclude/linux/mmc/card.hRe…...

【Spring MVC】

目录 &#x1f36e;1 什么是 MVC &#xff1f; &#x1f381;2 Spring MVC 的连接 &#x1f358;2.1 RequestMapping 实现 POST 和 GET 请求 &#x1f963;2.2 GetMapping 只支持 GET 请求 &#x1fad6;2.3 PostMapping 只支持 POST 请求 &#x1f36c;3 Spring MVC 获取参数的…...

【ES】笔记-生成器函数与调用

function* function* 这种声明方式 (function关键字后跟一个星号&#xff09;会定义一个生成器函数 (generator function)&#xff0c;它返回一个 Generator 对象。 function * gen(){console.log("heloo generator")}如何调用呢&#xff1f;先看下里面的内容 返回…...

将Spring Boot与Redis集成

一、引言 1、SpringBoot&#xff1a; Spring Boot是一个用于创建独立且可执行的Spring应用程序的框架。它简化了基于Spring框架的应用程序的开发过程&#xff0c;并提供了一种快速和简便的方式来构建Java应用程序。 Spring Boot提供了自动配置机制&#xff0c;通过引入适当的…...

vue echarts

安装 npm i -D echarts使用 <script setup lang"ts"> import * as echarts from echarts import { onMounted } from vueonMounted(() > {interface DataItem {value: [string, number]}let myChart echarts.init(document.getElementById(main))let dat…...

idea上利用JDBC连接MySQL数据库(8.1.0版)

1.了解jdbc概念 JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API&#xff0c;可以为多种 关系数据库提供统一访问&#xff0c;它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准&#xff0c;据此可以构建 更高级的工具和接口&#…...

【100天精通python】Day47:python网络编程_Web编程基础

目录 1 网络编程与web编程 1.1 网络编程 1.2 web编程 2 Web开发概述 3 Web开发基础 3.1 HTTP协议 3.2 Web服务器 3.3 前端基础 3.4 静态服务器 3.5 前后端交互的基本原理 4 WSGI接口 4.1 CGI 简介 4.2 WSGI 简介 4.3 定义 WSGI 接口 4.4 运行 WSGI 服务 4.5…...

DockerCompose介绍与使用

DockerCompose介绍与使用 1、DockerCompose介绍 DockerCompose用于定义和运行多容器 Docker 应用程序的工具。 通过 Compose可以使用 YAML 文件来配置应用程序需要的所有服务。一个使用Docker容器的应用&#xff0c;通常由多个容器组成&#xff0c;使用Docker Compose不再需要…...

Windows Qt 5.12.10下载与安装

Qt 入门实战教程&#xff08;目录&#xff09; C自学精简实践教程 目录(必读) 1 Qt5.12.10下载 qt-opensource-windows-x86-5.12.10.exe 官方离线安装包 Download Source Package Offline Installers | Qt 下载巨慢&#xff08;也可能很快&#xff09; 只能下载到最新的&…...

RustDesk最新版本编译与打包

本文环境 主要参考&#xff1a; https://www.yuque.com/shikangsi/efy0cp/wei3g1?https://blog.csdn.net/hualuohuakai2014/article/details/121605631 问题 flutter 生成 bridge 文件。 先安装工具&#xff0c;再生成ffi文件。 PS C:\Users\Administrator> cargo ins…...

Gin 框架入门实战系列(一)

GIN介绍 Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点 对于golang而言,web框架的依赖要远比Python,Java之类的要小。自身的net/http足够简单,性能也非常不错 借助框架开发,不仅可以省去很多常用的封装带来的时间,…...

【测试】pywinauto的简单使用(安装、常用对象、元素控件、鼠标操作、键盘操作)

1.说明 pywinauto是一个用于自动化Python 模块&#xff0c;适合Windows系统的软件&#xff08;GUI&#xff09;&#xff0c;可以通过Pywinauto遍历窗口&#xff08;对话框&#xff09;和窗口里的控件&#xff0c;也可以控制鼠标和键盘输入&#xff0c;所以它能做的事情比之前介…...

Java基础十八(正则表达式 + 日期时间)

1. 正则表达式 1.1 普通字符 字符描述示例[abc]匹配 […] 中所有字符[hlo] 匹配字符串 "hello world" 中所有的 h l o 字母[^ABC]匹配除了 […] 中所有字符[hlo] 匹配字符串 "hello world" 中除了 h l o 的所有字母[^a-z]匹配除了 […] 中所有字符[hlo] 匹…...

Linux C 多进程编程(面试考点)

嵌入式开发为什么要移植操作系统&#xff1f; 1.减小软硬件的耦合度&#xff0c;提高软件的移植性 2. 操作系统提供很多库和工具&#xff08;QT Open CV&#xff09;&#xff0c;提高开发效率 3.操作系统提供多任务机制&#xff0c;______________________? (提高C…...

c++一级

与7无关的数 #include<iostream> #include<iomanip> using namespace std; int main() {   int n,a,sum0,c0;   cin>>n;   for(int i1;i<n;i){     if(i%7!0){       ai;       c0; …...

Code Lab - 34

GAT里面有一些地方看的不是太懂&#xff08;GAT里Multi Attention的具体做法&#xff09;&#xff0c;暂时找了参考代码&#xff0c;留一个疑问 1. 一个通用的GNN Stack import torch_geometric import torch import torch_scatter import torch.nn as nn import torch.nn.fun…...

后端返回文件流,前端怎么导出、下载(8种方法可实现)

在前端导出和下载后端返回的文件流时&#xff0c;可以使用以下几种方法&#xff1a; 使用window.open()方法&#xff1a; 在前端使用window.open()方法打开一个新的窗口或标签页&#xff0c;并将后端返回的文件流作为URL传递给该方法。浏览器会自动下载该文件。例如&#xff1a…...

什么是 ThreadLocal?

ThreadLocal 是 Java 中的一个类,用于在多线程环境下,为每个线程提供独立的变量副本。每个线程可以通过 ThreadLocal 存储和获取数据,而不会影响其他线程的数据。这在某些情况下非常有用,特别是当多个线程需要访问共享数据,但又希望保持数据的隔离性时。 ThreadLocal 主要…...

CANOCO5.0实现冗余分析(RDA)最详细步骤

在地理及生态领域会常使用RDA分析&#xff0c;RDA的实现路径也有很多&#xff0c;今天介绍一下CANOCO软件的实现方法。 1.软件安装 时间调整到2010年 2.数据处理 得有不同的物种或者样点数值&#xff0c;再加上环境因子数据。 3.软件运行 4.结果解读 结果解读主要把握这几点…...

【tkinter 专栏】掷骰子游戏

文章目录 前言本章内容导图1. 需求分析2. 系统功能结构3. 设计流程4. 系统开发环境5. 系统预览6. 窗口布局7. 功能实现用户和电脑选择骰子的点数大小摇骰子过程实现判断游戏结果单击开始按钮进行游戏源代码汇总前言 本专栏将参考《Python GUI 设计 tkinter 从入门到实践》书籍…...

19 NAT穿透|python高级

文章目录 网络通信过程NAT穿透 python高级GIL锁深拷贝与浅拷贝私有化import导入模块工厂模式多继承以及 MRO 顺序烧脑题property属性property装饰器property类属性 魔法属性\_\_doc\_\_\_\_module\_\_ 和 \_\_class\_\_\_\_init\_\_\_\_del\_\_\_\_call\_\_\_\_dict\_\_\_\_str…...

2023常见前端面试题

以下是一些2023年秋招常见的前端面试题及其答案&#xff1a; 1. 请解释一下什么是前端开发&#xff1f; 前端开发是指使用HTML、CSS和JavaScript等技术来构建网页和用户界面的过程。前端开发人员负责将设计师提供的视觉设计转化为可交互的网页&#xff0c;并确保网页在不同设备…...

登录校验-JWT令牌-生成和校验

目录 JWT-生成 具体代码 运行结果如下 JWT-校验 具体代码 运行结果如下 小结 JWT-生成 具体代码 /*** 测试JWT令牌的生成*/Testpublic void TestJWT() {// 设置自定义内容Map<String, Object> claims new HashMap<>();claims.put("id", 1);claims…...

GIT 常用指令

基础指令 $ git init #初始化仓库&#xff0c;在该文件夹创建的为workspace$ git add . #已暂存 [.通配符&#xff0c;全部添加]$ git commit -m "log add file" #提交到仓库,并写了日志 ”log add file“$ git status #查看状态&#xff0c;可查看被修改的文件…...

多目标优化

https://zhuanlan.zhihu.com/p/158705342 概念 单目标优化只有一个优化目标&#xff0c;所以可以比较其好坏。 但是多目标优化&#xff0c;在需要优化多个目标时&#xff0c;容易存在目标之间的冲突&#xff0c;一个目标的优化是以其他目标劣化为代价的&#xff0c;所以我们要…...

odoo的优势

plus&#xff0c;主要是为了能尽早通过开发者审核&#xff0c;加入到chatgpt4 api的开发中去&#xff0c;接入到我们odoo aiCenter中。4的回答&#xff0c;明显比3.5的更聪明了。 可能是由于国内的特殊情况吧&#xff0c;我们的chatgpt模块很受欢迎&#xff0c;我也被问了不少…...

Spring Boot(Vue3+ElementPlus+Axios+MyBatisPlus+Spring Boot 前后端分离)【三】

&#x1f600;前言 本篇博文是关于Spring Boot(Vue3ElementPlusAxiosMyBatisPlusSpring Boot 前后端分离)【三】的分享&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我…...

Kali 软件管理

kali 更新 1. 查看发行版本 ┌──(root㉿kali)-[~] └─# lsb_release -a No LSB modules are available. Distributor ID: Kali Description: Kali GNU/Linux Rolling Release: 2023.2 Codename: kali-rolling2. 查看内核版本 ┌──(root㉿kali)-[~] └─…...

加油站【贪心算法】

加油站 在一条环路上有 n 个加油站&#xff0c;其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车&#xff0c;从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发&#xff0c;开始时油箱为空。 给定两个整数数组 gas 和…...