- 博客(5)
- 收藏
- 关注
原创 二维01背包与一维01背包
因为一维数组只有一行,比二维数组少了(n-1)*m的空间,大大减小了内存,因为只有一层,所以我们不能再利用上一层的最优方案来比较了,所以我要让我这一维在遍历每个答案时都保持最优解 其实核心思想还是跟二维的是一样的,我们每遍历一个元素就让当前保持的是最优解,与二维不同的是我们一定需要从后往前遍历 状态转移方程如下。大致意思是,当前j体积下,我可以不选改物品也可以选,不选的情况下就还是dp[j],这是上一次物品决定后留下的,选的话我就要减去我选的物品的体积下的最优解加上该物品价值 全部代码如下。
2026-03-01 20:38:33
56
原创 struct的sort自定义排序
相信人都了解过sort排序和struct,用sort可以轻易的将一个数组中的元素进行排序,那么同样的道理,如果一个数组里面的每一个元素都是一个结构体的类型,结构体里面又有几个元素,我们也可以通过这些元素来把这个数组排序。有人可能会对规则有一点疑惑,因为我刚开始也有一点,我是用简单的方法来记忆的,在x和y与形参的x和y顺序相同时,x>y就像左边的元素大于右边的,也就是降序了,x<y就像是左边的元素小于右边了,也就是升序了。然后这里面的规则可以用一个简单的方法来说,首先拿数组里面元素是int类型的普通来举例。
2026-02-05 09:51:38
69
原创 如何将一个二维数组顺时针旋转90°,180°,270°
其实从中还是可以发现旋转之后还是有一定规律的,旋转之前是横向的有序,旋转之后是纵向的有序,换句话说也就是旋转前是通过先固定列然后改变每个列的元素,旋转后就变成先固定列再改变行 通过两次for循环就可以改变。首先确定两个变量放在for循环外层固定,一个k一个i,然后内层用0-数组长度-1。此时就可以实现二维数组的旋转了,180°就可以用两次旋转90°得到。我们可以先把旋转前的数组内容和旋转之后的数组内容写出来对比一下。
2026-01-22 21:50:28
244
原创 约瑟夫问题(简单解决)
所以简单总结一下,我们只需要不断的遍历数组,然后遇到1就报数,也就是让cnt加1,然后继续往下走,遇到0就继续往下走判断,当cnt到达要求的时候该位置的人要出圈,一直执行下去直到里面的人数全部变成0。然后利用一个k来指向数组的下标,也就是每个人对应的位置-1,再用一个计数器cnt来判断是否报数的人要出圈了。有个重点就是要实现围成一圈的不断循环,那么我们可以用k = (k+1)%n来保证一直都是在0--n-1循环。我们可以用一个数组来存入所有的人,用1来代表没有出圈,如果报数出圈了就将对应位置改成0。
2026-01-09 17:06:15
464
原创 检查括号(,{,[ 是否匹配(栈的应用)
此时我们可以想象,当我们遇到左括号的时候把左括号按出现顺序压入栈,然后如果遇到右括号了就跟栈顶的左括号进行匹配,如果成功就没问题,然后把栈顶的左括号弹出,如果不匹配就直接结束报错,这里解释一下为什么要遇到的右括号要跟左边的栈顶比较,因为最晚出现的左括号是要最早闭合的,例如{(),如果先出现的右括号不能让栈顶的左括号闭合那就肯定是有问题的。该题目是字符串里面包含括号,我们其实可以把题目简化,我们只需要左右括号而已,所以我们可以创一个字符串来按顺序存储左右括号即可。st.pop()是弹出栈顶的元素。
2026-01-01 21:36:25
258
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅