算法刷题总结

1. 排序算法

1.1 快速排序算法

public abstract class Sort<T extends Comparable<T>> {

    public abstract void sort(T[] array);

    protected boolean less(T first, T two) {
        return first.compareTo(two) < 0;
    }

    protected void swap(T[] array, int i, int j) {
        T temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }
}
/**
 * 快速排序
 *
 * 快速排序通过一个切分元素将数组分为左右两个数组,
 * 左数组元素小于等于切分元素,右数组大于等于切分元素,
 * 将左右子数组排序,整个数组也就有序了
 *
 * 平均情况为O(nlog(n)),最差情况O(n~2),存储空间O(log(n))
 * V1.1.0 sort、partition写法参照<<程序员面试金典>>重写
 *
 */
public class QuitSort<T extends Comparable<T>> extends Sort<T> {

    @Override
    public void sort(@NotNull T[] arr) {
        shuffle(arr);
        sort(arr, 0 , arr.length - 1);
    }

    private void sort(T[] arr, int left, int right) {
        int index = partition(arr, left, right);
        if (left < index - 1) { // 排序左半部分
            sort(arr, left, index - 1);
        }
        if (index < right) { // 排序右半部分
            sort(arr, index, right);
        }
    }

    private int partition(T[] arr, int left, int right) {
        T pivot = arr[(left + right) / 2]; // 挑选一个基准点
        while (left <= right) {
            // 找到左边应被放到右边的元素
            while (arr[left].compareTo(pivot) < 0) {
                left++;
            }
            // 找到右边应被放到左边的元素
            while (arr[right].compareTo(pivot) > 0) {
                right--;
            }
            if (left <= right) {
                swap(arr, left, right); // 交换元素
                left++;
                right--;
            }
        }
        return left;
    }

    private void shuffle(T[] arr) {
        List<Comparable> list = Arrays.asList(arr);
        Collections.shuffle(list); // 防止最坏的情况,第一次从最小的元素切分,第二次从次小的元素切分。时间复杂度N^2
        list.toArray(arr);
    }

    public static void main(String[] args) {
        Sort sort = new QuitSort();
        Integer[] arr = new Integer[]{2, 1, 4, 6, 3, 7, 3};
        sort.sort(arr);
        System.out.println(Arrays.asList(arr));
    }
}

1.2 归并排序

/**
 * 归并排序
 *
 * @author Jian Shen
 * @version V1.0.0
 * @date 2019/7/21
 */
public abstract class MergeSort<T extends Comparable<T>> extends Sort<T> {

    protected T[] assist; // 辅助数组

    /**
     * 将数组中已经排好序的两个部分[左侧部分、右侧部分]合并
     *
     * @param array
     * @param left
     * @param middle
     * @param right
     */
    protected void merge(@NotNull T[] array, int left, int middle, int right) {
        int i = left;
        int j = middle + 1;

        for (int k = left; k <= right; k++) {
            assist[k] = array[k];
        }

        for (int k = left; k <= right; k++) {
            if (i > middle) { // 说明左侧部分已经完成合并,仅需合并右侧部分
                array[k] = assist[j++];
            } else if (j > right) { // 说明右侧部分已经完成合并,仅需合并左侧部分
                array[k] = assist[i++];
            } else if (assist[i].compareTo(assist[j]) <= 0) {
                array[k] = assist[i++];
            } else {
                array[k] = assist[j++];
            }
        }
    }
}
/**
 * 自顶向下归并排序
 *
 * 将数组分成两个部分,分别进行排序,然后归并起来
 * 这种对半分的复杂度为O(NlogN)
 *
 * @author Jian Shen
 * @version V1.0.0
 * @date 2019/7/21
 */
public class Up2DownMergeSort<T extends Comparable<T>> extends MergeSort<T> {

    @Override
    public void sort(T[] array) {
        assist = (T[]) new Comparable[array.length];
        sort(array, 0, array.length - 1);
    }

    private void sort(T[] array, int left, int right) {
        if (left >= right) {
            return ;
        }
        int middle = left + (right - left) / 2;
        sort(array, left, middle);
        sort(array, middle + 1, right);
        merge(array, left, middle, right);
    }

    public static void main(String[] args) {
        Sort sort = new Up2DownMergeSort();
        Integer[] array = new Integer[]{1, 3, 2, 4, 4, 9, 10, 3, 3};
        sort.sort(array);
        System.out.println(Arrays.asList(array));
    }
}

1.3 插入排序

/**
 * 插入排序
 *
 * 每次将当前元素插入到左侧已经排序的数组中,插入之后左侧数组依然有序。
 * 对于数组 {3, 5, 2, 4, 1},它具有以下逆序:(3, 2), (3, 1), (5, 2), (5, 4), (5, 1), (2, 1), (4, 1),
 * 插入排序每次只能交换相邻元素,令逆序数量减少 1,因此插入排序需要交换的次数为逆序数量
 *
 * @author Jian Shen
 * @version V1.0.0
 * @date 2019/7/20
 */
public class InsertSort<T extends Comparable<T>> extends Sort<T> {

    @Override
    public void sort(T[] array) {
        int length = array.length;
        for (int i = 1; i < length; i++) {
            for (int j = i; j > 0; j--) {
                if (less(array[j], array[j - 1])) {
                    swap(array, j, j -1);
                }
            }
        }
    }

    public static void main(String[] args) {
        Sort sort = new InsertSort();
        Integer[] array = new Integer[]{3, 5, 2, 4, 1, 1};
        sort.sort(array);
        System.out.println(Arrays.asList(array));
    }
}

1.4 冒泡排序

/**
 * 冒泡排序
 * 
 * 从左到右不断交换相邻逆序的元素,在一轮循环后,可以让未排序的最大元素上浮至最右侧
 * 在一轮循环中,如果没有发生交换,则说明此时数组已经有序,可以直接退出
 *
 * @author Jian Shen
 * @version V1.0.0
 * @date 2019/7/20
 */
public class BubbleSort<T extends Comparable<T>> extends Sort<T> {

    @Override
    public void sort(@NotNull T[] array) {
        int length = array.length;
        boolean sorted = false;
        for (int i = length - 1; i > 0 && !sorted; i--) {
            sorted = true;
            for (int j = 0; j < i; j++) {
                if (less(array[j + 1], array[j])) {
                    sorted = false;
                    swap(array, j, j + 1);
                }
            }
        }
    }

    public static void main(String[] args) {
        Sort sort = new BubbleSort();
        Integer[] array = new Integer[]{1, 3, 2, 4, 4, 9, 10, 3};
        sort.sort(array);
        System.out.println(Arrays.asList(array));
    }
}

1.5 希尔排序

/**
 * 希尔排序
 *
 * 对于大规模的数组,插入排序很慢,因为每次只能将逆序数量减1,
 * 希尔排序交换不相邻的元素,每次可以将逆序数量减少大于1
 * 希尔排序使用插入排序对间隔h的序列进行排序,通过不断减小h至1,就可以使得数组是有序的
 *
 * @author Jian Shen
 * @version V1.0.0
 * @date 2019/7/21
 */
public class ShellSort<T extends Comparable<T>> extends Sort<T> {

    @Override
    public void sort(@NotNull T[] array) {
        int length = array.length;
        int h = 1;
        while (h < length / 3) {
            h = 3 * h + 1;
        }

        while (h >= 1) {
            for (int i = h; i < length; i++) {
                for (int j = i; j >= h; j -= h) {
                    if (less(array[j], array[j - h])) {
                        swap(array, j, j - h);
                    }
                }
            }
            h /= 3;
        }
    }

    public static void main(String[] args) {
        Sort sort = new ShellSort();
        Integer[] array = new Integer[]{3, 5, 3, 4, 1, 1};
        sort.sort(array);
        System.out.println(Arrays.asList(array));
    }
}

1.6 直接插入排序

public class InsertSort{
     
    public static void insertSort(int[] array){//直接插入排序
        
    	for(int i=1;i<array.length;i++){
    		if(array[i]<array[i-1]){
    			int temp=array[i];
    			int k=i-1;
    			for(int j=k;temp<array[j] && j>=0;j--){
    				array[j+1]=array[j];
    				k--;
    			}
    			array[k+1]=temp;
    		}
    	}
    }
     
    public static void printArray(int[] array) {//打印
         for(int i=0;i<array.length;i++){
        	 System.out.print(array[i]);
        	 if(i!=array.length-1){
        		 System.out.print(" ");
        	 }
         }
     }
 
    public static void main(String[] args) {
		//{05, 56, 13, 88,19, 37, 64,75,80, 21,92}(用数组存放)
    	int[] a={05, 56, 13, 88,19, 37, 64,75,80, 21,92};
    	System.out.println("排序前的序列:");
    	printArray(a);
    	insertSort(a);
    	System.out.println("\n排序后的序列:");
    	printArray(a);
    	
	}
}

2. 当月日历打印

import java.util.*;

public class CalendarStudy {

    public static void main(String[] args) {
        printCurrentMonthCalendar();
    }

    private static void printCurrentMonthCalendar() {

        /* 1.获取当前日期 月与日信息
         * 2.获取当前月 第一天信息(如第一天为星期几)
         * 3.循环开始打印,格式控制,结束条件日期不为当前月
         */
        Calendar date = new GregorianCalendar();

        int nowMonth = date.get(Calendar.MONTH);
        int nowDay = date.get(Calendar.DAY_OF_MONTH);

        date.set(Calendar.DAY_OF_MONTH, 1);
        int firstWeekday = date.get(Calendar.DAY_OF_WEEK); // 当前月第一天为星期几

        System.out.println("星期日 星期一 星期二 星期三 星期四 星期五 星期六");

        for (int i = Calendar.SUNDAY; i < firstWeekday; i++) {
            System.out.printf("%7s", " ");
        }

        while (date.get(Calendar.MONTH) == nowMonth) {
            int day = date.get(Calendar.DAY_OF_MONTH);
            int weekDay = date.get(Calendar.DAY_OF_WEEK);

            System.out.printf("%6d", day);
            if (day != nowDay) {
                System.out.print(" ");
            } else {
                System.out.print("*");
            }

            if (weekDay == Calendar.SATURDAY) {
                System.out.println();
            }

            date.add(Calendar.DAY_OF_MONTH, 1);
        }
    }
}

这里写图片描述

3. 简单计算器实现

基本思路:边输入边计算,最后显示

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javafx.scene.layout.Border;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Calculator extends JFrame {
	private boolean start, flag;
	private String lastCommand;
	private double result1, result2;
	private int count=1;
	JButton display;
	JPanel panel;

	public Calculator() {
		setLayout(new BorderLayout());
		result1 = 0;
		result2 = 0;
		start = true;
		flag = false;
		lastCommand = "=";

		display = new JButton(" ");
		display.setEnabled(false);
		add(display, BorderLayout.NORTH);

		ActionListener insert = new InsertAction();
		ActionListener command = new CommandListener();
		panel = new JPanel(new GridLayout(4, 4));

		addButton("7", insert);
		addButton("8", insert);
		addButton("9", insert);
		addButton("/", command);

		addButton("4", insert);
		addButton("5", insert);
		addButton("6", insert);
		addButton("*", command);

		addButton("1", insert);
		addButton("2", insert);
		addButton("3", insert);
		addButton("-", command);

		addButton("0", insert);
		addButton(".", insert);
		addButton("=", command);
		addButton("+", command);

		add(panel, BorderLayout.CENTER);

		pack();
		setTitle("Calculator");
		setResizable(false);
		setSize(300, 200);
		setLocation(400, 400);
		setVisible(true);
		setDefaultCloseOperation(this.EXIT_ON_CLOSE);
	}

	private void addButton(String label, ActionListener listener) {
		Button button = new Button(label);
		button.addActionListener(listener);
		panel.add(button);
	}

	private class InsertAction implements ActionListener {// 监听数字按钮

		public void actionPerformed(ActionEvent e) {

			String input = e.getActionCommand();
			display.setText(display.getText() + input);
		}
	}

	private class CommandListener implements ActionListener {// 监听命令按钮

		public void actionPerformed(ActionEvent e) {

			String command = e.getActionCommand();
			if (flag) {
				String[] s;
				s = display.getText().split("\\" + lastCommand);
				result2 = Double.parseDouble(s[s.length-1]);
				System.out.println(result2);
				calculator();
				if (command.equals("="))
					display.setText("" + result1);
				else
					display.setText(display.getText() + command);
				
				lastCommand = command;
				//flag = false;
			} else {
				result1 = Double.parseDouble(display.getText());
				display.setText(display.getText() + command);
				lastCommand = command;
				flag = true;
			}
		}
	}

	public void calculator() {// 进行计算的函数

		if (lastCommand.equals("+")) {
			result1 += result2;
		} else if (lastCommand.equals("-")) {
			result1 -= result2;
		} else if (lastCommand.equals("*")) {
			result1 *= result2;
		} else if (lastCommand.equals("/")) {
			result1 /= result2;
		} else if (lastCommand.equals("=")) {
			result1 = result2;
		}
	}

	public static void main(String[] args) {
		new Calculator();
	}
}

这里写图片描述
这里写图片描述

4. 拉格朗日乘数法在原材料选择问题上的具体应用

问题需求:
输入待制作的材料:(材料长,材料数量)
分别为(5401,124)、(200,135)、(1350,45),
输入原材料长度最大值6500,最小值3500,浮动间隙10(即步长),可选种类3
求需要多少原材料,数量分别为多少
备注:原材料可以分割也可以合并,可以想象为黄金

求解:这是一个带有约束条件的拉格朗日乘数法求解最优值的问题,我们直接上代码

from scipy.optimize import minimize
import numpy as np

# 由于x[0]*x[1]+(x[0]+10)*x[2]+(x[0]+20)*x[3])是凸函数,所以必定存在全局最优,证明略

from scipy.optimize import minimize
import numpy as np
fun = lambda x: (x[0])
# 限制条件 eq等于 ineq大于等于
cons = ({'type': 'eq', 'fun': lambda x: (x[0]*x[1]+(x[0]+10)*x[2]+(x[0]+20)*x[3]) - (5401*124+200*135+1350*45)},
     {'type': 'ineq', 'fun': lambda x: (x[0] - 3500)},
        {'type': 'ineq', 'fun': lambda x:  (6500 - (x[0]+20))},
       {'type': 'ineq', 'fun': lambda x: (x[1] - 1)},
       {'type': 'ineq', 'fun': lambda x: (x[2] - 1)},
        {'type': 'ineq','fun': lambda x: (x[3] - 1)})
# 代表四个变量的初始值
x0 = np.array((6500, 1, 1, 1)) # 设置初始值 
# 限制变量范围
bounds = ((3500,6500),(1,None),(1,None),(1,None))
res = minimize(fun, x0, method='SLSQP', constraints=cons, bounds=bounds)
print('最大值:',res.fun)
print('最优解:',res.x)
print('迭代终止是否成功:', res.success)
print('迭代终止原因:', res.message)

最大值: 3500.0
最优解: [3500. 71.82289948 71.93464057 72.04638166]
迭代终止是否成功: True
迭代终止原因: Optimization terminated successfully

total_info = (5401*124+200*135+1350*45)
x = round(res.fun, 0)
now_info = x * int(res.x[1]) + (x+10)*int(res.x[2]) + (x+20) * int(res.x[3])
need_other = total_info - now_info
p_num = int(res.x[1])
q_num = int(res.x[2])
z_num = int(res.x[3])

# 由于int取整并且步长远小于原材料长度
# 所以可直接从最小向上依次选
if x >= need_other:
    p_num += 1
elif x + (x + 10) >= need_other:
    p_num += 1
    q_num += 1
elif x + (x + 10) + (x + 20) >= need_other:
    p_num += 1
    q_num += 1
    z_num += 1

print(str(int(x)) + ' ' + str(p_num))
print(str(int(x+10)) + ' ' + str(q_num))
print(str(int(x+20)) + ' ' + str(z_num))
print('多买的原材料长度' + " " + str(int((x * p_num + (x+10) * q_num + (x+20) * z_num) - total_info)))

3500 72
3510 72
3520 72
多买的原材料长度 686

5. 最小生成树之安慰奶牛

问题描述
Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路。道路被用来连接N个牧场,牧场被连续地编号为1到N。每一个牧场都是一个奶牛的家。FJ计划除去P条道路中尽可能多的道路,但是还要保持牧场之间 的连通性。你首先要决定那些道路是需要保留的N-1条道路。第j条双向道路连接了牧场Sj和Ej(1 <= Sj <= N; 1 <= Ej <= N; Sj != Ej),而且走完它需要Lj的时间。没有两个牧场是被一条以上的道路所连接。奶牛们非常伤心,因为她们的交通系统被削减了。你需要到每一个奶牛的住处去安慰她们。每次你到达第i个牧场的时候(即使你已经到过),你必须花去Ci的时间和奶牛交谈。你每个晚上都会在同一个牧场(这是供你选择的)过夜,直到奶牛们都从悲伤中缓过神来。在早上 起来和晚上回去睡觉的时候,你都需要和在你睡觉的牧场的奶牛交谈一次。这样你才能完成你的 交谈任务。假设Farmer John采纳了你的建议,请计算出使所有奶牛都被安慰的最少时间。

输入格式

1行包含两个整数NP。
接下来N行,每行包含一个整数Ci。
接下来P行,每行包含三个整数Sj, EjLj

输出格式

输出一个整数, 所需要的总时间(包含和在你所在的牧场的奶牛的两次谈话时间)

样例输入

5 6
10
10
20
6
30
1 2 5
2 3 5
2 4 12
3 4 17
2 5 15
3 5 6

样例输出

178

数据规模与约定

5 <= N <= 10000N-1 <= P <= 1000000 <= Lj <= 10001 <= Ci <= 1,000

5.1 代码

import java.util.PriorityQueue;
import java.util.Scanner;

public class Main {
	static int[] s;
	static int[] a;
	static int n;
	static int m;
	static int ans = 1001;
	static Scanner in;
	static Edge edge;

	public Main() {// 构造函数初始化
		in = new Scanner(System.in);
		n=in.nextInt();
		m=in.nextInt();
		s = new int[n + 1];
		a = new int[n + 1];
	}

	public static int find(int x) {// 采用路径压缩的find()
		if (s[x] == -1)
			return x;
		else
			return s[x] = find(s[x]);
	}

	public static void union(int root1, int root2) {// 按大小求并
		if (root1 > root2) {
			s[root2] = root1;
		} else
			s[root1] = root2;
	}

	public static void kruskal() {// 克鲁斯卡尔
		int edgesAccepted = 0;
		PriorityQueue<Edge> pq = new PriorityQueue<Edge>();
		for (int i = 1; i <= m; i++) {
			int u = in.nextInt(), v = in.nextInt(), w = in.nextInt();
			w = 2 * w + a[u] + a[v];
			edge = new Edge(u, v, w);
			pq.add(edge);
		}
		while(edgesAccepted<n-1){
			Edge edgeTemp=pq.poll();
			int x=find(edgeTemp.u);
			int y=find(edgeTemp.v);
			if(x!=y){
				ans+=edgeTemp.w;		
				edgesAccepted++;
				union(x,y);
			}
		}
	}

	public static void main(String[] args) {
		new Main();
		for (int i = 1; i <= n; i++)
			s[i] = -1;
		
		for (int i = 1; i <= n; i++) {
			a[i] = in.nextInt();
			if (a[i] < ans)
				ans = a[i];
		}
		kruskal();
		System.out.println(ans);
	}

	public static class Edge implements Comparable<Edge> {// 自定义比较类
		private int u, v, w;

		public Edge(int u, int v, int w) {
			this.u = u;
			this.v = v;
			this.w = w;
		}

		public int compareTo(Edge o) {
			if (this.w > o.w)
				return 1;
			else if (this.w < o.w)
				return -1;
			else
				return 0;
		}
	}
}

6. A除以B

题目描述
本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。
输入描述:
输入在1行中依次给出A和B,中间以1空格分隔。
输出描述:
在1行中依次输出Q和R,中间以1空格分隔。
输入例子:
123456789050987654321 7
输出例子:
17636684150141093474 3

public class Main{
     
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        BigInteger bi=new BigInteger(in.next());
        BigInteger a=new BigInteger(in.next());
        System.out.print(bi.divide(a)+" ");
        System.out.println(bi.mod(a));
    }
}

7. 部分A+B


题目描述
正整数A的“DA(为1位整数)部分”定义为由A中所有DA组成的新整数PA。例如:给定A = 3862767,DA = 6,则A的“6部分”PA是66,因为A中有2个6。
现给定A、DA、B、DB,请编写程序计算PA + PB。
输入描述:
输入在一行中依次给出A、DA、B、DB,中间以空格分隔,其中0 < A, B < 1010。
输出描述:
在一行中输出PA + PB的值。
输入例子:
3862767 6 13530293 3
输出例子:
399

public class Main {
  
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        char[] a=in.next().toCharArray();
        int sum=cal(a,in.nextInt());
         
        char[] b=in.next().toCharArray();
        sum+=cal(b,in.nextInt());
         
        System.out.println(sum);
    }
 
    private static int cal(char[] c,int aim) {
        int sum=0;
        for(int i=0;i<c.length;i++){
            if(c[i]-'0' == aim){
                sum=sum*10+aim;
            }
        }
        return sum;
    }
}

8. A+B和C

给定区间[-2^31, 2^31]内的3个整数A、B和C,请判断A+B是否大于C。
输入描述:
输入第1行给出正整数T(<=10),是测试用例的个数。随后给出T组测试用例,每组占一行,顺序给出A、B和C。整数间以空格分隔。
输出描述:
对每组测试用例,在一行中输出“Case #X: true”如果A+B>C,否则输出“Case #X: false”,其中X是测试用例的编号(从1开始)。
输入例子:
4
1 2 3
2 3 4
2147483647 0 2147483646
0 -2147483648 -2147483647
输出例子:
Case #1: false
Case #2: true
Case #3: true
Case #4: false

public class Main{
        public static void main(String[] args) {
          Scanner in=new Scanner(System.in);
          int n=in.nextInt();
          for(int i=1;i<=n;i++){
               BigInteger a,b,c;
               a=in.nextBigInteger();
               b=in.nextBigInteger();
               c=in.nextBigInteger();
               if(a.add(b).compareTo(c)>0){
                   System.out.println("Case #"+i+": true");
               }else{
                   System.out.println("Case #"+i+": false");
               }
        }
    }
}
​```
​
欢迎关注公众号算法小生与我沟通交流

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/735848.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《人生苦短,我用python·四》pybind11多场景使用

引言 Pybind11作为一个强大的工具&#xff0c;不仅可以轻松地将简单的C函数和类暴露给Python&#xff0c;还可以处理更复杂的场景&#xff0c;比如支持C标准库容器、处理C异常、以及自定义数据结构的转换。本文将深入介绍Pybind11的一些高级用法&#xff0c;帮助你在实际项目中…

修复 pprof ---node_exproter访问漏洞(go-pprof-leak)

前言&#xff1a; ** 在Go语言中&#xff0c;pprof和debug包是用来检测和避免goroutine泄漏&#xff0c;避免导致goroutine泄漏&#xff0c;进而消耗大量系统资源。不过对于安全而言确又存在一定风险&#xff0c;** 风险&#xff1a; 通过node_exporter web发现 190.168.46.1…

Unity Meta Quest 开发:关闭 MR 应用的安全边界

社区链接&#xff1a; SpatialXR社区&#xff1a;完整课程、项目下载、项目孵化宣发、答疑、投融资、专属圈子 &#x1f4d5;教程说明 这期教程我将介绍如何在应用中关闭 Quest 系统的安全边界。 视频讲解&#xff1a; https://www.bilibili.com/video/BV1Gm42157Zi 在 Unity…

DVWA 靶场 Weak Session IDs 通关解析

前言 DVWA代表Damn Vulnerable Web Application&#xff0c;是一个用于学习和练习Web应用程序漏洞的开源漏洞应用程序。它被设计成一个易于安装和配置的漏洞应用程序&#xff0c;旨在帮助安全专业人员和爱好者了解和熟悉不同类型的Web应用程序漏洞。 DVWA提供了一系列的漏洞场…

VirtualBox虚拟机声音设置

最近发现VirtualBox创建的Windows 10和11虚拟机没有声音&#xff0c;但是另外一个Windows 7的虚拟机确有声音&#xff0c;检查对比了一下虚拟机的声音设置&#xff0c;发现是Host Audio Driver的设置不一样&#xff0c;Windows10和11的是Default&#xff0c;而Windows7的是Puls…

【C++】初始化列表、匿名对象、static成员、友元、内部类

文章目录 一、初始化列表构造函数体赋值初始化列表explicit关键字 二、匿名对象三、static成员四、友元友元函数友元类 五、内部类六、练习题 一、初始化列表 构造函数体赋值 实际上&#xff0c;构造函数的函数体内&#xff0c;并不是对 对象 初始化的地方&#xff0c;而是对…

html做一个雷达图的软件

要实现一个在线输入数据并生成雷达图的功能&#xff0c;可以使用HTML表单和JavaScript来处理用户输入的数据。以下是一个示例代码&#xff0c;演示了如何实现这个功能&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"…

C++初学者指南第一步---13.聚合类型

C初学者指南第一步—13.聚合类型 文章目录 C初学者指南第一步---13.聚合类型1. 类型分类&#xff08;简化&#xff09;2. 如何定义和使用3. 为什么选择自定义类型/数据聚合&#xff1f;4. 聚合类型初始化5.混合6. 复制7. 值和引用的语义8.聚合的向量(std::vector)9.最令人烦恼的…

文件创建与查看

touch touch命令用于创建一个新的文件。 语法&#xff1a;touch Linux路径 其中路径可以是相对路径、绝对路径或者特殊路径符都可以。 改图展示了通过 touch test.txt 命令创建了一个 test.txt文件&#xff0c;其中深色的代表文件夹&#xff0c;白色的代表文件。 使用 ls -lh…

React学习(二)——状态(数据)与状态修改

useState 在React中&#xff0c;useState 是一个非常重要的Hook&#xff0c;它允许你在函数组件中添加“状态”&#xff08;state&#xff09;。在传统的React类组件中&#xff0c;我们使用this.state来管理和更新组件的状态。然而&#xff0c;在函数组件中&#xff0c;由于它们…

一个关于空格的Sql Server面试题

引子 先上题目&#xff1a; 回答下面sql 的输出结果 declare s1 varchar(10) declare s2 varchar(10) set s1a b set s2a b if s1s2 select true 答案是 true 那么上面的 s1 和 s2 是否相等的呢&#xff1f; 我们再看看下面的sql declare s1 varchar(10) declare s2 …

鞋子分类数据集17399张69类别

数据集类型&#xff1a;图像分类用&#xff0c;不可用于目标检测无标注文件 数据集格式&#xff1a;仅仅包含jpg图片&#xff0c;每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数)&#xff1a;17399 分类类别数&#xff1a;69 类别名称:[“0”,“1”,“2”,“3”,“4”…

计组_指令的执行过程

2024.06.19&#xff1a;计算机组成原理指令的执行过程学习笔记 第18节 指令的执行过程 8.1 指令周期8.2 指令的执行过程8.2.1 取指令8.2.2 译码8.2.3 根据源操作地址计算并取操作数8.2.4 执行数据操作8.2.5 目的操作数地址计算并存结果 8.3 指令的数据流8.3.1 取值周期的数据流…

切换国内yum源

切换国内yum源 一、备份现有YUM源二、下载新的YUM源配置文件三、先清理YUM缓存再生成四、测试新的YUM源五、重启系统服务(生效可以不重启)可选 首先&#xff0c;切换国内YUM源的具体步骤取决于您使用的Linux发行版和当前的YUM源配置。以下是一般步骤&#xff0c;适用于大多数基…

CSS基础学习记录(5)

目录 1、CSS语法 2、实例 3、CSS注释 4、id 选择器 5、class 类选择器 6、标签选择器 7、内联选择器 1、CSS语法 CSS 规则由两个主要的部分构成&#xff1a;选择器&#xff0c;以及一条或多条声明: 选择器&#xff08;Selector&#xff09;通常是您需要改变样式的 HTML …

【机器学习300问】125、什么是双向循环神经网络(BRNN)?什么是深度循环神经网络(DRNN)?

一、双向循环神经网络 &#xff08;1&#xff09;诞生背景 双向循环神经网络&#xff08;Bidirectional Recurrenct Neural Network, BRNN&#xff09;是在深度学习领域发展起来的一种特殊类型的循环神经网络&#xff08;RNN&#xff09;&#xff0c;它诞生的背景是为了解决传…

烧结刚玉砂轮片 CBN砂轮 氮化硼砂轮 磨具用晶谷低温陶瓷结合剂玻璃粉

晶谷烧结刚玉砂轮低温陶瓷结合剂玻璃粉具有以下特点&#xff1a; - 软化点&#xff1a;软化点在450至650度之间。 - 热膨胀系数&#xff1a;热膨胀系数为&#xff08;50至120&#xff09;10-7。 - 粒径&#xff1a;粒径为300至3000目&#xff0c;可按要求订做。 - 外观颜色&a…

sudo 权限之危险的 bash 命令

文章目录 [toc]事出有因干就完事了创建用户配置 sudo 权限sudo 验证使用 bash 命令执行 chmod 命令使用 bash 命令执行删根 事出有因 使用普通用户安装 tidb 时&#xff0c;发现报错了&#xff0c;报错内容如下&#xff1a; ERROR SSHCommand {"host": "…

硕思闪客精灵软件安装包下载+详细安装教程

​有目共睹的是闪客精灵专业版的优势&#xff1a;能够安装一台电脑&#xff0c;终身免费升级。根据大数据结果显示闪客精灵支持将不带脚本的Flex生成的SWF导出为Flex文件。从大部分从业者反应来看它能反编译Flash的所有元素,并且支持动作脚本 AS3.0&#xff0c;使用闪客精灵专业…

python rename报错怎么解决

刚接触python&#xff0c;写了一段简单的代码&#xff0c;功能就是重命名一个文件&#xff0c;代码如下&#xff1a; list_1os.listdir(".") for files in list_1:fopen(files)if f.name"01.txt":os.rename(01.txt,001.txt)elif f.name"05.txt":…