LeetCode刷题笔记(四): 排序
排序算法:包括快排,归并排序,桶排序,哈希排序等。 一、快排 算法介绍:对于当前一个未排序片段,我们先随机选择一个位置当作中枢点,然后通过遍历操作,将所有比中枢点小的数字移动到其左侧,再将所有比中枢点大的数字移动到其右侧。操作完成后,我们再次对中枢点左右侧的片段再次进行快速排序即可。可证明,如果中枢点选取是随机的,那么该算法的平均复杂度可以达到O(nlogn),最差情况下复杂度则为O(n^2)。 代码: 1234567891011121314151617void quickSort(vector<int> &nums, int l, int r) { if (l >= r) return; int pivot = l + (rand() % (r - l + 1)); int pivot_val = nums[pivot]; swap(nums[l], nums[pivot]); int i = l + 1, j = r; while (true) { while (i < j &&...
LeetCode刷题笔记(三): 二分查找
二分查找算法的核心思想:二分查找也常被称为二分法或者折半查找 (binary search, bisect),每次查找时通过将待查找的单调区间分成两部分并只取一部分继续查找,将查找的复杂度大大减少。对于一个长度为O(n)的数组,二分查找的时间复杂度为O(logn)。 一、求开方 题目:x 的平方根给定一个非负整数 x,求它的开方,向下取整。 解答: 12345678910111213141516int mySqrt(int x) { int l = 1, r = x, mid, x_div_mid; while (l <= r) { mid = l + (r - l) / 2; x_div_mid = x / mid; if (mid == x_div_mid) { return mid; } if (mid < x_div_mid) { l = mid + 1; }...
LeetCode刷题笔记(二): 双指针
双指针算法的核心思想:双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务。也可以延伸到多个数组的多个指针。 一、Two Sum 题目:两数之和 II - 输入有序数组给你一个下标从1开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <= index1 < index2 <= numbers.length 。以长度为 2 的整数数组 [index1, index2] 的形式返回这两个整数的下标 index1 和 index2。 解答: 12345678910vector<int> twoSum(vector<int>& numbers, int target) { int l = 0, r = numbers.size() - 1, two_sum; while (l < r) { ...
LeetCode刷题笔记(一): 贪心
贪心算法的核心思想:局部最优以实现全局最优。 一、分配问题 题目:分发糖果n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。你需要按照以下要求,给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果。 相邻两个孩子中,评分更高的那个会获得更多的糖果。请你给每个孩子分发糖果,计算并返回需要准备的最少糖果数目。 解答: 123456789101112131415161718class Solution {public: int candy(vector<int> &ratings) { int n = ratings.size(); vector<int> candies(n, 1); for (int i = 1; i < n; ++i) { if (ratings[i] > ratings[i - 1]) { candies[i] = candies[i - 1] +...
使用docker部署SpringBoot+Vue前后端分离项目
写在前面:致敬软院传奇专业核心课程软工二:大作业卷得飞起(怎么有小组做了10个自由需求甚至做了CICD的啊),上课全在讲笑话期末考得一坨屎(本fw期末喜提卷面68分)。因为sb课程部署项目会加分,故有了这篇快速教学文章(文章不会涉及原理,只教如何使用工具),希望能对学习部署的人有所帮助。 一、下载docker 在你的云服务器上(一般都是选择ubuntu系统)执行以下命令: 12sudo apt updatesudo apt install docker.io docker-buildx 下载完docker后因为docker的官方源需要梯子,所以要更换镜像源,进入/etc/docker文件夹并创建daemon.json文件,加入以下内容: 123{ "registry-mirrors": [ "https://docker.m.daocloud.io"]} 添加完毕之后输入sudo systemctl daemon-reload && sudo systemctl restart...
当当网数据爬取脚本
写在前面:因为这学期上了软院传奇屎课软工2,为了更好地展示大作业(图书商城)的效果,故写了个爬虫爬取了当当网的数据。 一、获取Cookie因为不登陆的话当当网是有访问次数限制的,所以需要获取个人Cookie来维持登录状态。Cookie的获取非常简单,只需要在浏览器登录当当网后按下f12打开开发者工具,选择网络后再刷新一下页面,选择其中某一个元素就能查看到Cookie。 相关的登陆代码大致如下: 1234567891011121314151617181920212223242526272829303132333435def __init__(self): self.session = requests.Session() self.headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124...
yolov5环境配置教程
写在前面:本学期因为大创需要使用yolov模型来进行相关的工作,故记录如下。使用的系统为Ubuntu18.04. 1.安装Anaconda 访问Anaconda官网下载合适版本。 导航到下载目录:使用cd命令导航到下载目录。例如,如果下载文件在Downloads目录下: 1cd ~/Downloads 运行安装脚本:使用bash命令运行下载的安装脚本: 1bash Anaconda3-2024.10-1-Linux-x86_64.sh 阅读并接受许可协议:在安装过程中,会显示许可协议,按q键跳过,然后输入yes接受协议。 选择安装路径:默认安装路径是/home/your_username/anaconda3,可以按Enter接受默认路径,或者输入其他路径。 初始化Anaconda:安装完成后,系统会提示是否初始化Anaconda,输入yes以启用。 更新环境变量:安装完成后,关闭并重新打开终端,或者运行以下命令使环境变量生效: 1source...
网络攻防实战billu b0x打靶思路
写在前面:思路不同于cy老师上课讲的,故在此记录一下。 一、扫描端口首先还是尝试非常经典的扫描端口,输入以下命令 12arp-scan -l #查找靶机ipnmap -p- 10.0.2.13 -sV –min-rate 50000 –min-hostgroup 100 #查找靶机暴露的端口以及其具体信息 发现结果如下: 尝试寻找相应的漏洞后(使用searchsploit命令),没有发现可利用的漏洞,故进行到下一步。 二、尝试破解登录 首先尝试使用seclist中提供的目录来进行爆破,但是因为burpsuite没开会员,等待时间非常长,故选择放弃。 很容易想到经典的目录搜索dirsearch -u...
通过ssh连接VirtualBox的nat网络模式下的虚拟机
写在前面:因为这学期要上传奇史课os,课程要求使用OpenEuler系统,为了方便用vscode编程使用了ssh来连接虚拟机。折腾的过程中发现桥接模式会随着你网络环境他的变化而产生网段的变化导致ssh配置发生变动,而nat模式下的虚拟机ip不会产生改变。而使用nat网络模式来进行连接相对麻烦一点儿,故有了该文章。 一、设置端口转发因为nat模式下尽管虚拟机ping得通主机,但是主机ping不通虚拟机的话ssh连接仍然是不可行的,所以必须要先进行端口转发。设置端口转发也非常简单,首先点击VirtualBox左上角的管理,选择其中的工具,在工具的菜单栏中选择网络管理器。或者是直接使用快捷键Ctrl+H打开。之后先点开属性,选择NAT网络,在下方选择端口转发,点击右边的”+“添加新规则。主机ip和子系统端口和上图保持一致,除非你ssh端口自定义了非22端口。主机端口可以自己改动,只要该端口没有被占用就行。需要注意的是子系统ip要和你的虚拟机保持一致。至于如何获得子系统的ip,需要打开子系统输入命令ip...
zsh的安装和简单配置
写在前面:本教程使用的是WSL2(Debian系统),使用ArchLinux系或者RedHat系的操作系统可能在下面的操作中有些许不同之处。zsh有比bash更加丰富的扩展功能,在可自定义化和补全功能上都比bash要强大很多(最重要的是zsh比bash的prompt好看多了)。 一、下载zsh并设置其为默认shell 下载zsh下载zsh非常之简单,很多版本的Linux都提供了zsh的预编译包,可以通过系统的包管理器安装。 12sudo apt updatesudo apt install zsh 如果你的Linux使用的是其他包管理工具,比如yum或是pacman,请自行查找教程。 将zsh设置为默认shell首先要检查zsh是否安装成功,输入命令zsh --version后如果有类似于下面的输出,那说明安装成功了。之后就是输入命令让zsh成为默认shell。 1chsh -s...