- 博客(58)
- 收藏
- 关注
原创 字符三角形
if ord(n) < 65: # 如果输入的ASCII值小于65,说明输入的是数字(数字的ASCII值范围是48-57)print(' ', end='') # end=''表示不换行,继续在同一行打印。print(chr(j - 1), end='') # 打印字符,不换行。print(chr(j), end='') # 打印字符,不换行。print(j - 1, end='') # 打印数字,不换行。print(' ', end='') # 打印空格,不换行。# 打印从i-1到1的数字。
2025-04-08 08:48:09
111
原创 错误: 找不到或无法加载主类 com.example.demo.Demo1Application原因: java.lang.ClassNotFoundException: com.example.d
demo被我删除了,主类的父级目录不在demo下,要删除一级。
2025-03-23 20:09:37
187
原创 neoj4 console运行不成功原因
2.检查C:/Windows/system路径中有没有neoj4,没有需要你在环境变量中添加进去,不然直接用C:/Andriored/下的命令neoj4是不可能使用成功的。中间如果出现”PowerShell 不是……“的错误的话,你需要在Path里新建一个环境变量:C:\Windows\System32\WindowsPowerShell\v1.0 (可能拼写错误,看下图:)!1.检查自己jdk环境和neoj4环境是不是没弄好!注意:这里路径是你自己下载jdk的路径,不要抄。新建的CLASSPAYH和。
2024-11-05 16:27:52
399
原创 关于python取四舍五入的值错误的原因
由于 0.1235 的实际存储值可能非常接近 0.1234999999999999 ,当你四舍五入到小数点后三位时,它会被四舍五入为 0.123 而不是 0.124。这是因为它与0.1234999不再接近。
2024-09-13 13:08:59
363
原创 链表的指针的疑问
来自两个节点的两个指针(或多个)可以指向同一个节点,但是同一个节点的指针域只能指向一个节点,因为指针域的空间有限,只能存下一个节点的地址。
2024-09-08 14:45:47
205
1
原创 对象的组合复用学习笔记
简单说,就是不同类的多个对象之间彼此调用对方的方法和变量,可能会多次调用,所以叫复用(重复),所有对象本身具有独立的功能(方法),共同完成一项任务的一部分,或者多个类的对象协助一个类完成一个任务。多次调用存在 对象A 使用了对象B{b()}中的方法b(),然后方法C又使用了方法A中 通过调用方法B得到的变量或或方法,这算是一种比较难理解的。
2024-03-13 19:57:04
516
原创 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
492
1
原创 Day34|贪心算法|分发糖果
如果ratings[i] > ratings[i - 1]那么[i]的糖果一定要比[i - 1]多一个:candyVec[i] = candyVec[i - 1] + 1。左孩子大于右孩子的情况要从后往前遍历,这样我们后面要比较两次中的结果,取最大的值,从而保证这个值既大于左边也大于右边。相邻的孩子中,评分高的孩子必须获得更多的糖果。全局:相邻孩子中,评分高的右孩子获得比左孩子更多的糖果。先比较一边,再比较另一边,两个分开考虑。局部:右边评分>左边评分,右边多得一个。先从左往右,再从右往左。
2024-03-11 20:34:08
564
原创 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
397
原创 java中{ }对变量可用scope的限制
y定义在{}内,属于局部变量,只能再在{}其中有效使用,因此第二个输出报错。将int y=6放在main()后,{}前可解决。改变变量定义位置可解决。
2024-03-10 09:37:06
392
原创 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
483
原创 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
472
原创 source not found for数组a的引用Exception
adress=identityHashCode(a)//将得到数组a的哈希值。在同一个数据类型下,同一对象的哈希值是一样的,同一哈希值对应同一对象。由于不同数据类型的变量哈希值生成算法不同,所以在数据类型不同的情况下,同一哈希值对应的对象可能有多个。(就是恰好使用不同的算法生成了一样的值)
2024-03-08 11:22:46
374
原创 Day31|贪心算法1
贪心的本质是选择每一阶段的局部最优,从而达到全局最优。无固定套路,举不出反例,就可以试试贪心。一般解题步骤:1.将问题分解成若干子问题2.找出适合的贪心策略3.求解每一个子问题的最优解4.将局部最优解堆叠成全局最优解。
2024-03-04 11:16:48
2230
原创 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
515
原创 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
438
原创 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
965
原创 Day35|贪心算法4
先局部最优,顾客给20时,优先找10,完成本次找零。由局部最优推出全局最优:完成全部账单的找零。顾客给20,找10+5或5+5+5。三种情况:顾客给5,不找零。
2024-02-27 16:02:22
448
原创 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
396
原创 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
436
原创 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
390
原创 代码随想录算法训练营Day27|回溯算法·组合总和、组合总和II、分割回文串
题目:给定数组candidates和一个目标数target,找出candidates中所有可以使数字和target的组合。candidates中的每个数字在每个组合中只能使用一次。解集中不包含重复的组合。思路:先用前面学的回溯算法,求出解集合,再用set或map去重。缺点:麻烦,易超时。树层,横向避免重复,先排序,相同的挨着,前面遍历过,就不用再遍历了。优解:在搜索中直接去重。(使用过的元素不再使用)树枝可以,纵向是一个组合内的元素,可以重复。先排序,才能剪枝,在for循环处剪枝。
2024-02-15 17:31:24
401
原创 代码随想录算法训练营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
540
原创 代码随想录算法训练营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
392
原创 代码随想录算法训练营Day22|二叉搜索树的最近公共祖先、二叉搜索树中的插入操作、删除二叉搜索树中的节点
第五种,左右孩子节点都不为空,则将删除节点的左子树节点(左孩子)放到删除节点的左子树的最左面节点的左孩子上,返回删除节点右孩子为新的根节点。第三种,第四种,删除节点的左(右)孩子为空,右(左)孩子不为空,删除节点,右(左)孩子补位,返回右(左)孩子为根节点。终止条件就是找到遍历的节点为null的时候,就是要插入节点的位置了,并把插入的节点返回。不用递归函数返回值,找到插入的节点位置,直接让其父节点指向插入节点,结束递归,也可以。题目:根节点和要插入树中的值,插进二叉搜索树,保存,返回任意有效的二叉搜索树。
2024-02-10 08:26:14
903
原创 代码随想录算法训练营Day21|二叉搜索树的最小绝对差、二叉搜索树中的众数、二叉树的最近公共祖先
在递归函数有返回值的情况下,如果要搜索一条边,递归函数返回值不为空的时候,立刻返回,如果搜索整个树,直接用一个变量left,right接住返回值,这个left,right后序还有逻辑处理的需要,也就是后序遍历中处理中间节点的逻辑(也就是回溯)。在回溯过程中,必然要遍历整棵二叉树,即使已经找到结果了,依然要把其他节点遍历完,因为要使用递归函数的返回值,也就是代码中国的left和right做逻辑判断。值得注意的是,本题函数有返回值,是因为回溯的过程需要递归函数的返回值做判断,但本题我们依然要遍历树的所有节点。
2024-02-07 15:08:46
877
原创 代码随想录算法训练营Day20|最大二叉树、合并二叉树、二叉搜索树中的搜索、验证二叉搜索树
要定义一个long long 的全局变量,用来比较遍历的节点是否有序,因为后台测试数据中有int最小值,所以定义为long long的类型,初始化为long long 最小值。题目中说了输入的数组大小一定是大于等于1的,所以我们不用考虑小于1的情况,那么当递归遍历的时候,如果传入的数组大小为1,说明遍历到了叶子节点了。参数传入的是存放元素的数组,返回该数组构造的二叉树的头节点,返回类型是指向节点的指针。递归函数的参数传入的就是根节点和要搜索的数值,返回的就是以这个搜索数值所在的节点。
2024-02-01 22:55:05
1953
原创 代码随想录算法训练营Day18|找树左下角的值、路径总和、从中序与后序遍历序列构造二叉树
最左边,左优先,保证优先左边搜索,记录深度最大的叶子节点,此时就是树的最后一行最左边的值。无 中间节点的处理逻辑,可以使用前序遍历、也可以中后,左优先就可以。不去累加然后判断是否等于目标和,那么代码比较麻烦,可以用递减,让计数器count初始值为目标和,然后每次减去遍历路径节点上的数值。参数:需要二叉树的根节点,还需要一个计数器,这个计数器用来计算二叉树的一条边之和是否正好是目标和,计数器为int型。这道题中,我们要找到其中一条符合条件的路径,所以递归函数需要返回值,及时返回,那么返回类型是什么呢?
2024-01-30 17:50:19
974
原创 代码随想录算法训练营Day17|平衡二叉树、二叉树的所有路径、左叶子之和
因为题目种没说清楚左叶子究竟是什么节点,那么我来给出左叶子的明确定义:节点A的左孩子不为空,且左孩子的左右孩子都为空(说明是叶子节点),那么A节点的左孩子为左叶子节点。关于根节点的深度究竟是1还是0,不同的地方有不同的标准,leetcode的题目中都是以节点为1度,维基百科上定义用边为一度,即根节点的深度是0,以具体题目要求为准。注意,只有当前遍历的节点是父节点,才能判断其子节点是不是左叶子。如果该节点的左节点不为空,该节点的左节点的左节点为空,该节点的左节点的右节点为空,则找到了一个左叶子。
2024-01-30 00:03:05
892
原创 代码随想录算法训练营Day16|二叉树的最大最小深度、完全二叉树的节点数
3.确定单层递归的逻辑:先求它的左子树的深度,再求右子树的深度,最后取左右深度最大的数值,再+1(加1是因为算上当前中间节点)就是目前节点为根节点的树的深度。二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数或者节点数(取决于深度是从0开始还是从1开始)本题可以使用前序(中左右),也可以使用后序遍历(左右中),使用前序求的就是深度,使用后序求的是高度。根节点的高度就是二叉树的最大深度,本题可以通过后序求的根节点高度来求的二叉树最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。
2024-01-27 16:42:00
724
原创 代码随想录算法训练营Day15|层序遍历,翻转二叉树,对称二叉树
翻转二叉树也可以使用迭代法,但要注意,这里迭代法不是前中后序的迭代写法,因为本题的本质是判断两个树是否是相互翻转的,其实已经不是所谓二叉树遍历的前中后序的关系了。判断对称二叉树要比较的是哪两个节点,要比较的不是左右节点,而是两个树,这个树是根节点的左右子树,所以在递归遍历的过程中,也要同时遍历两棵树。因为我们要比较的是根节点的两个子树是否是相互翻转的,进而判断这个树是不是对称树,所以要比较的是两个树,参数自然也是左子树节点和右子树节点。节点为空的情况有:(注意!比较的是左右节点,是节点,不是左右孩子)
2024-01-27 01:11:39
1160
原创 代码随想录Day14(3)|二叉树 统一迭代
以中序遍历为例,由于无法同时解决访问节点(遍历节点)和处理节点(将元素放进结果集)不一致的情况。那么我们就将访问的节点放入栈中,把要处理的节点也放进栈中,但是要做好标记。我们将访问的节点直接加入到栈中,但如果是处理的节点则后面放入一个空节点,这样只有空节点弹出的时候,才将下一个节点放进结果集。前面用迭代法,难以实现统一的代码,不像递归法改一下节点顺序就可以转化成另一个。标记方式即,在把要处理的节点放入栈后,紧接着放空指针作为标记。
2024-01-26 11:11:34
460
1
原创 代码随想录算法训练营Day14(2)|递归遍历,迭代遍历
原因在于,前序遍历的顺序是中左右,先访问的元素是中间节点,要处理的元素也是中间节点,所以刚刚才能写出相对简洁的代码,因为要访问的元素和要处理的元素顺序是一致的,都是中间节点。而中序遍历是左中右,先访问的是二叉树顶部的节点,然后一层一层向下访问,直到到达树左面的最底部,再开始处理节点(也就是在把节点的数值放进result数组中),这就造成了处理顺序和访问顺序是不一样的。确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数,并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。
2024-01-24 22:10:40
605
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人