自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 收藏
  • 关注

原创 java继承

参考:Java继承深入版

2024-03-16 11:39:01 312

原创 关于static

static创建的对象可以有多个副本,副本之间互不影响。在类加载时,只需要一次。

2024-03-16 11:37:03 390

原创 对象的组合复用学习笔记

简单说,就是不同类的多个对象之间彼此调用对方的方法和变量,可能会多次调用,所以叫复用(重复),所有对象本身具有独立的功能(方法),共同完成一项任务的一部分,或者多个类的对象协助一个类完成一个任务。多次调用存在 对象A 使用了对象B{b()}中的方法b(),然后方法C又使用了方法A中 通过调用方法B得到的变量或或方法,这算是一种比较难理解的。

2024-03-13 19:57:04 394

原创 Day42|动态规划4.3

2.确定递推公式:dp[j] = max(dp[j],dp[j - weight[i]] + value[i]);所以递推公式:dp[i][j] = max(dp[j],dp[j - nums[i]] + nums[i]);这道题中,dp[j]表示 背包总容量(所能装下的总重量)是j,放进物品后,背的最大重量是dp[j].背包要放入的商品(集合里的元素)重量为元素的数值,重量也为元素的数值,价值也为元素的数值。01背包中,dp[j]表示 容量为j的背包,所背的物品价值最大可以为dp[j].

2024-03-11 21:47:32 401

原创 Day34|贪心算法|分发糖果

如果ratings[i] > ratings[i - 1]那么[i]的糖果一定要比[i - 1]多一个:candyVec[i] = candyVec[i - 1] + 1。左孩子大于右孩子的情况要从后往前遍历,这样我们后面要比较两次中的结果,取最大的值,从而保证这个值既大于左边也大于右边。相邻的孩子中,评分高的孩子必须获得更多的糖果。全局:相邻孩子中,评分高的右孩子获得比左孩子更多的糖果。先比较一边,再比较另一边,两个分开考虑。局部:右边评分>左边评分,右边多得一个。先从左往右,再从右往左。

2024-03-11 20:34:08 509

原创 matlab阶段学习笔记小节2

第二题第三题求的的函数y关于自变量n在无穷处(inf)的极限exp(2)即指数为2,底为e,也就是e^2。

2024-03-10 16:50:25 493 1

原创 java中移位<< >> <<< |数据类型转换

int(-2 147 483 648 ~ 2 147 483 647)(-2^31 ~ 2^31 - 1)二进制补码表示的整数,32位,有符号位,整数的默认类型。//将基本类型double的a,转换成包装类型的b。short(-32768~32767)(-2^15~2^15-1)二进制补码的整数 16位,有符号位,范围是in的1/2。//将包装类型Double类型的b转换位基本类型double类型。byte(-128~127)(-2^7~2^7-1)二进制有8位,范围是int的1/4。

2024-03-10 11:35:42 329

原创 java中{ }对变量可用scope的限制

y定义在{}内,属于局部变量,只能再在{}其中有效使用,因此第二个输出报错。将int y=6放在main()后,{}前可解决。改变变量定义位置可解决。

2024-03-10 09:37:06 329

原创 java数值运算a/0 ;0/b; 0/0;结果

3/0==indinity 无穷大0/4==00/0==NaN 不定值

2024-03-10 09:09:15 351

原创 Day33|贪心算法part3

i从0开始累加rest[i],和记为curSum,一旦curSum小于0,说明[0,i]区间都不能作为起始位置,因为这个区间选择任何一个位置作为起点,到这里都会断油,那么起始位置往前推一个节点到i+1,再次从0计算curSum,合适就是它了,返回,不合适,继续推。思路:贪心,局部最优,让绝对值大的负数变正数,当前数值达到最大,整体最优;整个数组和达到最大。第二种情况,rest[i] = gas[i] - cost[i]为一天剩下的油,i从0开始计算累加到最后一站,如果累加没出现负数,说明0就是起点。

2024-03-09 11:11:35 440

原创 Day32|贪心算法part2

【代码】Day32|贪心算法part2。

2024-03-08 17:42:59 339

原创 while(){}的终止时的边界问题,‘--‘先执行还是‘>‘循环体执行条件先判断

当n增加到9,m已经减到了1,下一轮循环执行前m先自减的话,m==0不再满足执行循环体的条件m>0,也就无法完成n+1==10的过程。但是m在上一轮中得到的是1,满足循环执行条件,使得最终结果n=10. 由此得出循环体判断的是上一次m的值,也。每次在执行结构体前都要先判断,而且是执行完结构体内语句再自减,问题是判断的是上一轮循环后的m,还是将要执行的一轮循环中自减后的m?可以看出,每次n+1,m都已经自减过了,这表明 每次循环体执行前,m会先进行自减。默认的--优先级先于>

2024-03-08 11:52:27 338

原创 9*9乘法表

动手写写画画整个程序的输出结果。

2024-03-08 11:24:28 417

原创 source not found for数组a的引用Exception

adress=identityHashCode(a)//将得到数组a的哈希值。在同一个数据类型下,同一对象的哈希值是一样的,同一哈希值对应同一对象。由于不同数据类型的变量哈希值生成算法不同,所以在数据类型不同的情况下,同一哈希值对应的对象可能有多个。(就是恰好使用不同的算法生成了一样的值)

2024-03-08 11:22:46 334

原创 Day31|贪心算法1

贪心的本质是选择每一阶段的局部最优,从而达到全局最优。无固定套路,举不出反例,就可以试试贪心。一般解题步骤:1.将问题分解成若干子问题2.找出适合的贪心策略3.求解每一个子问题的最优解4.将局部最优解堆叠成全局最优解。

2024-03-04 11:16:48 2045

原创 matlab阶段学习小节1

点乘dot函数,dot(A,B,dim)把A和B对应位置的元素求积,然后根据维度dim的值,进行求和。%A[:]冒号前后是行和列标记 冒号表示整个行,或者整个列 取出某几行A([1,2,3],:)% 多项式2x^3+4x+6 由于最高项次数为3,最小项次数为0,中间跨越了一项0*x^2,%计算多项式的伴随矩阵时,如缺失某一含有未知数项,要考虑到n次项系数为0。%跳跃式提取A(1:2:10)每隔2次取一次,从第1行取到第10行。%左除运算A\B,右矩阵为被除数(从右往左)%A\B等效于inv(A)*B。

2024-03-02 19:34:59 458

原创 Day42|动态规划4.2

如果将dp[i - 1]所在层拷贝到dp[i]上,表达式转化为dp[i][j] = max(dp[i][j],dp[i][j-weight[i]] + value[i]);4.1使用二维数组,递推公式为 dp[i][j] = max(dp[i - 1][j] , dp[i - 1][j -weight[i]]+value[i]);dp[j]可以通过dp[j - weight[i]]推导,dp[j - weight[i]]表示容量为j - weight[i]的背包所背的最大价值。结合定义,dp[0]=0;

2024-03-01 11:26:22 326

原创 Day42|动态规划4.1

放物品i:由dp[i - 1][j - wight[i]]推出,dp[i - 1][j - wight[i]]为背包容量为j - wight[i]的时候不放物品i的最大价值,(最大价值依然还和上次i-1处一样,没变),那么dp[i - 1][j - weight[i]] + value[i](物品i的价值),就是背包放物品i得到的最大价值(背包里没能放进去当前这一件物品,因此背包价值和上一次一样,但是最终价值=当前这个背包的价值(可能含有前面放进的物品)+当前没能放进去的物品的价值)。用动态规划进行优化。

2024-02-27 17:57:54 894

原创 Day35|贪心算法4

先局部最优,顾客给20时,优先找10,完成本次找零。由局部最优推出全局最优:完成全部账单的找零。顾客给20,找10+5或5+5+5。三种情况:顾客给5,不找零。

2024-02-27 16:02:22 344

原创 Day41|动态规划3

j从1开始遍历,拆分出的数字逐渐变大,但要找出所有拆分结果乘积中的最大的那个,一边比较,一边继续遍历和拆分,直到找到所有拆分结果中乘积最大的那个为止,返回最大乘积。由于dp[i]依赖于dp[i - j]的状态,所以遍历i是从前往后的,也就是说,先有了dp[i - j]才有了dp[i].2.递推公式:dp[i]=dp[以j为头节点的左子树节点数量]*dp[以j为头节点的右子树节点数量]递推公式:dp[i] = max{dp[i], (i-j)*j,dp[i - j] * j};

2024-02-26 11:37:17 346

原创 Day39|动态规划2

思路分析:加入了障碍,标记对应的dp table,保持初始值(0)即可。1.dp[i][j]表示从(0,0)到(i,j)的不同路径数。如果(i,j)就是障碍的话,应该保持初始状态(初始状态为0)1.dp[i][j]表示从(0,0)到(i,j)的路径条数。两个方向过来当前位置,是两条路径,路径条数,不是步数。5.举例推导,尝试带入 3,7,手动打印。4.遍历顺序:从左到右,从上到下。obs为0时才进行,为1不进行。

2024-02-23 16:57:36 399

原创 Day38|动态规划1

还有就是dp[i - 2],上i-2层楼梯,有dp[i - 2]种方法,那么再一步跳两个台阶不就是dp[i]了么。首先是dp[i - 1],上i-1层楼梯,有dp[i - 1]种方法,那么再一步跳一个台阶不就是dp[i]了么。从递归公式可以知道dp[i]依赖于dp[i-1]和dp[i-2],那么递归的顺序一定是从前到后。所以dp[i] = dp[i - 1] + dp[i - 2]。那么dp[i]就是 dp[i - 1]与dp[i - 2]之和!递推公式已给出dp[i]=d[i-1]+d[i+2];

2024-02-23 15:52:29 354

原创 代码随想录算法训练营Day27|回溯算法·组合总和、组合总和II、分割回文串

题目:给定数组candidates和一个目标数target,找出candidates中所有可以使数字和target的组合。candidates中的每个数字在每个组合中只能使用一次。解集中不包含重复的组合。思路:先用前面学的回溯算法,求出解集合,再用set或map去重。缺点:麻烦,易超时。树层,横向避免重复,先排序,相同的挨着,前面遍历过,就不用再遍历了。优解:在搜索中直接去重。(使用过的元素不再使用)树枝可以,纵向是一个组合内的元素,可以重复。先排序,才能剪枝,在for循环处剪枝。

2024-02-15 17:31:24 369

原创 代码随想录算法训练营Day25|回溯算法·组合总和III,电话号码的字母组合

1.回溯函数参数,题目给定的string digits,int 型的index记录遍历到第几个数字了,就是用来遍历digits的(digits题目给定的数字字符串),同时index也表示树的深度。简单思路是使用k重循环,一层层找出来,然后把每一层的数相加,等于n就把这个组合找出来,输出。如果index等于输入的数字个数(digits.size),举例输入的“23”,深度就2,每次递归,遍历两次就可以。题目:找出所有相加之和为n的k个数的组合。剪去元素总和超过和n的,剪枝的地方可以放在递归函数开始的地方,

2024-02-14 16:04:19 497

原创 代码随想录算法训练营Day24|回溯基础理论、组合

改为i< n -(k-path.size())+1 //此时是左闭右开,从startIndex开始,如果不用左闭右开,视情况而定。//二维数组,定义为全局变量,最后需要一个大组合把所有小组合以结果集方式返回回去。//递归,例如从14变21,需要从第一层变为第二层。//回溯,例如从12变13,变14,需要把前一个pop释放出去。回溯可以抽象为图形结构,抽象为树形结构,n叉树,横向:宽度即集合大小,纵向:深度即递归的深度。if(path.size() == k){//k为组合大小,到达叶子节点。

2024-02-12 12:49:14 359

原创 代码随想录算法训练营Day22|二叉搜索树的最近公共祖先、二叉搜索树中的插入操作、删除二叉搜索树中的节点

第五种,左右孩子节点都不为空,则将删除节点的左子树节点(左孩子)放到删除节点的左子树的最左面节点的左孩子上,返回删除节点右孩子为新的根节点。第三种,第四种,删除节点的左(右)孩子为空,右(左)孩子不为空,删除节点,右(左)孩子补位,返回右(左)孩子为根节点。终止条件就是找到遍历的节点为null的时候,就是要插入节点的位置了,并把插入的节点返回。不用递归函数返回值,找到插入的节点位置,直接让其父节点指向插入节点,结束递归,也可以。题目:根节点和要插入树中的值,插进二叉搜索树,保存,返回任意有效的二叉搜索树。

2024-02-10 08:26:14 799

原创 代码随想录算法训练营Day21|二叉搜索树的最小绝对差、二叉搜索树中的众数、二叉树的最近公共祖先

在递归函数有返回值的情况下,如果要搜索一条边,递归函数返回值不为空的时候,立刻返回,如果搜索整个树,直接用一个变量left,right接住返回值,这个left,right后序还有逻辑处理的需要,也就是后序遍历中处理中间节点的逻辑(也就是回溯)。在回溯过程中,必然要遍历整棵二叉树,即使已经找到结果了,依然要把其他节点遍历完,因为要使用递归函数的返回值,也就是代码中国的left和right做逻辑判断。值得注意的是,本题函数有返回值,是因为回溯的过程需要递归函数的返回值做判断,但本题我们依然要遍历树的所有节点。

2024-02-07 15:08:46 780

原创 代码随想录算法训练营Day20|最大二叉树、合并二叉树、二叉搜索树中的搜索、验证二叉搜索树

要定义一个long long 的全局变量,用来比较遍历的节点是否有序,因为后台测试数据中有int最小值,所以定义为long long的类型,初始化为long long 最小值。题目中说了输入的数组大小一定是大于等于1的,所以我们不用考虑小于1的情况,那么当递归遍历的时候,如果传入的数组大小为1,说明遍历到了叶子节点了。参数传入的是存放元素的数组,返回该数组构造的二叉树的头节点,返回类型是指向节点的指针。递归函数的参数传入的就是根节点和要搜索的数值,返回的就是以这个搜索数值所在的节点。

2024-02-01 22:55:05 1813

原创 代码随想录算法训练营Day18|找树左下角的值、路径总和、从中序与后序遍历序列构造二叉树

最左边,左优先,保证优先左边搜索,记录深度最大的叶子节点,此时就是树的最后一行最左边的值。无 中间节点的处理逻辑,可以使用前序遍历、也可以中后,左优先就可以。不去累加然后判断是否等于目标和,那么代码比较麻烦,可以用递减,让计数器count初始值为目标和,然后每次减去遍历路径节点上的数值。参数:需要二叉树的根节点,还需要一个计数器,这个计数器用来计算二叉树的一条边之和是否正好是目标和,计数器为int型。这道题中,我们要找到其中一条符合条件的路径,所以递归函数需要返回值,及时返回,那么返回类型是什么呢?

2024-01-30 17:50:19 866

原创 代码随想录算法训练营Day17|平衡二叉树、二叉树的所有路径、左叶子之和

因为题目种没说清楚左叶子究竟是什么节点,那么我来给出左叶子的明确定义:节点A的左孩子不为空,且左孩子的左右孩子都为空(说明是叶子节点),那么A节点的左孩子为左叶子节点。关于根节点的深度究竟是1还是0,不同的地方有不同的标准,leetcode的题目中都是以节点为1度,维基百科上定义用边为一度,即根节点的深度是0,以具体题目要求为准。注意,只有当前遍历的节点是父节点,才能判断其子节点是不是左叶子。如果该节点的左节点不为空,该节点的左节点的左节点为空,该节点的左节点的右节点为空,则找到了一个左叶子。

2024-01-30 00:03:05 844

原创 代码随想录算法训练营Day16|二叉树的最大最小深度、完全二叉树的节点数

3.确定单层递归的逻辑:先求它的左子树的深度,再求右子树的深度,最后取左右深度最大的数值,再+1(加1是因为算上当前中间节点)就是目前节点为根节点的树的深度。二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数或者节点数(取决于深度是从0开始还是从1开始)本题可以使用前序(中左右),也可以使用后序遍历(左右中),使用前序求的就是深度,使用后序求的是高度。根节点的高度就是二叉树的最大深度,本题可以通过后序求的根节点高度来求的二叉树最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。

2024-01-27 16:42:00 555

原创 代码随想录算法训练营Day15|层序遍历,翻转二叉树,对称二叉树

翻转二叉树也可以使用迭代法,但要注意,这里迭代法不是前中后序的迭代写法,因为本题的本质是判断两个树是否是相互翻转的,其实已经不是所谓二叉树遍历的前中后序的关系了。判断对称二叉树要比较的是哪两个节点,要比较的不是左右节点,而是两个树,这个树是根节点的左右子树,所以在递归遍历的过程中,也要同时遍历两棵树。因为我们要比较的是根节点的两个子树是否是相互翻转的,进而判断这个树是不是对称树,所以要比较的是两个树,参数自然也是左子树节点和右子树节点。节点为空的情况有:(注意!比较的是左右节点,是节点,不是左右孩子)

2024-01-27 01:11:39 966

原创 代码随想录Day14(3)|二叉树 统一迭代

以中序遍历为例,由于无法同时解决访问节点(遍历节点)和处理节点(将元素放进结果集)不一致的情况。那么我们就将访问的节点放入栈中,把要处理的节点也放进栈中,但是要做好标记。我们将访问的节点直接加入到栈中,但如果是处理的节点则后面放入一个空节点,这样只有空节点弹出的时候,才将下一个节点放进结果集。前面用迭代法,难以实现统一的代码,不像递归法改一下节点顺序就可以转化成另一个。标记方式即,在把要处理的节点放入栈后,紧接着放空指针作为标记。

2024-01-26 11:11:34 415 1

原创 代码随想录算法训练营Day14(2)|递归遍历,迭代遍历

原因在于,前序遍历的顺序是中左右,先访问的元素是中间节点,要处理的元素也是中间节点,所以刚刚才能写出相对简洁的代码,因为要访问的元素和要处理的元素顺序是一致的,都是中间节点。而中序遍历是左中右,先访问的是二叉树顶部的节点,然后一层一层向下访问,直到到达树左面的最底部,再开始处理节点(也就是在把节点的数值放进result数组中),这就造成了处理顺序和访问顺序是不一样的。确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数,并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。

2024-01-24 22:10:40 511 1

原创 裁员潮下,我们无处可去了吗?

顺势而作,我想,作为一个计算机人,应该都具备相当的学习能力了,请你和我一起,不断学习,新技术尽管难点,也是人研究出来的,人想出来的,那他就是可学的。不过,我还是希望,我们都能成为“弄潮人”,说不定,下一个新技术的研发就有你我的推力。能成为一个程序员,每个人都付出了很多精力和时间成本,我们好不容易找到的自己的工作,至少是可以糊口生存的工作吧,然后在工作岗位兢兢业业,结果却因为各种原因失去的生存的饭碗。一对来自中国的工程师夫妻在美身亡,疑因谷歌裁员致悲剧发生。在技术变革下,裁员对于程序员的影响到底有多大?

2024-01-23 16:16:14 353 1

原创 计算机组成原理学习笔记|计算机结构

哈佛结构是一种将程序指令存储和数据存储分开的存储器结构。主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个独立的存储器,每个存储器独立编址、独立访问。冯诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。(指令存储和数据存储都有各自的数据总线和地址总线,总共加起来是4条)(工作时,先读指令,读指令前必须借助地址总线找到指令的存储位置)2.指令与数据分开存储,可以并行读取,有较高数据的吞吐率。3.数据缓冲寄存器DR:写内存时,暂存指令或数据。

2024-01-22 21:23:54 396

原创 【一周学习目标】计算机组成原理

学习目标:一周学完软考计算机组成原理的要点和考点学习内容:熟悉计算机基本组成结构 掌握冯诺依曼结构和哈佛结构的基本原理 掌握层次化存储结构 掌握主存编址计算 掌握磁盘的基本结构和存取过程,掌握磁盘优化分布存取,理解并掌握磁盘单缓冲区和双缓冲区读取的原理,掌握磁盘移臂调度算法 掌握数据传输控制方式 理解并掌握总线 掌握CISC与RISC 掌握流水线与校验码学习时间:周一至周日上午10点~下午14点学习产出:CSDN 技术博客技术笔记 12篇 习的 vlog 视频

2024-01-21 22:55:54 373

原创 代码随想录算法训练营Day14(1)|二叉树

完全二叉树:在完全二叉树中,除了最底层节点可能每填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的位置。满二叉树:如果一颗二叉树只有度为0的节点和度为2的节点,并且度为0的节点在同一层上,则这棵二叉树为满二叉树。平衡二叉搜索树,又叫AVL树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一颗平衡二叉树。顾名思义,顺序存储的元素在内存中是连续分布的,链式存储则是通过指针把分布在各个地址的节点串联在一起。广度优先遍历:一层一层地区遍历。

2024-01-21 22:37:06 356

原创 leetocode做题笔记|49字母异位词分组

同一组字母异位词中的字符串具备相同点,可以使用相同点作为一组字母异位词的标志,使用哈希表存储每一组字母异位词,哈希表的键为一组字母以为此的标志,哈希表的值为一组字母异位词列表。由于互为字母以为此的两个字符串包含的字母相同,因此两个字符串中的相同字母出现的次数一定是相同的,故可以将每个字母出现的次数使用字符串表示,作为哈希表的键。由于互为字母异位词的两个字符串包含的字母相同,因此对两个字符串分别进行排序之后得到的字符串一定是相同的,故可以将排序之后的字符串作为哈希表的键。

2024-01-21 20:23:56 327

原创 代码随想录Day13|滑动窗口最大值、前k个高频元素

2.使用一个大顶堆(优先级队列)来存放这个窗口里的k个数字,这样就可以知道最大的最大值是多少了,但是问题是这个窗口是移动的,而大顶堆每次只能弹出最大值,我们无法移除其他数值,这样就造成大顶堆维护的不是滑动窗口里面的数值了。返回滑动窗口中的最大值。此时我们需要一个队列,把窗口里的元素放进这个队列里,然后随着窗口的移动,队列也一进一出,每次移动之后,队列告诉我们里面的最大值是什么。队列不需要维护窗口里的所有元素,只需要维护有可能成为窗口里最大值的元素就可以了,同时保证队列里的元素数值是由大到小的。

2024-01-19 22:32:51 389

空空如也

空空如也

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

TA关注的人

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