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

✔ ★算法基础笔记(Acwing)(一)—— 基础算法(20道题)【java版本】

基础算法

  • 一、快速排序
        • 1. 快速排序例题
        • 2. 第k个数( 快速选择 ) ✔ ✔1.31
            • ★快排二刷总结( 4点 )
  • 二、归并排序
        • 1. 归并排序模板题 ✔ ✔1.31
            • ★二刷总结
        • ★2. 逆序对的数量 ✔ ✔1.31
            • ★二刷总结
  • 三、二分
        • 1. 数的范围 ✔1.31
            • ★二刷总结(mid >= x 则是 输出最左边一个)
            • 第一个大于等于x的数 || 最后一个大于等于x的数
        • ★2. 数的三次方根 1e-8 ✔1.31
            • 二刷总结
  • 四、高精度
        • 1. 高精度加法 ✔1.31
          • BigInteger
        • 2. 高精度减法 ✔1.31
          • a.subtract(b)
        • 3. 高精度乘法
        • 4. 高精度除法 ✔(12分钟)2.1
  • 五、前缀和S与差分a
        • 1. 前缀和(2分钟)
        • 2. 子矩阵的和(7分钟)
        • 3. 差分(9分钟)
            • 二刷总结
        • 4. 差分矩阵(12分钟)
  • 六、双指针
        • ★ 1. 最长连续不重复子序列(20分钟)
            • 二刷总结(以空间换时间)
        • 2. 数组元素的目标和(7分钟)
        • 3. 判断子序列(8分钟)
  • 七、二进制
        • 1. 位运算算法(2分钟)
            • 返回n的最后一位1:lowbit(n) = n & -n
            • 一共有多少1 : while n = n ^(n & -n)或者 n -= n & -n
  • 八、离散化
            • 去重 V.erase(unique(.begin(),.end()),.end());
        • 1. ★ 区间和
            • 在草稿纸上列出需要几个数组,就清晰了
  • 九、区间合并
        • 1. 区间合并(7分钟)

一、快速排序

1. 快速排序例题

在这里插入图片描述
原题链接

import java.util.*;public class Main {public static void main (String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int[] nums = new int[n];for (int i = 0; i < n; i++) {nums[i] = scanner.nextInt();}quickSort(0,n-1,nums);for (int i=0; i<n; i++) {System.out.print(nums[i] + " ");}}public static void quickSort (int l,int r,int[] nums) {if(l>=r) {return;}int x = nums[(l+r)/2];int i = l - 1,j = r + 1;while (i < j) {while (nums[++i] < x);while (nums[--j] > x);if (i < j) {int t = nums[i];nums[i] = nums[j];nums[j] = t;}}quickSort(l,j,nums);quickSort(j+1,r,nums);}
}

2. 第k个数( 快速选择 ) ✔ ✔1.31

在这里插入图片描述
原题链接

import java.util.*;public class Main {public static int k;public static void main (String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();k = scanner.nextInt();int[] nums = new int[n];for (int i = 0; i < n; i++) {nums[i] = scanner.nextInt();}System.out.print(quickSortTheK_thNumber(0,n-1,nums));}public static int quickSortTheK_thNumber (int l,int r,int[] nums) {if (l >= r) {return nums[r];}int x = nums[(l+r)>>1];int i = l - 1, j = r + 1;while (i < j) {while (nums[++i] < x);while (nums[--j] > x);if (i < j) {int t = nums[i];nums[i] = nums[j];nums[j] = t;}}if (j < k-1) {return quickSortTheK_thNumber(j+1,r,nums);} else {return quickSortTheK_thNumber(l,j,nums);}}
}
★快排二刷总结( 4点 )
  1. if (l >= r) return;
  2. 没有等于号
  3. 交换有条件if (i < j) swap(q[i], q[j]);
  4. 基值要固定x = q[l + r >> 1]
  5. j最后的角标表示 l-j 是小于x的

二、归并排序

void merge_sort(int q[], int l, int r)
{if (l >= r) return;int mid = l + r >> 1;merge_sort(q, l, mid);merge_sort(q, mid + 1, r);int k = 0, i = l, j = mid + 1;while (i <= mid && j <= r)if (q[i] <= q[j]) tmp[k ++ ] = q[i ++ ];else tmp[k ++ ] = q[j ++ ];while (i <= mid) tmp[k ++ ] = q[i ++ ];while (j <= r) tmp[k ++ ] = q[j ++ ];for (i = l, j = 0; i <= r; i ++, j ++ ) q[i] = tmp[j];
}
  1. 先分段
  2. 用一个额外数组,汇总两个分数组的排序

1. 归并排序模板题 ✔ ✔1.31

★二刷总结
  1. r = mid + 1
  2. while if
  3. temp 的k = 1
    a 的i = L

原题链接

在这里插入图片描述

import java.util.*;public class Main {public static void main (String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int[] nums = new int[n];for (int i = 0; i < n; i++) {nums[i] = scanner.nextInt();}merge_sort(0,n-1,nums);for (int i = 0; i < n; i++) {System.out.print(nums[i] + " ");}}public static void merge_sort (int l,int r,int[] nums) {if (l >= r) {return;}int mid = (l+r) >> 1;int i = l,j = mid + 1;merge_sort(l,mid,nums);merge_sort(mid+1,r,nums);int[] temp = new int[r - l + 1];int k = 0;while (i <= mid && j <= r) {if (nums[i] <= nums[j]) {temp[k++] = nums[i++];} else {temp[k++] = nums[j++];}}while (i <= mid) {temp[k++] = nums[i++];}while (j <= r) {temp[k++] = nums[j++];}for (int q = l,p = 0; q <= r; q++) {nums[q] = temp[p++];}}
}

★2. 逆序对的数量 ✔ ✔1.31

原题链接

★二刷总结
  1. java中new不能全new

在这里插入图片描述

import java.util.*;public class Main {public static long ans = 0;public static void main (String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int[] nums = new int[n];for (int i = 0; i < n; i++) {nums[i] = scanner.nextInt();}numberOfReverseOrderPairs(0,n-1,nums);System.out.print(ans);}public static void numberOfReverseOrderPairs(int l,int r,int[] nums){if (l >= r) {return;}int mid = (l+r)>>1;int i = l,j = mid+1;numberOfReverseOrderPairs(l,mid,nums);numberOfReverseOrderPairs(mid+1,r,nums);int[] temp = new int[r-l+1];int k = 0;while (i <= mid && j <= r) {if (nums[i] <= nums[j]) {temp[k++] = nums[i++];} else {temp[k++] = nums[j++];ans += mid - i + 1;}}while (i <= mid) {temp[k++] = nums[i++];}while (j <= r) {temp[k++] = nums[j++];}for (int q = l,p = 0; q <= r; q++) {nums[q] = temp[p++];}}
}

三、二分

1. 数的范围 ✔1.31

原题链接

★二刷总结(mid >= x 则是 输出最左边一个)
第一个大于等于x的数 || 最后一个大于等于x的数

mid < x 则是 往右

import java.util.*;public class Main {public static void main (String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();int[] nums = new int[n];for (int i = 0; i < n; i++) {nums[i] = scanner.nextInt();}for (int i = 0; i < m; i++) {int x = scanner.nextInt();int p = 0,q = 0;int l = 0,r = n-1;while (l < r) {int mid = (l+r)>>1;if (nums[mid] < x) {l = mid+1;} else {r = mid;}}p = r;l = 0;r = n-1;while (l < r) {int mid = (l+r+1)>>1;if (nums[mid] <= x) {l = mid;} else {r = mid - 1;}}q = r;if (nums[q] != x) {System.out.println(-1 + " " + -1); } else {System.out.println(p + " " + q);}}}
}

★2. 数的三次方根 1e-8 ✔1.31

原题链接
在这里插入图片描述

二刷总结
  1. 精确度是1e-8
  2. l或者r直接等于mid
import java.util.*;public class Main {public static void main (String[] args) {Scanner scanner = new Scanner(System.in);double n = scanner.nextDouble();double l = (double)-1e5;double r = 1e5*1.0;while (r - l > 1e-8) {double mid = (l+r)/2;if (mid * mid * mid <= n) {l = mid;} else {r = mid;}}System.out.printf("%.6f",l);}
}

四、高精度

1. 高精度加法 ✔1.31

原题链接
二刷:

  1. 因为先计算小数,所以先把小数入 vector
  2. 存放的时候先存放小数,这样i 一个角标就可以作为两个数的运算位置进行运算,如果相反的话,因为需要先计算最小值,那么就需要用两个角标指向最小值了
    在这里插入图片描述
BigInteger
import java.io.BufferedInputStream;
import java.math.BigInteger;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);BigInteger a = scanner.nextBigInteger();BigInteger b = scanner.nextBigInteger();System.out.println(a.add(b));scanner.close();}}
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String s1 = scanner.next();String s2 = scanner.next();List<Integer> A = new ArrayList<>(s1.length());List<Integer> B = new ArrayList<>(s2.length());for (int i = s1.length() - 1; i >= 0; i--) A.add(s1.charAt(i) - '0');for (int i = s2.length() - 1; i >= 0; i--) B.add(s2.charAt(i) - '0');List<Integer> C = add(A, B);for (int i = C.size() - 1; i >= 0; i--) System.out.printf(C.get(i) + "");}private static List<Integer> add(List<Integer> A, List<Integer> B) {List<Integer>C=new ArrayList<>(Math.max(A.size(),B.size())+2);int t=0;for(int i=0;i<A.size() || i<B.size();i++){if(i<A.size())t+=A.get(i);if(i<B.size())t+=B.get(i);C.add(t%10);t/=10;}if(t!=0) C.add(t);return C;}
}

2. 高精度减法 ✔1.31

原题链接
在这里插入图片描述
二刷:

  1. 小减大 需要转换成 大-小
  2. 如果出现负数 (x+10)%10 t = 1不是-1
  3. t = a[i] - t; t = t - b[i]
a.subtract(b)
import java.io.*;
import java.math.BigInteger;public class Main {public static void main(String[] args) throws IOException{BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));BigInteger a = new BigInteger(reader.readLine());BigInteger b = new BigInteger(reader.readLine());System.out.println(a.subtract(b));reader.close();}
}
import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;public class Main{public static void main(String[] args){Scanner scanner = new Scanner(System.in);String s1 = scanner.next();String s2 = scanner.next();List<Integer> A = new ArrayList<>();List<Integer> B = new ArrayList<>();for(int i = s1.length() - 1;i >= 0;i --) A.add(s1.charAt(i) - '0');for(int i = s2.length() - 1;i  >= 0; i --) B.add(s2.charAt(i) - '0');if(!cmp(A,B)){System.out.print("-");}List<Integer> C = sub(A,B);for(int i = C.size() - 1;i >= 0; i --){System.out.print(C.get(i));}}public static List<Integer> sub(List<Integer> A,List<Integer> B){if(!cmp(A,B)){return sub(B,A);}List<Integer> C = new ArrayList<>();int t = 0;for(int i = 0;i < A.size();i ++){//这里应该是A.get(i) - B.get(i) - t ,因为可能B为零,所以需要判断一下是不是存在t = A.get(i) - t;if(i < B.size()) t -= B.get(i);C.add((t + 10) % 10);if(t < 0) t = 1;else t = 0;}//删除指定下标下面的值while(C.size() > 1 && C.get(C.size() - 1) == 0)  C.remove(C.size() - 1);return C;}public static boolean cmp(List<Integer> A,List<Integer> B){if(A.size() != B.size()) return A.size() > B.size();/* if(A.size() >= B.size()){return true;}else{return false;}*/for(int i = A.size() - 1;i >= 0;i --){if(A.get(i) != B.get(i)) {return A.get(i) > B.get(i);}}return true;}
}

3. 高精度乘法

二刷:

  1. 在草稿纸上演算一遍 运算过程,便知道 代码逻辑
    原题链接
    在这里插入图片描述
import java.util.*;public class Main {public static void main (String[] args) {Scanner scanner = new Scanner(System.in);String a = scanner.next();int b = scanner.nextInt();List<Integer> A = new ArrayList<>(a.length());for (int i = a.length()-1; i >= 0; i--) A.add(a.charAt(i) - '0');List<Integer> C = mul(A,b);for (int i = C.size()-1; i >= 0; i--) System.out.print(C.get(i));}public static List<Integer> mul (List<Integer> A,int b) {List<Integer> C = new ArrayList<>(A.size());int t = 0;for (int i = 0; i < A.size(); i++) {t = t + A.get(i)*b;C.add(t%10);t /= 10;}while (t != 0) {C.add(t%10);t /= 10;}while (C.size() > 1 && C.get(C.size()-1) == 0) {C.remove(C.size() - 1);}return C;}
}

4. 高精度除法 ✔(12分钟)2.1

原题链接

在这里插入图片描述

#include <iostream>
#include <vector>
#include <algorithm>using namespace std;vector<int> div(vector<int> &A, int b, int &r)
{vector<int> C;r = 0;for (int i = A.size() - 1; i >= 0; i -- ){r = r * 10 + A[i];C.push_back(r / b);r %= b;}reverse(C.begin(), C.end());while (C.size() > 1 && C.back() == 0) C.pop_back();return C;
}int main()
{string a;vector<int> A;int B;cin >> a >> B;for (int i = a.size() - 1; i >= 0; i -- ) A.push_back(a[i] - '0');int r;auto C = div(A, B, r);for (int i = C.size() - 1; i >= 0; i -- ) cout << C[i];cout << endl << r << endl;return 0;
}

五、前缀和S与差分a

1. 前缀和(2分钟)

原题链接

在这里插入图片描述

import java.util.*;public class Main {public static void main (String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();int[] a = new int[n+1];int[] s = new int[n+1];for (int i = 1; i <= n; i++) { a[i] = scanner.nextInt(); }s[1] = a[1];for (int i = 2; i <= n; i++) {s[i] = a[i] + s[i-1];}while (m-- != 0) {int l = scanner.nextInt();int r = scanner.nextInt();System.out.println(s[r]-s[l-1]);}}
}

2. 子矩阵的和(7分钟)

原题链接
在这里插入图片描述

import java.util.*;public class Main {public static void main (String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();int q = scanner.nextInt();int[][] a = new int[n+1][m+1];int[][] s = new int[n+1][m+1];for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++) {a[i][j] = scanner.nextInt();} }for(int i = 1 ; i <= n  ; i ++ ){for(int j = 1 ;j <= m ; j ++ ){s[i][j] = s[i-1][j] + s[i][j-1] - s[i-1][j-1] + a[i][j];}}while (q-->0) {int x1 = scanner.nextInt();int y1 = scanner.nextInt();int x2 = scanner.nextInt();int y2 = scanner.nextInt();System.out.println(s[x2][y2] - s[x1-1][y2] - s[x2][y1-1] + s[x1-1][y1-1]);}}
}

3. 差分(9分钟)

二刷总结
  1. 由差分求s时,是要有数据连续性的,前面的改变了,要保证对应后面的也跟着

原题链接

import java.util.*;public class Main {public static void main (String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();int[] nums = new int[n+2];for (int i = 1; i <= n; i++) {nums[i] = scanner.nextInt();}for (int i = n; i >= 1; i--) {nums[i] = nums[i]-nums[i-1];}for (int i = 0; i < m; i++) {int l = scanner.nextInt();int r = scanner.nextInt();int c = scanner.nextInt();nums[l] += c;nums[r+1] -= c;}for (int i = 1; i <= n; i++) {nums[i] += nums[i-1];System.out.printf("%d ",nums[i]);}}
}

4. 差分矩阵(12分钟)

原题链接

import java.util.*;public class Main {public static void main (String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();int q = scanner.nextInt();int[][] splits = new int[n+2][m+2];int[][] sum = new int[n+2][m+2];for (int i = 1; i <= n; i++) {for(int j = 1; j <= m; j++) {sum[i][j] = scanner.nextInt();splits[i][j] = sum[i][j] - sum[i-1][j] - sum[i][j-1] + sum[i-1][j-1];}}for (int i = 0; i < q; i++) {int x1 = scanner.nextInt();int y1 = scanner.nextInt();int x2 = scanner.nextInt();int y2 = scanner.nextInt();int c = scanner.nextInt();splits[x1][y1] += c;splits[x1][y2+1] -= c;splits[x2+1][y1] -= c;splits[x2+1][y2+1] += c;}for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {sum[i][j] = splits[i][j] + sum[i-1][j] + sum[i][j-1] - sum[i-1][j-1];System.out.print(sum[i][j] + " ");}System.out.println();}}
}

六、双指针

★ 1. 最长连续不重复子序列(20分钟)

二刷总结(以空间换时间)

原题链接

import java.util.Scanner;
public class Main {public static void main(String[] args){Scanner scan = new Scanner(System.in);int n = scan.nextInt();int[] a = new int[100010];int[] s = new int[100010];for(int i = 0 ; i < n ; i ++ ){a[i] = scan.nextInt();}int res = 0;for(int i = 0 , j = 0 ;i < n ; i ++ ){//比如一开始S[2]是0;然后你的a[1] = 2;那么s[2] = 1;//然后如果a[2] = 2 ;那么第二次出现所以s[2] = 2;这样来证明是不是出现两次s[a[i]] ++ ;while(j < i && s[a[i]] > 1){//一开始j是跟i在同个位置,i在移动,j原地不动,只要上面出现两次,j开始移动//j移动到i的位置,下面的代码就是i走过的路,让s[i] 数组里面加1的位置全部减1,就变回0;所以就继续往下统计长度s[a[j]] -- ;j++;}//i-j+1是统计长度的公式;res = Math.max(res, i-j+1);}System.out.println(res);}
}//这里填你的代码^^
//注意代码要放在两组三个点之间,才可以正确显示代码高亮哦~

2. 数组元素的目标和(7分钟)

原题链接

import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();int x = scanner.nextInt();int[] A = new int[n+1];int[] B = new int[m+1];for (int i = 0; i < n; i++) A[i] = scanner.nextInt();for (int i = 0; i < m; i++) B[i] = scanner.nextInt();for (int i = 0,j = m-1; i < n && j >= 0;) {if (A[i] + B[j] < x) {i++;} else if (A[i] + B[j] == x) {System.out.print(i + " " + j);break;} else {j--;}}}
}

3. 判断子序列(8分钟)

原题链接

import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();int[] a = new int[n+1];int[] b = new int[m+1];for (int i = 0; i < n; i++) a[i] = scanner.nextInt();for (int j = 0; j < m; j++) b[j] = scanner.nextInt();boolean flag = false;for (int i = 0,j = 0; j < m; j++) {if (a[i] == b[j]) {i++;if (i == n) {System.out.print("Yes");flag = true;break;}}}if (flag == false) {System.out.print("No");}}
}

七、二进制

最全二进制算法总结

1. 位运算算法(2分钟)

返回n的最后一位1:lowbit(n) = n & -n
一共有多少1 : while n = n ^(n & -n)或者 n -= n & -n

原题链接

import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int[] nums = new int[n];for (int i = 0; i < n; i++) {nums[i] = scanner.nextInt();System.out.print(numberOfOneInBinary(nums[i]) + " ");}}public static int numberOfOneInBinary(int num) {int cnt = 0;while (num != 0) {num -= (num & -num);cnt++;}return cnt;}
}

八、离散化

sort(alls.begin(),alls.end());
alls.erase(unique(alls.begin(),alls.end()),alls.end());
去重 V.erase(unique(.begin(),.end()),.end());

1. ★ 区间和

原题链接

在草稿纸上列出需要几个数组,就清晰了
import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();pair[] add = new pair[n+2];pair[] query = new pair[m];List<Integer> arrayMap = new ArrayList<>(n+m*2);int[] sum = new int[n+m*2];for (int i = 0; i < n; i++) {add[i] = new pair();add[i].l = scanner.nextInt();add[i].r = scanner.nextInt();arrayMap.add(add[i].l);}for (int i = 0; i < m; i++) {query[i] = new pair();query[i].l = scanner.nextInt();query[i].r = scanner.nextInt();arrayMap.add(query[i].l);arrayMap.add(query[i].r);}arrayMap = new ArrayList<>(new HashSet<>(arrayMap));Collections.sort(arrayMap);for (int i = 0; i < n; i++) {sum[arrayMapIndexOf(add[i].l,arrayMap)] += add[i].r;}for (int i = 0; i < arrayMap.size(); i++) {if(i != 0) {sum[i] += sum[i-1];}}for (int i = 0; i < query.length; i++) {int l = arrayMapIndexOf(query[i].l,arrayMap);int r = arrayMapIndexOf(query[i].r,arrayMap);if (l == 0) {System.out.print(sum[r] + "\n");} else {System.out.print(sum[r]-sum[l-1] + "\n");}}}static class pair {int l;int r;}private static int arrayMapIndexOf(int k,List<Integer> arrayMap) {int l = 0,r = arrayMap.size()-1;while (l < r) {int mid = (l+r+1) >> 1;if (arrayMap.get(mid) <= k) {l = mid;} else {r = mid - 1;}}return r;}
}

九、区间合并

1. 区间合并(7分钟)

原题链接

贪心做法

import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();pair[] range = new pair[n];for (int i = 0; i < n; i++) {range[i] = new pair();range[i].l = scanner.nextInt();range[i].r = scanner.nextInt();}Arrays.sort(range,new Comparator<pair>(){@Overridepublic int compare(pair o1,pair o2) {if (o1.l == o2.l) {return o1.r - o2.r;} else {return o1.l - o2.l;}}});int st = (int)-2e9-1;int ed = (int)-2e9-1;int cnt = 0;for (int i = 0; i < n; i++) {if (ed < range[i].l) {st = range[i].l;ed = range[i].r;cnt++;} else {ed = Math.max(ed,range[i].r);}}System.out.print(cnt);}static class pair {int l;int r;}}

相关文章:

✔ ★算法基础笔记(Acwing)(一)—— 基础算法(20道题)【java版本】

基础算法 一、快速排序1. 快速排序例题2. 第k个数( 快速选择 ) ✔ ✔1.31★快排二刷总结( 4点 ) 二、归并排序1. 归并排序模板题 ✔ ✔1.31★二刷总结 ★2. 逆序对的数量 ✔ ✔1.31★二刷总结 三、二分1. 数的范围 ✔1.31★二刷总结(mid > x 则是 输出最左边一个)第一个大于…...

简单记录下gin中使用中间件记录操作日志

1、直接定义中间件package middlewareimport ("bytes""encoding/json""fmt""github.com/gin-gonic/gin""go.uber.org/zap""io""strconv""strings" )func LoggerMiddleWare() gin.HandlerFunc…...

基于Matlab利用IRM和RRTstar实现无人机路径规划(附上源码+数据+说明+报告+PPT)

无人机路径规划是无人机应用领域中的关键问题之一。本文提出了一种基于IRM&#xff08;Informed RRTstar Method&#xff09;和RRTstar&#xff08;Rapidly-exploring Random Tree star&#xff09;算法的无人机路径规划方法&#xff0c;并使用Matlab进行实现。该方法通过结合I…...

uniapp使用@microsoft/signalr(报错“ReferenceError: require is not defined“)

后台老哥要用微软的signalr&#xff0c;总结了一些经验和问题 引入方法 1、npm npm i microsoft/signalr 2、下载他的js或者cdn <script src"https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/6.0.1/signalr.js"></script>在uniapp中&…...

CloudCompare 二次开发(9)——半径滤波

目录 一、概述二、代码集成三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、概述 使用CloudCompare与PCL的混合编程实现点云半径滤波。半径滤波的算法原理见:PCL 半径滤波器。基于PCL将半径滤波集成到Cl…...

ElementUI浅尝辄止29:Breadcrumb 面包屑

显示当前页面的路径&#xff0c;快速返回之前的任意页面。 1.如何使用&#xff1f; 在el-breadcrumb中使用el-breadcrumb-item标签表示从首页开始的每一级。Element 提供了一个separator属性&#xff0c;在el-breadcrumb标签中设置它来决定分隔符&#xff0c;它只能是字符串&am…...

ABB MPRC086444-005数字输入模块

ABB MPRC086444-005 是一款数字输入模块&#xff0c;通常用于工业自动化和控制系统中&#xff0c;用于接收和处理数字信号。以下是这种类型的数字输入模块通常可能具备的一般功能和特点&#xff1a; 数字输入接口&#xff1a;MPRC086444-005 模块通常配备多个数字输入通道&…...

stable diffusion实践操作-常见lora模型介绍

系列文章目录 本文专门开一节写Lora相关的内容&#xff0c;在看之前&#xff0c;可以同步关注&#xff1a; stable diffusion实践操作 文章目录 系列文章目录前言一、什么是lora?1.1 lora 定义1.2 lora的基本原理1.2 通过分层控制lora 二、作用&#xff1a;2.1 复刻人物特征2…...

kubeadm 安装k8s

目录 安装k8s 环境准备 所有节点&#xff0c;关闭防火墙规则&#xff0c;关闭selinux&#xff0c;关闭swap交换&#xff08;必须关闭swap分区&#xff09; //修改主机名 //所有节点修改hosts文件 //调整内核参数 所有节点安装docker 所有节点安装kubeadm&#xff0c;kube…...

选择最适合您的Bug管理软件:市场比较与推荐

“Bug管理软件哪家好&#xff1f;市场上有许多优秀的Bug管理系统品牌如&#xff1a;Zoho Projects、JIRA、Redmine、Bugzilla、MantisBT。” 一款高效的Bug管理系统可以帮助团队更有效地发现、记录和解决软件中的问题&#xff0c;从而提高产品质量和用户满意度。本文将为您介绍…...

Spring MVC的常用注解及用法

Spring MVC的执行流程&#xff1a; 1.用户的请求首先到Controller 2.Controller将请求转发给Model 3.Model处理业务并将数据结果给Controller 4.Controller会将数据给View引擎 5.View转换数据生成最终的页面给用户。 常用注解&#xff1a; 1.requestMapping&#xff1a;…...

HTTP和HTTPS的区别、 HTTPS运行原理

HTTP 一种用于web浏览器和web服务器基于数据传递的协议基于TCP/IP协议的应用层传送&#xff0c;用于客户端和服务器之间的数据交互 HTTPS 是HTTP的安全版&#xff0c;基于SSL或TLS协议&#xff0c;对客户端和服务器之间加密和身份验证&#xff0c;使得数据之间传递具有了安全…...

统计封闭岛屿的数目

1254. 统计封闭岛屿的数目 关于岛屿的相似题目&#xff1a; 岛屿数量 – 二维矩阵的dfs算法封闭岛屿数量 – 二维矩阵的dfs算法统计封闭岛屿的数目统计子岛屿不同岛屿的数量 class MaxAreaOfIsland:"""floodFill 算法1254. 统计封闭岛屿的数目https://leetcod…...

【数据结构与算法系列4】长度最小的子数组

给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度**。**如果不存在符合条件的子数组&#xff0c;返回 0 。 示例 1&#xff1a; 输入&…...

问道管理:底部渐渐抬高 今年反弹时刻或已来临

快速探底后&#xff0c;两市呈现分解走势。 沪指周三低开震动&#xff0c;指数在20日均线取得支撑后小幅上升&#xff0c;最终以红盘报收。深成指走势弱于沪指&#xff0c;尽管午后指数有所上升&#xff0c;但最终未能翻红。到收盘&#xff0c;沪指报收3158.08点&#xff0c;上…...

正规黄金代理的三大要素

对于现货黄金投资来说&#xff0c;寻找一个正规的黄金代理是十分重要的问题。在目前的现货黄金投资市场中&#xff0c;现货黄金代理的数量很多&#xff0c;他们都致力于耕耘现货黄金投资市场。当越来越多的专业人士加入到现货黄金投资的市场中当中时&#xff0c;这个市场将会越…...

Spine2D骨骼动画播放器 - 微信小程序版

Spine2D骨骼动画播放器 - 微信小程序版 简介平台支持 界面预览使用说明演示视频 版本笨笨的小目标&#xff08;废话&#xff09;参考资料测试文件百度盘分享 相关文档 简介 本播放器是SpinePlayer的微信小程序版。由于官方并没有提供现成的运行库&#xff0c;只能自己改造。 设…...

蓝天转债,双良转债上市价格预测

蓝天转债111017 基本信息 转债名称&#xff1a;蓝天转债&#xff0c;评级&#xff1a;AA&#xff0c;发行规模&#xff1a;8.7亿元。 正股名称&#xff1a;蓝天燃气&#xff0c;今日收盘价&#xff1a;9.74元&#xff0c;转股价格&#xff1a;10.13元。 当前转股价值 转债面值…...

python-爬虫-xpath方法-批量爬取王者皮肤图片

import requests from lxml import etree获取NBA成员信息 # 发送的地址 url https://nba.hupu.com/stats/players # UA 伪装 google header {User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.3…...

go锁--读写锁

每个锁分为读锁和写锁&#xff0c;写锁互斥 没有加写锁时&#xff0c;多个协程都可以加读锁 加了写锁时&#xff0c;无法加读锁&#xff0c;读协程排队等待 加了读锁&#xff0c;写锁排队等待 Mutex用来写协程之间互斥等待 读协程使用readerSem等待写锁的释放 写协程使用writer…...

Unity中Shader的屏幕坐标

文章目录 前言一、屏幕坐标1、屏幕像素的坐标2、屏幕坐标归一化 二、在Unity中获取 当前屏幕像素 和 总像素1、获取屏幕总像素,使用_ScreenParams参数2、获取当前片段上的像素怎么使用:在片元着色器传入参数时使用 前言 Unity中Shader的屏幕坐标 一、屏幕坐标 1、屏幕像素的坐…...

springboot MongoDB 主从 多数据源

上一篇&#xff0c;我写了关于用一个map管理mongodb多个数据源&#xff08;每个数据源&#xff0c;只有单例&#xff09;的内容。 springboot mongodb 配置多数据源 临到部署到阿里云的测试环境&#xff0c;发现还需要考虑一下主从的问题&#xff0c;阿里云买的数据库&#x…...

【100天精通Python】Day57:Python 数据分析_Pandas数据描述性统计,分组聚合,数据透视表和相关性分析

目录 1 描述性统计&#xff08;Descriptive Statistics&#xff09; 2 数据分组和聚合 3 数据透视表 4 相关性分析 1 描述性统计&#xff08;Descriptive Statistics&#xff09; 描述性统计是一种用于汇总和理解数据集的方法&#xff0c;它提供了关于数据分布、集中趋势和…...

Unity 切换场景后场景变暗

问题 Unity版本&#xff1a;2019.4.34f1c1 主场景只有UI&#xff0c;没有灯光&#xff0c;天空盒&#xff1b;其他场景有灯光和天空盒所有场景不烘焙主场景作为启动场景运行&#xff0c;切换到其他场景&#xff0c;场景变暗某一个场景作为启动场景运行&#xff0c;光影效果正…...

RabbitMQ学习笔记

1、什么是MQ&#xff1f; MQ全称message queue&#xff08;消息队列&#xff09;&#xff0c;本质是一个队列&#xff0c;FIFO先进先出&#xff0c;是消息传送过程中保存消息的容器&#xff0c;多 用于分布式系统之间进行通信。 在互联网架构中&#xff0c;MQ是一种非常常见的…...

【C# Programming】类、构造器、静态成员

一、类 1、类的概念 类是现实世界概念的抽象&#xff1a;封装、继承、多态数据成员&#xff1a; 类中存储数据的变量成员方法&#xff1a; 类中操纵数据成员的函数称为成员方法对象&#xff1a;类的实例类定义 class X {…} var instance new X(…); 2、实例字段 C#中…...

软件层面缓存基本概念与分类

缓存 缓存基本概念&#xff08;百度百科&#xff09; 缓存&#xff08;cache&#xff09;&#xff0c;原始意义是指访问速度比一般随机存取存储器&#xff08;RAM&#xff09;快的一种高速存储器&#xff0c;通常它不像系统主存那样使用DRAM技术&#xff0c;而使用昂贵但较快…...

单片机有哪些分类?

单片机有哪些分类? 1.AVR单片机-----速度快&#xff0c;一个时钟周期执行一条指令&#xff0c;而普通的51单片机需要12个时钟周期执行一条指令。当然&#xff0c;Atmel公司出品的AT89LP系列单片机也是一个时钟执行一条指令&#xff0c;但目前还未普及。AVR单片机比51单片机多…...

高阶数据结构-----三种平衡树的实现以及原理(未完成)

TreeMap和TreeSet的底层实现原理就是红黑树 一)AVL树: 1)必须是一棵搜索树:前提是二叉树&#xff0c;任取一个节点&#xff0c;它的左孩子的Key小于父亲节点的Key小于右孩子节点的Key&#xff0c;中序遍历是有序的&#xff0c;按照Key的大小进行排列&#xff0c;高度平衡的二叉…...

北斗高精度组合导航终端

UWB&#xff08;Ultra-Wideband&#xff09;、卫星定位&#xff08;GNSS&#xff09;&#xff0c;以及IMU&#xff08;Inertial Measurement Unit&#xff09;的组合定位系统结合了多种传感器和定位技术&#xff0c;以提供高精度、高可靠性的位置估计。这种组合定位系统在各种应…...

河间哪里有做网站的/广州最新疫情通报

1 问题 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a;一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 示例 1: 给定二叉树 [3,9,20,null,null,15,7] 返回 true 。 示例 2: 给定二叉树…...

网站开发的三层架构/长春网络优化哪个公司在做

值栈包含两个 context(域对象框架存入) 和根对象(push,set) //源码dofilter----actionContext push通过压栈后的数据是在最顶层,用 value"top" 来取值即可; 值栈后进先出的原则 set和map的混到一起 从上到下取值;[0].name; set一般是集合;push一般是属性 1.获取值…...

衡水建设局网站首页/视频推广一条多少钱

letswave教程&#xff1a;脑电数据图形绘制、批处理以及脚本生成1 单主题图形生成1.1 打开图形模块1.2 创建子图1.3 添加内容1.4 设置轴参数1.5 导出图形2 多主题图形生成2.1 打开图形模块2.2 创建子图2.3 添加内容2.4 设置轴参数3 批处理3.1 数据导入3.2 删除无用的通道3.3 过…...

大连网站开发企业/宁波网站推广营销

1. Php图片上传12. PHP函数getimagesize的具体使用方法4 3. 异步上传图片5 1. Php图片上传 上传步骤&#xff1a; 1、创建一个文件上传表单 <html> <body> <form action"upload_file.php" method"post" enctype"multipart/form-data&q…...

dw怎么做网站首页/百度网址提交入口

个人认为在自己写接口时&#xff0c;需要返回集合时返回一个空集合&#xff0c;比如mybatis查询如果返回一个集合&#xff0c;结果为空时也会返回一个空集合而不是null。那么这样有什么好处呢&#xff1f;最大的好处就是调用方不用在判断是否为null&#xff0c;可以直接用&…...

如何给自己做网站/关键词排名优化如何

java里初始化一个类的对象&#xff0c;通过初始化快或者构造方法进行数据赋值。与其相关的执行代码有这么几种&#xff1a; 静态初始化块初始化块构造方法静态初始化块 静态初始化块只在类加载时执行一次&#xff0c;同时静态初始化块只能给静态变量赋值&#xff0c;不能初始化…...