自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(138)
  • 资源 (6)
  • 收藏
  • 关注

原创 黑马JUC笔记

即 Guarded Suspension,用在一个线程等待另一个线程的执行结果要点有一个结果需要从一个线程传递到另一个线程,让他们关联同一个 GuardedObject如果有结果不断从一个线程到另一个线程那么可以使用消息队列(见生产者/消费者)JDK 中,join 的实现、Future 的实现,采用的就是此模式因为要等待另一方的结果,因此归类到同步模式ThreadLocal是JDK包提供的,它提供了线程本地变量,也就是如果你创建了一个ThreadLocal变量,那么。

2024-02-29 12:36:31 874 1

原创 JVM笔记

通过new关键字,创建对象都会使用堆内存常见于NIO操作时,用于数据缓冲区分配回收成本高,但读写性能高不受JVM内存回收管理在虚拟机执行垃圾回收的过程中,先采用标记算法确定可回收对象,然后垃圾收集器根据标识清除相应内容,给堆内存腾出相应空间这里腾出内存空间并不是将内存空间的字节清0,而是记录下这段内存的起始结束地址,下次分配内存的时候,直接覆盖这段内存将内存分为等大小的两个区域FROM和TO,先将被GC ROOT引用的对象从FROM放入TO,再回收不被GC ROOT引用的对象。

2024-02-29 12:27:26 985

原创 尚硅谷JavaSE笔记

对第一个java程序进行总结java程序编写-编译-运行的过程编写: 编写java文件编译: javac命令编译java文件运行: java命令运行字节码文件在一个java源文件可以声明多个class,但是,只能最多有一个类声明为public。并且要求声明为public的类的类名必须与源文件名相同。程序的入口是main方法,格式是固定的先输出数据,然后换行只输出数据每一行执行语句都以“;”结束。编译的过程:编译以后,会生成一个或多个字节码文件。

2024-02-29 12:09:47 411

原创 Java核心卷1笔记

3. Java的基本程序设计结构3.1 一个简单的Java应用程序Java区分大小写类名:大写字母开头,每个单词首字母大写源代码文件与公共类名字相同编译得到类字节码文件函数调用:object.method(parameters)3.2 注释在Java中,有3种注释方式//第一种/* 第二种*//**第三种*/3.3 数据类型8种基本类型,4种整型,2种浮点类型,1种字符类型,1种布尔类型3.3.1 整型类型存储需求取值范围int4字节-2

2024-02-29 12:04:16 901 1

转载 【Java面试题】List如何一边遍历,一边删除?

List如何一边遍历,一边删除?

2022-12-10 11:43:50 2146 5

原创 MySQL基础篇

尚硅谷MySQL基础篇笔记

2022-11-09 16:18:06 517

原创 项目需求规格说明书

《基于区块链的教学成绩管理系统》项目需求规格说明书1. 引言1.1 目的编写本需求规格说明书目的是为了遵循软件工程开发流程,对基本需求进行分析汇总,形成调研阶段的分析结果。本文档是对功能模块的基本需求功能特性的描述,用于定义项目范围,明确开发需求,并为后期的分析设计、代码实现和测试提供指导。分析设计,以本需求规格说明书为标准完成总体设计和详细设计;代码实现,以本需求规格说明书为标准,并结合总体设计、详细设计完成代码编写;测试,以本需求规格说明书为标准,结合分析设计完成单元测试用例和系统测试用

2022-02-25 22:32:41 17591

原创 44. 数字序列中某一位的数字

剑指 Offer 44. 数字序列中某一位的数字思路:迭代+求整/求余确定n所在数字的位数确定n所在的数字确定n是num的哪个数位1.确定n所在数字的位数循环执行n减去一位数,二位数,…的数位count,直到n<=count跳出。2.确定所求数位所在的数字num=start+(n−1)//digitnum=start+(n-1)//digitnum=start+(n−1)//digit3.确定所求num的哪一数位s=str(num)res=s[(n-1)%digit]-'0'

2021-11-08 22:15:08 92

原创 43. 1~n 整数中 1 出现的次数

剑指 Offer 43. 1~n 整数中 1 出现的次数思路:数学设数字n是个x位数,记n的第i位为nin_ini​,则可将n写为nxnx−1⋯n2n1n_xn_{x-1}\cdots n_2 n_1nx​nx−1​⋯n2​n1​;记nin_ini​为当前位,记作cur记ni−1ni−2⋯n2n1n_{i-1}n_{i-2}\cdots n_2 n_1ni−1​ni−2​⋯n2​n1​为low记nxnx−1⋯ni+2ni+1n_xn_{x-1}\cdots n_{i+2}n_{i+1}nx​nx

2021-11-08 21:43:42 54

原创 14- II. 剪绳子 II

剑指 Offer 14- II. 剪绳子 II思路:数学推导+快速幂求余大数越界:当a增大时,最后返回的结果超出int32的取值范围解决方案:快速幂求余(xy)%p=[(x%p)(y%p)]%p(xy)\% p=[(x\% p)(y\% p)]\% p(xy)%p=[(x%p)(y%p)]%p​快速幂求余:根据求余运算性质可推出:xa%p={(x2%p)a//2%pa%2==0[(x%p)(xa−1%p)]%p=[x(x2%p)a//2]%pa%2==1x^a\%p=\begin{cas

2021-11-08 00:05:45 55

原创 51. 数组中的逆序对

剑指 Offer 51. 数组中的逆序对思路:归并排序终止条件:l>=r时,返回0递归划分:计算数组中点m,递归划分左子数组和右子数组;合并与逆序对统计:暂存数组nums闭区间[l,r]至辅助数组tmp循环合并:设置双指针分别指向做右子数组的首元素:当i==m+1时,代表左子数组已合并完,添加右子数组,并执行j++否则,当j==r+1或者tmp[i]<=tmp[j]时,代表右子数组已合并完或左子数组当前元素小于右子数组当前元素,添加左子数组并执行i++否则,当tmp[i

2021-11-07 16:49:11 56

原创 17. 打印从1到最大的n位数

剑指 Offer 17. 打印从1到最大的n位数思路:分治算法/全排列对于大数打印,要考虑大数越界。因此需要解决:表示大数的变量类型:string生成数字的字符串集:int类型的进位无法应用于string类型,考虑使用n位的0-9的全排列,可以避免进位操作递归生成全排列:基于分治算法的思想,先固定高位,向低位递归,当所有位都固定,添加字符串class Solution {public: vector<int> nums; string s; vector

2021-11-07 16:16:19 68

原创 60. n个骰子的点数

剑指 Offer 60. n个骰子的点数思路:动态规划假设n-1个骰子的解为f(n-1),此时添加一枚骰子,n个骰子的点数和为x的概率f(n,x)为f(n,x)=∑i=16f(n−1,x−i)×16f(n,x)=\sum\limits_{i=1}^6f(n-1,x-i)\times\frac{1}{6}f(n,x)=i=1∑6​f(n−1,x−i)×61​如果按照此公式计算,会出现数组越界问题。因此,考虑由f(n-1,x)推导f(n-1,x+i)class Solution {public:

2021-11-06 11:18:23 77

原创 49. 丑数

剑指 Offer 49. 丑数思路:动态规划设已知长度为n的丑数序列x1,x2,x3,⋯ ,xnx_1,x_2,x_3,\cdots,x_nx1​,x2​,x3​,⋯,xn​,求第n+1个丑数,根据递推性质,丑数xn+1x_{n+1}xn+1​只可能为:f(x)={xa×2a∈[1,n]xb×3b∈[1,n]xc×5c∈[1,n]f(x)=\begin{cases}x_a\times2 & {a\in[1,n]}\\x_b\times3 & {b\in[1,n]}\\x_c\t

2021-11-06 10:23:41 75

原创 19. 正则表达式匹配

剑指 Offer 19. 正则表达式匹配思路:动态规划状态定义:dp[i] [j]代表字符串s的前i个字符和p的前j个字符是否匹配转移方程:需要注意,由于dp[0] [0]代表的是空字符的状态,因此dp[i] [j]对应的添加字符是s[i-1]和p[j-1]当p[j-1] = '*'时,dp[i] [j]在以下任一情况为true时为true:dp[i] [j-2]: 即将字符组合p[j-2]p[j-1]看作0次dp[i-1] [j]且 s[i-1]==p[j-2]:即让字符p[j-2]多出现

2021-11-06 09:41:40 88

原创 38. 字符串的排列

剑指 Offer 38. 字符串的排列思路:回溯定义(i>0&&!isVisited[i-1]&&s[i]==s[i-1])保证重复排除,前提字符串需要排序流程排序保证重复可以被排除遍历字符串,如果当前字符没有遍历或者不满足重复条件,将字符加入递归调用弹出加入的字符串返回结果class Solution {public: vector<string> permutation(string s) {

2021-11-05 00:37:02 75

原创 37. 序列化二叉树

剑指 Offer 37. 序列化二叉树思路:层序遍历serialize初始化:队列queue,结果res从队列中取出节点:若节点为空,打印字符串"null,"若节点不为空,打印对应数字,将左右子节点加入queue返回值:resdeserialize初始化:队列queue,根节点root从队列取出当前节点cur遍历字符串,若当前值不为空,构造cur->left,并加入队列遍历字符串,若当前值不为空,构造cur->right,并加入队列返回根节点/**

2021-11-05 00:17:01 3497

原创 59 - II. 队列的最大值

剑指 Offer 59 - II. 队列的最大值思路:单调双向队列维护单调队列保存队列所有递减的元素class MaxQueue {public: MaxQueue() { } int max_value() { if(curQueue.empty()) return -1; return maxQueue.front(); } void push_back(int value) {

2021-11-03 23:59:24 91

原创 59 - I. 滑动窗口的最大值

剑指 Offer 59 - I. 滑动窗口的最大值思路:单调队列窗口对应的数据结构是双端队列,遍历数组时,每轮保证单调队列deque:deque内仅包含窗口内的元素⇒\Rightarrow⇒每轮窗口滑动移除元素nums[i-k]deque内非严格递减⇒\Rightarrow⇒每轮窗口滑动需要对队列中小于nums[i]的元素弹出class Solution {public: vector<int> maxSlidingWindow(vector<int>

2021-11-03 23:48:30 3249

原创 67. 把字符串转换成整数

剑指 Offer 67. 把字符串转换成整数思路:模拟考虑:正负号溢出无效字符class Solution {public: int strToInt(string str) { int i=0,sign=1; while(i<str.size()&&str[i]==' ')i++; if(i==str.size())return 0; if(str[i]=='-'){ s

2021-11-03 23:26:20 81

原创 20. 表示数值的字符串

剑指 Offer 20. 表示数值的字符串思路:模拟遍历去掉首尾空格定义标志num,dot,exp遍历字符串若出现有效字符之外的字符,直接返回false若当前字符是数字,设置num为true若当前字符是.如果出现在E和e或.后,即dot或exp为true,返回false设置dot为true若当前字符是E或e若之前没出现数字或者已经出现E或e,即num为false或exp为true,返回false设置exp为true,num为false,因为e后必须有数字若

2021-11-03 00:37:22 83

原创 31. 栈的压入、弹出序列

剑指 Offer 31. 栈的压入、弹出序列思路:栈模拟初始化:辅助栈stack,弹出序列的索引i遍历压栈序列,各元素记为num:元素num入栈;循环出栈:若stack的栈顶元素=弹出序列元素popped[i],执行出栈和i++返回值:若stack为空,则此弹出序列合法class Solution {public: bool validateStackSequences(vector<int>& pushed, vector<int>&amp

2021-11-02 22:29:30 57

原创 29. 顺时针打印矩阵

剑指 Offer 29. 顺时针打印矩阵思路:模拟空值处理:当matrix为空时,直接返回空列表初始化循环打印返回列表class Solution {public: vector<pair<int,int>> mv={{0,1},{1,0},{0,-1},{-1,0}}; vector<int> spiralOrder(vector<vector<int>>& matrix) { int

2021-11-02 22:20:13 54

原创 week7

7.1 过拟合的问题处理过拟合问题(over-fitting):丢弃一些无用特征正则化(regularization)7.2 代价函数对于模型hθ(x)=θ0+θ1x1+θ2x22+θ3x33+θ4x44h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2^2+\theta_3x_3^3+\theta_4x_4^4hθ​(x)=θ0​+θ1​x1​+θ2​x22​+θ3​x33​+θ4​x44​​,由于高次项导致过拟合的产生,如果能让这些高次项的系数

2021-10-30 22:17:37 75

原创 62. 圆圈中最后剩下的数字

剑指 Offer 62. 圆圈中最后剩下的数字思路:数学[0,1,2,3,4]每次删除第m个数,反推:第四次反推:补上m个位置,模上当前数组大小2第三次反推:补上m个位置,模上当前数组大小…总结,就是(index+m)%当前数组大小class Solution {public: int lastRemaining(int n, int m) { int res=0; for(int i=2;i<=n;++i){ res=

2021-10-30 00:07:48 48

原创 57 - II. 和为s的连续正数序列

剑指 Offer 57 - II. 和为s的连续正数序列思路:滑动窗口初始化:左边界i=1,有边界j=2,元素和s=3,结果列表res循环:当i>=j跳出:当s>target:向右移动左边界i=i+1,并更新元素和当s<target:向右移动有边界j=j+1,并更新元素和当s==target:记录整数序列,并向右移动左边界i=i+1返回值:resclass Solution {public: vector<vector<int>>

2021-10-29 23:48:09 59

原创 14- I. 剪绳子

剑指 Offer 14- I. 剪绳子思路:数学将长度为n的绳子切为a段:n=n1+n2+⋯+nan=n_1+n_2+\cdots+n_an=n1​+n2​+⋯+na​等价于求解:max(n1×n2×⋯×na)max(n_1 \times n2 \times \cdots \times n_a)max(n1​×n2×⋯×na​)数学推导:以下公式是均值不等式,等号当且仅当n1=n2=⋯=nan_1=n_2=\cdots=n_an1​=n2​=⋯=na​时成立设绳子按照x长度分为a段,则乘

2021-10-29 23:23:45 45

原创 66. 构建乘积数组

剑指 Offer 66. 构建乘积数组思路:模拟class Solution {public: vector<int> constructArr(vector<int>& a) { if(a.empty()) return {}; vector<int> b(a.size()); b[0]=1; for(int i=1;i<a.size();++i){ b[

2021-10-29 22:40:58 50

原创 39. 数组中出现次数超过一半的数字

剑指 Offer 39. 数组中出现次数超过一半的数字思路:摩尔投票法初始化:票数统计votes=0,众数x循环:遍历数组当票数votes=0,则假设当前数字是num当num=x时,票数votes加1;当num!=x时,票数votes减1返回值:xclass Solution {public: int majorityElement(vector<int>& nums) { int x=0,count=0; for(int

2021-10-29 22:12:07 46

原创 2021.10.29打卡

335. 路径交叉思路:归纳class Solution {public: bool isSelfCrossing(vector<int>& distance) { int n=distance.size(); for(int i=3;i<n;++i){ if(distance[i]>=distance[i-2]&&distance[i-1]<=distance[i-3]){

2021-10-29 22:01:07 48

原创 56 - I. 数组中数字出现的次数

56 - I. 数组中数字出现的次数思路:位运算计算数组的异或和循环左移计算m根据m拆分数组得到结果class Solution {public: vector<int> singleNumbers(vector<int>& nums) { int x=0,y=0,m=1,sum=0; for(int n:nums){ sum^=n; } while((m&amp

2021-10-29 00:29:46 51

原创 56 - II. 数组中数字出现的次数 II

56 - II. 数组中数字出现的次数 II思路:遍历统计使用位运算,获取num最后一位n1n_1n1​:右移,可获取num所有位的值然后,对数组遍历,对3求余,得到结果class Solution {public: int singleNumber(vector<int>& nums) { int counts[32]; memset(counts,0,sizeof(counts)); for(int num:nums

2021-10-29 00:19:54 66

原创 65. 不用加减乘除做加法

剑指 Offer 65. 不用加减乘除做加法思路:位运算如何处理负数?c++不支持负数的移位,需要加入转换为非负数后操作class Solution {public: int add(int a, int b) { unsigned int a1=a,b1=b; while(b1>0){ unsigned temp=(a1&b1)<<1; a1=a1^b1; b

2021-10-28 23:33:54 1076

原创 15. 二进制中1的个数

剑指 Offer 15. 二进制中1的个数思路:数学技巧n&(n-1): 二进制数字n最右边的1变成0class Solution {public: int hammingWeight(uint32_t n) { int count=0; while(n){ count++; n=n&(n-1); } return count; }};时间复杂度

2021-10-28 23:17:57 39

原创 33. 二叉搜索树的后序遍历序列

33. 二叉搜索树的后序遍历序列思路:分治由于二叉搜索树具有左子树小于根节点,右子树大于根节点的性质,通过递归判断是否为二叉搜索树。算法流程:终止条件:当i≥ji\ge ji≥j,说明此子树节点数量≤1\leq 1≤1,无需判别正确性,直接返回true递归工作:划分左右子树:遍历后序遍历的[i,j]区间元素,寻找第一个大于根节点的节点,索引为m,此时可以划分左子树区间为[i,m-1],右子树区间为[m,j-1],根节点索引为j分别判断左子树和右子树是否为二叉搜索树返回值:所有节点遍

2021-10-28 22:43:42 647

原创 2021.10.28打卡

869. 重新排序得到 2 的幂思路:预处理+哈希表由于我们可以按任意顺序对数字进行排序,因此对于两个不同的整数a和b,如果十进制表示的字符数组,从小到大排序的结果是相同的,那么若a能够重排得到2的幂,那么b也可以;若a不能重排得到2的幂,那么b也不能。进一步,只要a和b的十进制表示的字符数组中,从0到9每个字符的出现次数,在a和b中都是一样的,那么a和b能否重排得到2的幂的结果是一样的。首先对1到10910^9109的范围内的2的幂记录在哈希表中,之后对数字n处理,判断数字n对应的字符数组是否在哈

2021-10-28 21:38:06 1147

原创 16. 数值的整数次方

剑指 Offer 16. 数值的整数次方思路:二分法考虑n<0的情况,如果n<0&&n==INT_MIN,则需要对n进行处理;否则正常取反当n>0时,如果n能被2整除,对n进行二分;否则进行减一操作class Solution {public: double myPow(double x, int n) { if(n==0) return 1; if(n<0){ if(n==INT_MIN) r

2021-10-28 00:53:47 33

原创 07. 重建二叉树

07. 重建二叉树思路:分治终止条件:当left>right, 代表已越过叶节点,返回null递归工作:建立根节点:节点值为preorder[left1]划分左右子树:查找根节点在中序遍历inorder中索引构建左右子树返回root/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right

2021-10-28 00:19:26 687

原创 2021.10.27打卡

301. 删除无效的括号思路:回溯+剪枝题目让我们删除括号使得剩下的括号匹配,要求删除最少的括号数,并且要求得到所有的结果。可以使用回溯算法,尝试遍历所有可能的去掉非法括号的方案。首先利用括号匹配的规则求出字符串s中最少需要去掉的lremove左括号数目和rremove右括号数目,然后尝试在原字符串中删除lremove个左括号和rremove个右括号,检测剩余字符串是否合法,如果合法可以认为该字符串为可能的结果。在回溯时利用以下的剪枝技巧增加搜索的效率:利用括号左右匹配的特点,设置变量lcoun

2021-10-27 23:33:53 59

原创 2021.10.26打卡

496. 下一个更大元素 I思路:单调栈+哈希表可以预处理nums2, 使用单调栈计算nums2每个元素右边的第一个更大的值,使用哈希表存储结果。单调栈维护当前位置右边更大的元素列表,从栈底到栈顶元素单调递减。具体地,每次移动到数组中一个新的位置i,就将当前单调栈所有小于nums2[i]的元素弹出单调栈,当前位置右边的第一个更大的元素即为栈顶元素,如果栈为空则说明当前位置右边没有更大的元素。随后将位置i的元素入栈。因为nums2没有重复元素,可以使用哈希表存储元素值和其右边第一个更大的元素值的对应

2021-10-27 22:37:39 47

RayTracer.zip

ray tracer光线追踪简单实现,适合图形学学习者

2021-04-18

submission.tar.gz

gba简单方块移动小游戏适合对gba编程感兴趣的人

2021-04-18

FaceRecognitionApp-1.2.3.zip

人脸识别Android应用

2020-12-13

TongXin-master.zip

基于安卓的校园组队平台

2020-12-13

proteldxp.rar

Protel DXP PCB线路图设计系统完全利用了Windows XP和Windows 2000平台的优势,具有改进的稳定性、增强的图形功能和超强的用户界面。 Protel DXP是一个单个的应用程序,能够提供从概念到完成板卡设计项目的所有功能要求,其集成程度在PCB设计行业中前所未见。 Protel DXP采用一种新的方法来进行板卡设计,使你能够享受极大的自由,从而能够使你在设计的不同阶段随意转换,按你正常的设计流量进行工作。 Protel DXP是第一套完整的板卡级设计系统,真正实现在单个应用程序中的集成。设计从一开始的目的就是为了支持整个设计过程,Protel DXP让你可以选择最适当的设计途径来按你想要的方式工作。

2020-06-30

SocketDemo-master.rar

这是有关TCPUDP编程实现的简单案例 代码文件: TCP_File_Transfer_Client.cpp TCP_File_Transfer_Server.cpp UDP_Send_Message_Client.cpp UDP_Send_Message_Server.cpp 分别为两种通信模式(TCP、UDP)的示例代码,代码里有注释。 第一个字段表示这段代码使用的传输方式(TCP、UDP) 中间字段表示代码功能:文件传输、消息发送 最后字段表示代码是属于客户端的还是服务端的 代码文件:TCP_File_Transfer_Client.cpp 代码内容:TCP的文件传输客户端代码;建立连接后,发送给服务器,需要传输的文件路径,若文件路径存在,接收服务器发送的文件流,发送完毕则关闭连接。 代码文件:TCP_File_Transfer_Server.cpp 代码内容:TCP的文件传输服务端代码;建立连接后,接收Client传输的文件路径,若文件路径存在,则发送该文件给Client,发送完毕则关闭连接。 代码文件:UDP_Send_Message_Client.cpp 代码内容:UDP的消息发送客户端代码;从键盘中读取消息,发送给服务端 代码文件:UDP_Send_Message_Server.cpp 代码内容:UDP的消息发送服务端代码;循环接收来自客户端的消息,并输出到屏幕

2020-06-30

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除