- 博客(24)
- 收藏
- 关注
原创 动态规划——最后一块石头的重量|| #JAVA
这道题的思路其实和分割等和子集的思路非常相似实质是01背包,还是尽可能的去装满石头总和的一半的背包,就是说我们题目是要求所剩的石头最少,就极端情况就是没有剩下的石头,因为是两块石头去磨,所以只要能找到凑出石头总重一半的石头我们就有认为是可以的,target = (石头总重)/ 2,我们向下取整,因为会有不能均匀分到一半的情况这时我们只需要去尽量放满这target容量大小的背包就可以了,剩下的就是两部分内容的差值就是我们剩下最小的石头。组合 2 和 1,得到 1,所以数组转化为 [1,1,1],
2024-07-19 11:01:16
386
原创 动态规划——不同路径 II #JAVA
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格的左上角 (起始点在下图中标记为 “Start” )。1. 向右 -> 向右 -> 向下 -> 向下。2. 向下 -> 向下 -> 向右 -> 向右。3x3 网格的正中间有一个障碍物。网格中的障碍物和空位置分别用。从左上角到右下角一共有。
2024-07-18 15:44:32
422
1
原创 动态规划——不同路径 #JAVA
当 i>0 且 j>0 时,可以从 (i−1,j) 向下移动到达 (i,j) 或从 (i,j−1) 向右移动到达 (i,j),到达 (i,j) 的路径数目为到达 (i−1,j) 的路径数目与到达 (i,j−1) 的路径数目之和,因此动态规划的状态转移方程是 dp[i][j]=dp[i−1][j]+dp[i][j−1]。当 i=0 或 j=0 时,从 (0,0) 到达 (i,j) 的路径是唯一的,因此动态规划的边界情况是:当 i=0 或 j=0 时,dp[i][j]=1。1. 向右 -> 向下 -> 向下。
2024-07-18 13:53:52
1142
原创 动态规划——使用最小花费爬楼梯 #JAVA
首先这道题和LeetCode 70很像同样使用动态规划的思想,同样的先定好dp[]数组的含义,i表示第几个台阶,dp[i]则记录上到此台阶所需要的最小体力。再来推到递推公式,因为上到第i个台阶只能是通过它的前一个或者前两个台阶上来的所以dp[i] = dp[i - 1] + cost[ i - 1]或者 dp[i] = dp[i - 2] + cost[ i - 2]只要在两者之间选择小的一个就可以。最低花费方式是从 cost[0] 开始,逐个经过那些 1 ,跳过 cost[3] ,一共花费 6。
2024-07-18 13:24:07
488
原创 动态规划——爬楼梯 #JAVA
分析dp数组的含义是下标为n的数就是有n种爬法,每一层的爬法又能够通过前两层的爬法叠加,很好理解,因为每次只能爬 1 级或 2 级,所以 f(x) 只能从 f(x−1) 和 f(x−2) 转移过来。你有多少种不同的方法可以爬到楼顶呢?1. 1 阶 + 1 阶 + 1 阶。有两种方法可以爬到楼顶。1. 1 阶 + 1 阶。有三种方法可以爬到楼顶。2. 1 阶 + 2 阶。3. 2 阶 + 1 阶。
2024-07-18 11:50:54
288
原创 动态规划——斐波那契数列 #JAVA
然后再去分析递推公式,题目已经告诉了F(n) = F(n - 1) + F(n - 2),那么dp数组则是。答案需要取模 1e9+7(1000000007) ,如计算初始结果为:1000000008,请返回 1。这里的话肯定一维数组就可以了,并且通过题意分析到dp数组中下位为i的数就题目的F(n)下一步就是对于dp数组的初始化题目也以及告诉了F(0) = 0,F(1) = 1。F(n) = F(n - 1) + F(n - 2),其中 n > 1。开始,后面的每一项数字都是前面两项数字的和。
2024-07-18 11:21:19
480
原创 JAVA n的质因数个数----唯一分解定理
if(n > 1) {//除到最后若是剩余数比1大则还要把最后一个数也算上。本算法指导老师李昌晋。
2024-01-30 21:47:51
181
1
原创 JAVA求 1~N 中的所有素数----埃氏筛法
思路:如果一个数不是素数,那么这个数一定是n个素数的乘积(0和1除外),同理,素数的 k倍数一定是合数(k >= 2)的倍数全部标记为合数。
2024-01-29 20:15:39
192
原创 JAVA基础算法二分法
/下一次在左半部分去收索了。//下一次在右半部分去收索了。这里我们定义数组为a,左边界为left,右边界为right,目标数为target。指在答案具有单调性的前提下,利用二分的思想枚举答案,将求解问题转化为验证结果。return -1;//没有的话就返回-1。
2024-01-24 21:47:23
432
1
原创 java寻找数组中只出现一次的数字
例如:用户输入的数组是{2,2,1,1}那么结果会是0(变换位置结果一样),如果是{2,2,2, 1,1}(变换位置一样)这样的,则会出现结果是2。注意使用本方法的前提必须是有这个只出现一次的数,不然会出现错误的答案。本方法用到的思路是按位异或。
2024-01-22 22:02:09
485
原创 基础数学思维
除数为最大公约数,所以就得出了 1997 和 615 的最大公约数 1。求最大公约数-------欧几里得辗转相除法。1997 ÷ 615 = 3 (余 152)反复做除法运算,当余数为 0 时,取当前。615 ÷ 152 = 4(余7)152 ÷ 7 = 21(余5)7 ÷ 5 = 1 (余2)5 ÷ 2 = 2 (余1)2 ÷ 1 = 2 (余0)至此,最大公约数为1。
2024-01-22 21:10:48
478
原创 蓝桥杯经典算法题java----01背包问题
第一行为两个数字 totalweight、N,均不超过 1000。totalweight 含义见题干,N 为物品数量。接下来 N 行,每行两个数字Wi、Vi,均不超过 1000。实现一个算法求解 01 背包问题。输出一行,为在背包容量限制下的最大化利益。// 2: 类名必须Main, 不可修改。// 1:无需package。
2023-12-13 22:12:52
112
1
原创 蓝桥杯经典算法题java----实现快速排序
快速排序的工作原理是通过一次排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序。第一行,数字 N (2≤N≤100) ,表示待排序的元素个数。请编写代码,完成 排序,对给定数据进行升序排列。第二行,待排序的元素。输出一行,为升序序列。
2023-12-09 09:54:53
153
原创 蓝桥杯经典算法题java----实现插入排序
插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从前向后扫描,找到相应位置并插入。第一行,数字 N (2≤N≤100),表示待排序的元素个数。请编写代码,完成 插入排序,对给定数据进行升序排列。// 2: 类名必须Main, 不可修改。// 1:无需package。第二行,待排序的元素。输出一行,为升序序列。
2023-12-09 09:51:58
65
原创 蓝桥杯经典算法题java----实现选择排序
选择排序的工作原理是每一次从需要排序的数据元素中选出最小的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排列完毕。第一行,数字 N (2≤N≤100),表示待排序的元素个数。请编写代码,完成选择排序,对给定数据进行升序排列。// 2: 类名必须Main, 不可修改。// 1:无需package。第二行,待排序的元素。输出一行,为升序序列。
2023-12-08 23:13:30
143
1
原创 蓝桥杯经典算法题java----A+B 问题【OJ 示例题目】
编写一个程序,使用标准输入来输入两个整数 A 和 B,然后把 A+B 的结果使用标准输出来输出。你可以滚动到本页面下方查看题目的示例输入和输出,这将极大地帮助你理解和完成题目。特别地,在编写程序时,不要输出任何多余的信息,所输出的答案要与样例输出的形式一致。欢迎开启算法 OJ 题的大门,本题为经典的 A+B 入门题,我们会以此题为示例介绍蓝桥云课 OJ 系统的正确使用方法。输入一行,为用空格分隔的两个正整数 a,b( 1≤a,b≤100 )。输入两个正整数A,B,请你计算 A+B,并输出。
2023-12-08 22:45:21
193
原创 蓝桥杯经典算法题java----反转字符串中的字符
import java.util.Scanner;public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner scan = new Scanner(System.in);String s = scan.nextLine();StringBuffer sb = new StringBuffer(s);System.out.println(sb.reverse());}}
2023-12-06 22:37:03
144
1
原创 蓝桥杯经典算法题java-----确定字符串是否是另一个的排列
b[j] = "0";//将已经对比并且相等的字符换为0。//将输入的字符串拿出做一一的对比。//将两个输入的字符串进行对比。
2023-12-04 17:29:38
203
原创 蓝桥杯经典算法题Java----确定字符串是否包含唯一字符
将输入的字符串分割好方便一一对比。if(a[i].equalsIgnoreCase(a[j])) {//不区分大小写。// 2: 类名必须Main, 不可修改。// 1:无需package。
2023-12-04 17:25:28
546
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人