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

leetcode 刷题2

二分查找的绝妙运用: 看到有序数列,算法复杂度log

0033. 搜索旋转排序数组

class Solution {
public:int search(vector<int>& nums, int target) {int left = 0;int right = nums.size() - 1;while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] == target) {return mid;}// 如果中间元素小于最右边的元素,说明右半边是有序的if (nums[mid] < nums[right]) {// 如果目标值位于有序的右半边范围内if (nums[mid] < target && target <= nums[right]) {left = mid + 1;  // 在右半边继续搜索} else {right = mid - 1;  // 在左半边继续搜索}}// 如果中间元素大于最右边的元素,说明左半边是有序的else {// 如果目标值位于有序的左半边范围内if (nums[left] <= target && target < nums[mid]) {right = mid - 1;  // 在左半边继续搜索} else {left = mid + 1;  // 在右半边继续搜索}}}return -1;  // 如果没有找到目标值,返回 -1}
};

162. 寻找峰值  二分法套模板

思路:这道题,最最最重要的是条件,条件,条件,两边都是负无穷,数组当中可能有很多波峰,也可能只有一个,如果尝试画图,就跟股票信息一样,没有规律,如果根据中点値判断我们的二分方向该往何处取, 这道题还有只是返回一个波峰。你这样想,中点所在地方,可能是某座山的山峰,山的下坡处,山的上坡处,如果是山峰,最后会二分终止也会找到,关键是我们的二分方向,并不知道山峰在我们左边还是右边,送你两个字你就明白了,爬山(没错,就是带你去爬山),如果你往下坡方向走,也许可能遇到新的山峰,但是也许是一个一直下降的坡,最后到边界。但是如果你往上坡方向走,就算最后一直上的边界,由于最边界是负无穷,所以就一定能找到山峰,总的一句话,往递增的方向上,二分,一定能找到,往递减的方向只是可能找到,也许没有。

class Solution {
public:int findPeakElement(vector<int>& nums) {int L=0;int R=nums.size()-1;int mid;while(L<R){mid=L+(R-L)/2;if(mid==0) return nums[mid] >= nums[mid+1]? mid: mid +1;if(mid==nums.size()-1) return nums[mid] >= nums[mid-1]? mid: mid -1; if(nums[mid]>max(nums[mid-1],nums[mid+1])){return mid;}else if(nums[mid]<nums[mid-1])R=mid-1;else L=mid+1;}return L ;}
};

这个方法注意一下边界的处理

class Solution {
public:int findPeakElement(vector<int>& nums) {int left = 0;int right = nums.size();int middle;while (left < right) {middle = (left + right) / 2;if (middle < nums.size() - 1 && nums[middle] < nums[middle + 1]) {left = middle + 1;} else if (middle > 0 && nums[middle] < nums[middle - 1]) {right = middle;} elsereturn middle;// nums[mid]=max or mid为边界}return left;}
};

4. 寻找两个正序数组的中位数 (超级难)

中位数:奇数:中间那个数,偶数,中间两个数的平均值。

方法一.不考虑复杂度,直接莽,合并数组。找到中位数。

方法二:数组存放的数其实没什么用,不需要将两个数组真的合并,我们只需要找到中位数在哪里就可以了

class Solution { //不需要将两个数组真的合并,我们只需要找到中位数在哪里就可以了
public:double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {int m = nums1.size();int n = nums2.size();int i = 0, j = 0, num = 0; // i--》nums1的指针int len = m + n;int pre = -1;int p = -1;                               //存值for (num = 0; num <= len / 2; num++) { // 0 1 2 3 4 5pre = p;if (i < m && (j >=n || nums1[i] < nums2[j])) {p = nums1[i++];} // nums1没到头或者nums2到头或者<elsep = nums2[j++];}if (len % 2) //奇数个return p;elsereturn (p + pre) / 2.0;}
};

精华:1.利用pre来存放上一个数,利用p来存放当前的数据。2.移动的条件判断。

for (num = 0; num <= len / 2; num++) { // 0 1 2 3 4 5pre = p;if (i < m && (j >=n || nums1[i] < nums2[j])) {p = nums1[i++];} // nums1没到头或者nums2到头或者<elsep = nums2[j++];}

 方法三:题目是求中位数,其实就是求第 k 小数的一种特殊情况,而求第 k 小数有一种算法。

我们一次遍历就相当于去掉不可能是中位数的一个值,也就是一个一个排除。由于数列是有序的,其实我们完全可以一半儿一半儿的排除。假设我们要找第 k 小数,我们可以每次循环排除掉 k/2 个数。而这k/2个数是较小数数列的前k/2个。

class Solution {
public:int findmid(vector<int>& nums1, vector<int>& nums2, int l1, int r1, int l2,int r2, int k) {if (r1 <= l1) // nums1为空return nums2[l2 + k - 1];if (r2 <= l2) // nums2为空return nums1[l1 + k - 1];int mid1 = (l1 + r1) / 2, mid2 = (l2 + r2) / 2; //分别的中位数int d = mid1 - l1 + 1 + mid2 - l2 + 1;          if (d > k) {if (nums1[mid1] < nums2[mid2])return findmid(nums1, nums2, l1, r1, l2, mid2, k);elsereturn findmid(nums1, nums2, l1, mid1, l2, r2, k);} else {if (nums1[mid1] < nums2[mid2])return findmid(nums1, nums2, mid1 + 1, r1, l2, r2,k - (mid1 - l1 + 1));elsereturn findmid(nums1, nums2, l1, r1, mid2 + 1, r2,k - (mid2 - l2 + 1));}}double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {int n = nums1.size(), m = nums2.size();if ((n + m) % 2)return (findmid(nums1, nums2, 0, n, 0, m, 1 + (n + m) / 2));elsereturn (findmid(nums1, nums2, 0, n, 0, m, (n + m) / 2) +findmid(nums1, nums2, 0, n, 0, m, 1 + (n + m) / 2)) /2.0;}
};

 240. 搜索二维矩阵 II

关键信息:(注意矩阵不是正矩阵)

  • 每行的元素从左到右升序排列。
  • 每列的元素从上到下升序排列。

 大体思路:

1,暴力法,两层for循环。复杂度O(mn)

2.删 类似前面做的旋转矩阵。 但要从右上角或者左下角开始删。

class Solution {//删,从右上角开始删。
public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int n=matrix.size();//行数int m=matrix[0].size();//列数int row=0;int col=m-1;while(col>=0&&row<=n-1){//终止条件到达左下角 【n-1,0】if(matrix[row][col]>target)col--;//col 确定下来了else if(matrix[row][col]<target)row++;else return true;//等于}return false;}
};
3.二分法一下子去掉k/4个元素:

1.找到中间元素:9;2.9>tatget;去掉右下角。3.分别递归其他三个部分。


class Solution {
public://在[rangeX1~rangeX2][rangeY1~rangeY2]范围内搜索bool searchA(vector<vector<int>>& matrix, int target,int rangeX1,int rangeX2,int rangeY1,int rangeY2){//递归中止if(rangeX1>rangeX2||rangeY1>rangeY2){return false;}//计算中心位置(c_x,c_y)int c_x=(rangeX1+rangeX2)/2;int c_y=(rangeY1+rangeY2)/2;//递归,三部分的结果分别为p1,p2,p3bool p1,p2,p3;if(matrix[c_x][c_y]==target){return true;}else if(matrix[c_x][c_y]<target){p1=searchA(matrix,target,rangeX1,c_x,c_y+1,rangeY2);//右上p2=searchA(matrix,target,c_x+1,rangeX2,c_y+1,rangeY2);//右下p3=searchA(matrix,target,c_x+1,rangeX2,rangeY1,c_y);//左下}else{p1=searchA(matrix,target,rangeX1,c_x-1,c_y,rangeY2);//右上p2=searchA(matrix,target,rangeX1,c_x-1,rangeY1,c_y-1);//左上p3=searchA(matrix,target,c_x,rangeX2,rangeY1,c_y-1);//左下}return p1||p2||p3;//一真为真,只要一个存在就返回ture}bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {if(matrix.size()==0||matrix[0].size()==0){return false;}int n=matrix.size(),m=matrix[0].size();return searchA(matrix,target,0,n-1,0,m-1);}
};

4.二分法迭代器:这个主要强调一下迭代器的用法

1)auto遍历迭代器


vector<int> ans;
for(auto it=ans.begin();it!=ans.end();it++)
{cout<<*it<<endl;
}
为什么begin()要指向开头第一个元素,而end()要指向末尾最后一个元素的下一个呢?因为:方便判断,左闭合范围begin()==end():意味着容器里没有元素begin()+1==end():意味着容器里只有一个元素begin()+1<end():意味着容器里不止一个元素 

2)lower_bound()--》二分查找

C++ STL标准库中还提供有 lower_bound()、upper_bound()、equal_range() 以及 binary_search() 这 4 个查找函数,它们的底层实现采用的都是二分查找的方式。

C++ 函数 std::map::lower_bound() 返回一个迭代器,它指向不小于键 k 的第一个元素。lower_bound() 函数定义在<algorithm>头文件中,其语法格式有 2 种,分别为:
//在 [first, last) 区域内查找不小于 val 的元素
ForwardIterator lower_bound (ForwardIterator first, ForwardIterator last,const T& val);
//在 [first, last) 区域内查找第一个不符合 comp 规则的元素
ForwardIterator lower_bound (ForwardIterator first, ForwardIterator last,const T& val, Compare comp);//实例:#include <iostream>     // std::cout
#include <algorithm>    // std::lower_bound
#include <vector>       // std::vector
using namespace std;
//以普通函数的方式定义查找规则
bool mycomp(int i,int j) { return i>j; }
//以函数对象的形式定义查找规则
class mycomp2 {
public:bool operator()(const int& i, const int& j) {return i>j;//增加 }
};
int main() {int a[5] = {0,1,2,5,4};//从 a 数组中找到第一个不小于 3 的元素int *p = lower_bound(a, a + 5, 3);//返回的是值 --》a[3]=5 cout << "*p = " << *p << endl;//*p =5 vector<int> myvector{ 4,8,3,1,2 };//根据 mycomp2 规则,从 myvector 容器中找到第一个违背 mycomp2 规则的元素的值//mycomp2 i>j增序-->找到第一个不是增序的元素值 vector<int>::iterator iter = lower_bound(myvector.begin(), myvector.end(),3,mycomp2());// *iter = 3cout << "*iter = " << *iter;return 0;
}

本题代码: 

class Solution {
public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int n=matrix.size();int m=matrix[0].size();for(auto &row:matrix){//行遍历auto it=lower_bound(row.begin(),row.end(),target);//每行内部遍历if(it!=row.end()&&*it==target)return true;}return false;}
};

69. x 的平方根 

方法一:遍历 

注意:int*int会发生溢出 所以i的变量类型是long long

Leetcode:runtime error: signed integer overflow: 46341 * 46341 cannot be represent in type “int“
class Solution {
public:int mySqrt(int x) {long long i=0;if(x==1||x==0) return x;for( i=0;i<=x/2;i++){if(i*i>=x)break;}return i*i==x?i:i-1;}
};

方法二:二分查找 

  • 时间复杂度:O(logx),即为二分查找需要的次数。

上面那个方法到k/2,那我们再进一步:

重点: eg。8--》2 所以<= 的时候ans=mid;

else if (mid * mid <= x) {ans = mid;L = mid + 1;}
class Solution { //二分查找
public:int mySqrt(int x) {int ans;int L = 0;int R = x;while (L <= R) {long long  mid = (R - L) / 2 + L;if (mid * mid > x) {R = mid - 1;}else if (mid * mid <= x) {ans = mid;L = mid + 1;}}return ans;}
};

283. 移动零

思考:本来打算直接pop(值==0),但是忘记了,pop_back()只能删除末尾元素 

方法一:记录0元素个数;

class Solution {
public:void moveZeroes(vector<int>& nums) {int n = nums.size();int num = 0; //目前0元素的个数for (int i = 0; i < n; i++) {if (nums[i] == 0) {num++;} elsenums[i - num] = nums[i];}int t=n-num;while (t<n)nums[t++] = 0;}
};

方法二:只保存非0元素。

class Solution {
public:void moveZeroes(vector<int>& nums) {int n=nums.size();int num=0;//目前非0元素的个数for(int i=0;i<n;i++){if(nums[i]!=0){nums[num++]=nums[i];}}while(num<nums.size())nums[num++]=0;}
};

 方法三:双指针(其实就是方法二)

class Solution {
public:void moveZeroes(vector<int>& nums) {int n = nums.size();int left = 0;int right = 0; //快慢指针while (right < n) {if (nums[right] != 0) {swap(nums[left], nums[right]);left++;}right++;}}
};

 415. 字符串相加

方法一:模拟竖式

class Solution { //模拟竖式
public:string addStrings(string num1, string num2) {int tmp = -1;     //用来存放当前两数的和int carry = 0;    //用来存放当前的进位string ans = ""; //设置为字符串巧妙加减int n = max(num1.size(), num2.size());int i = num1.size()-1;int j= num2.size()-1;while (i >= 0 || j >= 0) {int n1 = i >= 0 ? num1[i] - '0' : 0;int n2 = j >= 0 ? num2[j] - '0' : 0;tmp = n1 + n2 + carry;carry = tmp / 10;ans = to_string(tmp % 10) + ans;i--;j--;}return carry ? "1" + ans : ans;}
};

注意:这三句将字符串运用的极其巧妙。(这里注意看注释)

 string ans = ""; //设置为字符串巧妙加减
//"";注意这里不用“ ”ans = to_string(tmp % 10) + ans;
//to_string  C++里面字符串转换
//注意顺序return carry ? "1" + ans : ans;//进位前面+1;

方法二:逻辑一样,不知道复杂度为何差那么大 

这个复杂度很小。

class Solution {
public:string addStrings(string num1, string num2) {//竖式模拟int index1 = num1.length() - 1, index2 = num2.length() - 1;string& c = index2 < index1 ? num1 : num2;//c为长的字符串的复制,其实就是要个长度有用int index3 = index2 < index1 ? index1 : index2;//index3为c的长度int x = 0, y =0, CY = 0;//CY为进位while(index3 >= 0){if(index1 >= 0){x = num1[index1] - '0';//变为int}if(index2 >= 0){y = num2[index2] - '0';}c[index3] = (x + y + CY) % 10 + '0';//变为charCY = (x + y + CY) / 10;x = 0, y = 0;index3--, index2--, index1--;}return CY == 0 ? c : "1" + c;}
};

进入进入滑动窗口! 终于拜拜二分!

3. 无重复字符的最长子串 (这道题之前做过了)

  //思想:遍历s中的元素,如果不在滑动窗口中重复,就加入窗口(此时,窗口长度会增大)。如果重复,就从窗口中删除元素(此时窗口长度减少,开始位置后移)。

class Solution { //滑动窗口//大题思想:遍历s中的元素,如果不在滑动窗口中重复,就加入窗口(此时,窗口长度会增大)。如果重复,就从窗口中删除元素(此时窗口长度减少,开始位置后移)。
public:int lengthOfLongestSubstring(string s) {int ans, maxl = 0; // ans临时变量,maxl最大值;if (s.size() == 0)return 0;//创建无序字符集合,保存滑动窗口unordered_set<char> huadong;int start = 0;for (int i = 0; i < s.size(); i++) {while (huadong.find(s[i]) !=huadong.end()) { //当前字符s[i]在集合 huadong中已经存在huadong.erase(s[start]);start++;}maxl = max(maxl, i - start + 1);huadong.insert(s[i]);}return maxl;}
};

一些小技巧 

(huadong.find(s[i]) !=huadong.end())//类似python in

 0076. 最小覆盖子串

class Solution {
public:string minWindow(string s, string t) {// 用一个无序映射(unordered_map)来记录需要的字符及其出现次数unordered_map<char, int> need;// 需要的字符总数int need_cnt = t.size();// 最小窗口子串的起始位置和长度int min_begin = 0, min_len = 0;// 遍历字符串t,记录每个字符及其出现次数for (const char& c : t) {need[c]++;}// 使用滑动窗口思想来查找最小窗口子串for (int left = 0, right = 0; right < s.size(); ++right) {// 当前字符在need中出现的次数大于0时,说明是需要的字符if (need[s[right]] > 0) {// need_cnt减少1,表示找到了一个匹配字符need_cnt--;}// need中该字符的出现次数减少1,表示已经使用了一个字符need[s[right]]--;// 当需要的字符都找到时,满足条件if (need_cnt == 0) {// 缩小窗口范围,尽量找到更小的窗口while (need[s[left]] < 0) {// need中该字符的出现次数加1,表示窗口向右缩小,该字符变成需要的字符need[s[left]]++;left++;                    }// 计算当前窗口的长度int len = right - left + 1;// 更新最小窗口子串的起始位置和长度if (min_len == 0 || len < min_len) {min_begin = left;min_len = len;}// 窗口的左边界右移,破坏满足条件的窗口,继续寻找下一个满足条件的窗口need[s[left]]++;need_cnt++;left++;}}// 返回最小窗口子串return s.substr(min_begin, min_len);}
};

 718. 最长重复子数组

第一反应:KMP? 结果想多了

思路:滑动窗口算法,求解两个数组的最长公共子数组的长度。看图:https://assets.leetcode-cn.com/solution-static/718/718_fig1.gif

class Solution {//滑动窗口
public:int maxL(vector<int>& A, vector<int>& B,int ai,int bi,int len){int ret=0,k=0;//k当前对齐时,重复的个数for(int i=0;i<len;i++){if(A[ai+i]==B[bi+i])k++;//重复加加else k=0;//不重复就0;ret保存最大K值ret=max(ret,k);  }return ret;}int findLength(vector<int>& nums1, vector<int>& nums2) {int i=0;int ret=0;int n=nums1.size();int m=nums2.size();for(int i=0;i<n;i++){//nums1对齐int len=min(m,n-i);//每次比较数组时都比较长度比较短的int maxlen=maxL(nums1,nums2,i,0,len);ret=max(ret,maxlen);}for(int i=0;i<m;i++){int len=min(n,m-i);int maxlen=maxL(nums1,nums2,0,i,len);ret=max(ret,maxlen);}return ret;}
};
  • maxL 函数是用来计算两个数组指定位置开始的子数组的最长公共长度。函数参数解释如下:

    • A 和 B:两个输入数组。
    • ai 和 bi:起始位置的索引。
    • len:子数组的长度。
      函数通过比较 A 和 B 数组在相同位置上的元素,来统计重复的个数 k。如果当前位置的元素相同,则 k 值加 1;如果不相同,则将 k 重置为 0。每次更新 k 的同时,记录最大的 k 值为 ret。函数返回最大的 ret 值。
  • findLength 函数是主函数,用于计算两个数组的最长公共子数组的长度。函数参数解释如下:

    • nums1 和 nums2:两个输入数组。
      函数首先定义了两个变量 ret 和 maxlen,分别用于保存最大公共子数组的长度和当前计算得到的最长公共子数组的长度。
      然后,通过嵌套的循环遍历 nums1 和 nums2 的不同起始位置,分别调用 maxL 函数求解当前位置开始的最长公共子数组的长度,并更新 maxlen 和 ret
      最后返回 ret,即两个数组的最长公共子数组的长度

83. 删除排序链表中的重复元素(so easy)题目条件保证链表已经按升序 排列

利用数据结构里面链表的删除代码就可以。

注意一下,链表的定义,看开头。

返回方法return head;
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {//链表:链表已经按升序 排列
public:ListNode* deleteDuplicates(ListNode* head) {if(!head) return head;ListNode*p=head->next; ListNode* pre=head;while(p){if(p->val==pre->val){//相等就断链pre->next=p->next;p=pre->next;}else{//指针后移pre=p;p=p->next;} }return head;}
};

82. 删除排序链表中的重复元素 II(升级版)

思路:跳过那些相同的结点。创 头节点的方法值得学习。返回的时候,因为申请了 ans头结点,所以应该返回ans->next;

class Solution { //链表:链表已经按升序 排列
public:ListNode* deleteDuplicates(ListNode* head) {if (!head)return head;//因为head也可能被删除,所以创建头结点ListNode* ans = new ListNode(105, head); // val=105;next=head;//-100 <= Node.val <= 100,保证不会重复ListNode* p = head;ListNode* pre = ans;while (p&&p->next) {if (p->val == p->next->val) { //相等ListNode* tmp = p->next->next;while (tmp && tmp->val == p->val)tmp = tmp->next;pre->next = tmp;p = tmp;}else { //指针后移pre = p;p = p->next;}}return ans->next;}
};

相关文章:

leetcode 刷题2

二分查找的绝妙运用&#xff1a; 看到有序数列&#xff0c;算法复杂度 0033. 搜索旋转排序数组 class Solution { public:int search(vector<int>& nums, int target) {int left 0;int right nums.size() - 1;while (left < right) {int mid left (right - …...

2-SAT问题相关理论和算法

前言 SAT 问题简介 SAT是可满足性、适定性(Satisfiability)问题的简称。一般形式为k-适定性问题或k-可满足性问题&#xff0c;简称 k-SAT。 何为布尔可满足性问题&#xff1f;给定一条真值表达式&#xff0c;包含逻辑变量、逻辑与、逻辑或以及非运算符&#xff0c;如&#x…...

【大数据精讲】全量同步与CDC增量同步方案对比

目录 背景 名词解释 问题与挑战 FlinkCDC DataX 工作原理 调度流程 五、DataX 3.0六大核心优势 性能优化 背景 名词解释 CDC CDC又称变更数据捕获&#xff08;Change Data Capture&#xff09;&#xff0c;开启cdc的源表在插入INSERT、更新UPDATE和删除DELETE活动时…...

自定义通用返回对象

目的&#xff1a;给返回对象补充一些信息&#xff0c;告诉前端这个请求在业务层面上是成功还是失败&#xff0c;以及具体的描述信息。 我们需要自定义错误码&#xff08;因为前端的HTTP状态码默认的值比较少&#xff09;和正常错误返回类。 ErrorCode &#xff1a; package …...

从0开始python学习-51.pytest之接口加密封装

目录 MD5加密 base64加密 rsa加密 MD5加密 1. 封装加密方法 def md5_encode(self,data):data str(data).encode("utf-8")md5_data hashlib.md5(data).hexdigest()return md5_data 2. 写入需要使用加密的接口yaml用例 -request:method: posturl: http://192.168.…...

c++的命名空间

命名空间 一.c的关键字二.命名空间2.1 命名空间定义2.1 命名空间的使用2.1.1加命名空间名称及作用域限定符2.1.2使用using将命名空间中某个成员引入 三.标准命名空间std 一.c的关键字 c中一共有63个关键字 关键字11111asmdoifreturntrycontinueautodoubleinlineshorttypedeff…...

阿富汗塔利班兴起时的比赛代码3475:练85.3 删数问题(Noip1994)

【题目描述】 输入一个高精度的正整数n&#xfffd;&#xff0c;去掉其中任意s&#xfffd;个数字后剩下的数字按原左右次序组成一个新的正整数。编程对给定的n&#xfffd;和s&#xfffd;&#xff0c;寻找一种方案使得剩下的数字组成的新数最小。 输出新的正整数。&#xff0…...

大数据平台红蓝对抗 - 磨利刃,淬精兵!

背景 目前大促备战常见备战工作&#xff1a;专项压测&#xff08;全链路压测、内部压测&#xff09;、灾备演练、降级演练、限流、巡检&#xff08;监控、应用健康度&#xff09;、混沌演练&#xff08;红蓝对抗&#xff09;&#xff0c;如下图所示。随着平台业务越来越复杂&a…...

【2024-01-22】某极验3流程分析-滑块验证码

声明&#xff1a;该专栏涉及的所有案例均为学习使用&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;如有侵权&#xff0c;请私信联系本人删帖&#xff01; 文章目录 一、前言二、抓包流程分析1.刷新页面2.点击按钮进行验证…...

Laya2.13.3接入FGUI

下载与复制文件与Laya1.x类似&#xff0c;可以看我上一篇&#xff1a; Laya1.8.4接入FariyGui&#xff0c;以及其中踩的坑-CSDN博客 不同的是&#xff1a; 两个库文件需要在index.js中引入 新建一个脚本将fgui中搭建好的UI包引入&#xff1a; export default class GameApp…...

短视频账号矩阵系统+无人直播系统源码技术开发

短视频账号矩阵系统无人直播系统源码技术开发涉及到多个领域&#xff0c;包括但不限于前端开发、后端开发、数据库设计、网络通信等。 以下是一些基本技术的步骤和注意事项&#xff1a; 1.技术需求分析设计&#xff1a;首先&#xff0c;需要明确开发短视频账号矩阵系统和无人直…...

C语言或C++通过IShellLinkA创建或解析lnk快捷方式(使用char字符数组)

本例程用到的COM接口有IShellLinkA和IPersistFile。 请注意因为函数参数的类型不为BSTR&#xff0c;所以这两个接口可直接传char *或wchar_t *字符串&#xff0c;不需要提前转化为BSTR类型。 C语言的写法&#xff1a; /* 这个程序只能在C编译器下编译成功, 请确保源文件的扩展…...

Spring源码学习-Spring流程概述(一)

Spring启动的流程 public class Test {public static void main(String[] args) {ClassPathXmlApplicationContext context new ClassPathXmlApplicationContext("applicationContext.xml");Student bean context.getBean(Student.class);context.close();} }调用…...

Figma怎么设置中文,Figma有中文版吗?

不是很多人不想用 Figma&#xff0c;真是因为纯英文界面而头疼。这就是为什么有人会到处搜索 Figma 如何设置中文这样的问题。 然后我们直接快刀斩乱麻&#xff0c;Figma 没有中文版&#xff0c;但是我们还有其他的方法&#xff1a;例如&#xff0c; Figma 添加一个插件来解决…...

智慧文旅一机游:科技与文化的完美结合,引领智慧文旅新潮流,智慧旅游未来已来

一、科技与文化的完美结合&#xff1a;智慧文旅一机游的核心理念 智慧文旅一机游&#xff0c;是科技与文化相融合的产物&#xff0c;它不仅代表着旅游行业的创新与发展&#xff0c;更是一种文化与科技完美结合的生活方式。一机游的核心理念在于通过先进的科技手段&#xff0c;提…...

多维时序 | Matlab实现CNN-LSTM-Mutilhead-Attention卷积长短期记忆神经网络融合多头注意力机制多变量时间序列预测

多维时序 | Matlab实现CNN-LSTM-Mutilhead-Attention卷积长短期记忆神经网络融合多头注意力机制多变量时间序列预测 目录 多维时序 | Matlab实现CNN-LSTM-Mutilhead-Attention卷积长短期记忆神经网络融合多头注意力机制多变量时间序列预测效果一览基本介绍程序设计参考资料 效果…...

软件工程实验报告(完整)

博主介绍&#xff1a;✌全网粉丝喜爱、前后端领域优质创作者、本质互联网精神、坚持优质作品共享、掘金/腾讯云/阿里云等平台优质作者、擅长前后端项目开发和毕业项目实战✌有需要可以联系作者我哦&#xff01; &#x1f345;附上相关C语言版源码讲解&#x1f345; &#x1f44…...

Java零基础学习20:集合的练习

编写博客目的&#xff1a;本系列博客均根据B站黑马程序员系列视频学习和编写目的在于记录自己的学习点滴&#xff0c;方便后续回忆和查找相关知识点&#xff0c;不足之处恳请各位有缘的朋友指正。 一、查找id对应的集合索引 package www.itheima;import java.util.ArrayList;…...

【latex】在Overleaf的IEEE会议模板中,快速插入参考文献

【LaTeX】在Overleaf的IEEE会议模板中&#xff0c;快速插入参考文献 写在最前面第一步&#xff1a;在文献检索网站导出引用文献的bib文件第二步&#xff1a;编辑overleaf模版方法二&#xff1a;EduBirdie生成参考文献&#xff08;补充&#xff09;使用LaTeX在Overleaf的IEEE会议…...

java反射之Field用法(获取对象的字段名和属性值)

一、概述 Field是一个类,位于java.lang.reflect包下。在Java反射中Field类描述的是类的属性信息&#xff0c;功能包括&#xff1a; 获取当前对象的成员变量的类型 对成员变量重新设值 二、如何获取Field类对象 getField(String name)&#xff1a; 获取类特定的方法&#xff0c…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...

day36-多路IO复用

一、基本概念 &#xff08;服务器多客户端模型&#xff09; 定义&#xff1a;单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用&#xff1a;应用程序通常需要处理来自多条事件流中的事件&#xff0c;比如我现在用的电脑&#xff0c;需要同时处理键盘鼠标…...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...