- 博客(129)
- 收藏
- 关注
原创 【JavaSE】初识Java
Java是一门面向对象的编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。Java具有简单性、面向对象、分布式(微服务)、健壮性、安全性、体系结构中立、可移植性、解释性、高性能、多线程、动态性等特点。Java可以用于企业级系统、Web领域开发、android平台应用 、大数据平台开发、桌面应用程序、Web应用程序
2024-06-08 21:52:41 923 1
原创 【力扣】LCR 166.珠宝的最高价值
从(i-1,j)到(i,j)—> dp[i-1][j]+frame[i-1][j-1]从(i,j-1)到(i,j)—> dp[i][j-1]+frame[i-1][j-1]注意:珠宝的价值都是大于 0 的。除非这个架子上没有任何珠宝,比如。路径 1→3→5→2→1 可以拿到最高价值的珠宝。为该位置珠宝的价值。vector初始化不填值的话,默认为0。:从上往下填写每一行,每一行从左往右。现有一个记作二维矩阵。
2024-05-11 21:48:53 505
原创 【力扣】63.不同路径 II
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格的左上角 (起始点在下图中标记为 “Start” )。1. 向右 -> 向右 -> 向下 -> 向下。2. 向下 -> 向下 -> 向右 -> 向右。:从上往下填写每一行,每一行从左往右。3x3 网格的正中间有一个障碍物。网格中的障碍物和空位置分别用。从左上角到右下角一共有。
2024-05-11 21:36:56 536
原创 【力扣】62.不同路径
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。网格的左上角 (起始点在下图中标记为 “Start” )。从左上角开始,总共有 3 条路径可以到达右下角。:从上往下填写每一行,每一行从左往右。1. 向右 -> 向下 -> 向下。2. 向下 -> 向下 -> 向右。3. 向下 -> 向右 -> 向下。(根据最近的一步,划分问题)问总共有多少条不同的路径?
2024-05-11 21:27:41 395
原创 【力扣】91.解码方法
它可以解码为 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6)。已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。"06" 无法映射到 "F" ,因为存在前导零("6" 和 "06" 并不等价)。它可以解码为 "AB"(1 2)或者 "L"(12)。A存在B不存在 或者 A不存在B存在时,dp[1]=1。当下图A,B都不存在时,dp[1]=0。以i位置为结尾时,解码方法的总数。A和B都存在时,dp[1]=2。注意,消息不能分组为。
2024-05-11 21:18:25 399
原创 【力扣】1089.复写零
请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。注意:请不要在超过该数组长度的位置写入元素。先根据“异地”操作,优化成双指针下的“就地”操作。(3)判断一下dest是否已经到结束位置。进行上述修改,不要从函数返回任何东西。(2)决定dest向后移动一步或者两步。给你一个长度固定的整数数组。3.“从后向前”完成复写操作。(1)先判断cur位置的值。
2024-05-11 21:00:32 373
原创 【力扣】70.爬楼梯
(因为每次只能爬一阶或两阶楼梯,所以走到i位置时的方法数dp[i],等于走到 i-1 位置的方法数dp[i-1]和走到 i-2 的方法数dp[[i-2]之和): dp[1]=1,dp[2]=2 (保证填dp表的时候不越界)你有多少种不同的方法可以爬到楼顶呢?1. 1 阶 + 1 阶 + 1 阶。动态规划最经典最基础的题目。有两种方法可以爬到楼顶。1. 1 阶 + 1 阶。有三种方法可以爬到楼顶。2. 1 阶 + 2 阶。3. 2 阶 + 1 阶。
2024-05-11 19:16:48 218
原创 【力扣】面试题08.01 三步问题
有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。因为题目数据很大,如果直接dp[i]=dp[i-1]+dp[i-2]+dp[i-3]会数据溢出。(以 i 位置的状态,最近的一步,来划分问题。从(i-1)到 i,从(i-2)到 i ,从(i-3) 到 i。题目要求对结果模1000000007,所以我们 const int MOD=1e9+7。:dp[1]=1,dp[2]=2,dp[3]=4 (保证填dp表的时候不越界)
2024-05-08 16:26:53 509
原创 【力扣】746. 使用最小花费爬楼梯
dp[n-2]=cost[n-2],dp[n-1]=cost[n-1] (保证填表的时候不越界,不用初始化从楼顶到楼顶,因为显而易见这样花费为0)先到达 i-1 位置,然后支付cost[i-1], 走一步;- 支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。- 支付 1 ,向上爬两个台阶,到达下标为 4 的台阶。- 支付 1 ,向上爬两个台阶,到达下标为 6 的台阶。- 支付 1 ,向上爬一个台阶,到达下标为 7 的台阶。- 支付 1 ,向上爬两个台阶,到达下标为 9 的台阶。
2024-05-08 16:04:54 771
原创 【力扣】1137. 第n个泰波那契数
我们求dp[4]时,只需要知道dp[1],dp[2],dp[3]的值即可,此时dp[0]这个元素的空间相当于浪费了;同理我们求dp[5]时,只需要知道dp[2],dp[3],dp[4]这三个元素,此时dp[0]和dp[1]这两个元素的空间相当于浪费了。:dp[i]=dp[i-3]+dp[i-2]+dp[i-1] (将 n-3代入题目给的 Tn+3 = Tn + Tn+1 + Tn+2 这个式子得到):dp[0]=0,dp[1]=dp[2]=1(这一步是为了保证填dp表的时候不越界)
2024-05-08 09:16:19 534 1
原创 【力扣】283. 移动零
定义两个指针cur=0,dest=-1。【0,dest】为非0元素,【dest+1,cur-1】为0元素,【cur,n-1】为未操作元素。用cur遍历数组,当遇到0元素时,直接cur++;当遇到非0元素时,先将dest后一个位置的元素和cur当前所指元素交换,然后让dest++,cur++。移动到数组的末尾,同时保持非零元素的相对顺序。,必须在不复制数组的情况下原地对数组进行操作。数组划分问题可以从双指针算法考虑。你能尽量减少完成的操作次数吗?,编写一个函数将所有。
2024-05-08 08:43:20 310
原创 【AcWing】800. 数组元素的目标和
我们定义 i 和 j 两个指针,i 指针用来遍历数组,让 i 最开始指向a数组开头(下标为0)的位置,让 j 最开始指向b数组末尾(也就是下标为m-1)的位置,考虑到a[i]+b[j]==x,而且两个数组均升序,当a[i]增大时,因为x为定值,所以b[j]一定减小,也就是说当 i 指针遍历数组的整个过程中, j 指针一定往左移。因为数据有唯一解,所以当 a[i]+b[j]==x时,我们输出 i 和 j,并结束程序。因为题目要求a[i]+b[j]==x,a[ ]数组和b[ ]数组均升序,且数据保证有唯一解。
2024-05-07 20:35:37 460
原创 【AcWing】799. 最长连续不重复子序列
每当 i 遍历到新的元素a[i]时,让c[a[i]]++,这时我们再判断当前选定的序列(也就是以 i 下标为末尾的序列)是否有重复元素(如果c[a[i]]>1说明有重复元素),每当遇到一个重复元素,让j指针往后移动一格,这个时候c[ ]中的a[j]元素也就减一(c[a[j]]--;指针 i 用来遍历a[ ]数组中的每个元素(也就是当前不重复连续子序列的末尾),指针 j 表示不重复连续子序列的最左侧。给定一个长度为 n 的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。第一行包含整数 n。
2024-05-07 19:45:02 616
原创 【AcWing】双指针算法处理形如“abc def ghi ...”的字符串,并以空格将字符串分割成“abc”“def”“ghi”...等字符串并换行输出
【代码】双指针算法处理形如“abc def ghi ...”的字符串,并以空格将字符串分割成“abc”“def”“ghi”...等字符串并换行输出。
2024-05-07 17:29:54 178
原创 【洛谷】P3743 小鸟的设备
令l=0,r=1e10(也就是对 时间 进行二分)。写上浮点数二分的模板(这个时候不用像整数二分那样对l,r进行+1或者-1操作)。自定义一个bool类型的check()函数,令生成的总能量为power=p*x,开一个sum变量并初始化为0。遍历数组,如果当前设备消耗的能量a[i]*x大于等于当前设备原有的能量,令sum+=(a[i]*x-b[i]);首先特判,如果接通设备每秒生成的能量p大于等于所有设备每秒消耗的能量(a[1]+a[2]+..+a[n])直接输出-1,并且return 0;
2024-05-06 17:38:11 484
原创 【洛谷】P1873 [COCI 2011/2012 #5] EKO / 砍树
根据题目中的“帮助 Mirko 找到伐木机锯片的最大的整数高度 H,使得他能得到的木材至少为 M 米。换句话说,如果再升高 1 米,他将得不到 M 米木材。” 我们可以判断出是用二分的第二个板子。check() 函数中,我们设置一个变量sum,并初始化为0。2. 否则说明当前高度下,锯下来的木材长度不够m,那么我们为了得到总长度为m的木材,就得放低锯木片的高度,因此让r=mid-1。1. 如果sum>=m,也就说明当前枚举的答案可以更大,我们就让l=mid(也就是往数轴右边找)。
2024-05-06 16:38:48 567
原创 【PAT】1009 说反话
定义一个字符串数组s[100],定义字符串变量a,和整型变量x,将x初始化为0。用while(cin>>a) 读入 以空格分隔的各个字符串,令s[x]=a,之后x++ 将所有被空格分开的字符串存入。最后倒着遍历s数组即可。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。每个测试用例的输出占一行,输出倒序后的句子。
2024-05-06 14:34:15 315 1
原创 【PAT】1008 数组元素循环右移问题
一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0A1⋯AN−1)变换为(AN−M⋯AN−1A0A1⋯AN−M−1)(最后M个数循环移至最前面的M个位置)。先输出最后m个数组元素,再输出下标从0开始到下标为n-m-2的数组元素,最后单独输出a[n-m-1](因为最后一个数后面不能带空格,所以单独输出)每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。
2024-05-06 14:28:29 201
原创 【PAT】1007 素数对猜想
让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。先求出1~n的所有素数,存到a数组中。开一个变量ans记录答案,并初始化为0,再遍历a数组,如果当前数组元素和上一个数组元素差值为2,则计数ans++。(
2024-05-06 13:50:07 320
原创 【AcWing】789. 数的范围
对于每个查询,返回一个元素 k 的起始位置和终止位置(位置从 0 开始计数)。第二行包含 n 个整数(均在 1∼10000 范围内),表示完整数组。共 q 行,每行包含两个整数,表示所求元素的起始位置和终止位置。给定一个按照升序排列的长度为 n的整数数组,以及 q 个查询。接下来 q 行,每行包含一个整数 k,表示一个询问元素。第一行包含整数 n 和 q,表示数组长度和询问个数。如果数组中不存在该元素,则返回。如果数组中不存在该元素,则返回。
2024-05-03 15:38:08 146
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人