- 博客(29)
- 收藏
- 关注
原创 equals方法的编写原则
题目:7-3 jmu-Java-03面向对象基础-05-覆盖分数 3全屏浏览题目切换布局作者 郑如滨单位 集美大学Java每个对象都继承自Object,都有equals、toString等方法。现在需要定义类并覆盖其toString与equals方法。
2022-10-27 10:36:13
408
1
原创 迷宫问题及C++算法实现
3.设计双重循环,内层循环查找四个方向是否有落脚点,外层循环包括1.获取栈顶端元素为当前所在位置。4.若找到落脚点,则将栈顶元素的方向设置为指向落脚点的方向并将落脚点的方向设置为-1后压入栈中。3.出栈说明这是一条死胡同,下次也不会再来了,所以在出栈时将mg设置为0是否有必要有待考虑我认为是没啥必要的,如果有大佬能看到此文,欢迎探究指正。【问题简述】用数字1代表障碍物,0代表通路构建1个迷宫,设计算法搜索迷宫是否有解法,有就输出其中一个解,没有给出提示。栈的基本操作是基础,所以没给注释了。...
2022-07-22 01:33:17
2431
原创 牛客月赛47 搭桥
链接:登录—专业IT笔试面试备考平台_牛客网来源:牛客网今天是愉快的周末,牛可乐和牛妹在一起玩游戏。牛妹给了牛可乐 个造桥的零件,每个零件以字符串的形式给出,每个字符串两端的字符是零件的接口,两个零件可以通过连接不同端的接口(一个零件的左端只能连接另一个零件的右端,右端则只能连接左端)得到一个更长的零件,新零件的长度是原零件的长度之和。牛妹规定,零件不能翻转,且零件左边的接口只能由该零件左边的零件去连接(这意味着,应该按顺序选取零件),右端同理。牛可乐想得到牛妹的赞许,因此他要想用牛妹给的.
2022-04-16 10:15:39
94
原创 多重背包问题
时间限制: 1Sec 内存限制: 128MB题目描述为了庆贺班级在校运动会上取得全校第一名成绩,班主任决定开一场庆功会,为此拨款购买奖品犒劳运动员。期望拨款金额能购买最大价值的奖品,可以补充他们的精力和体力。输入第一行二个数n(n≤500),m(m≤6000),其中n代表希望购买的奖品的种数,m表示拨款金额。接下来n行,每行3个数,v、w、s,分别表示第I种奖品的价格、价值(价格与价值是不同的概念)和能购买的最大数量(买0件到s件均可),其中v≤100,w≤1000,s≤10。输出
2022-02-27 23:13:53
376
原创 完全背包问题
时间限制: 1Sec 内存限制: 128MB 提交: 555 解决: 238题目描述设有n种物品,每种物品有一个重量及一个价值。但每种物品的数量是无限的,同时有一个背包,最大载重量为M,今从n种物品中选取若干件(同一种物品可以多次选取),使其重量的和小于等于M,而价值的和为最大。输入第一行:两个整数,M(背包容量,M≤200)和N(物品数量,N≤30);第2..N+1行:每行二个整数Wi,Ci,表示每个物品的重量和价值。输出仅一行,一个数,表示最大总价值。样例输入10
2022-02-26 17:22:53
302
原创 01背包问题
时间限制: 1Sec 内存限制: 128MB题目描述一个旅行者有一个最多能装 M 公斤的背包,现在有 n 件物品,它们的重量分别是W1,W2,...,Wn,它们的价值分别为C1,C2,...,Cn,求旅行者能获得最大总价值。输入第一行:两个整数,M(背包容量,M≤200)和N(物品数量,N≤30);第2..N+1行:每行二个整数Wi,Ci,表示每个物品的重量和价值。输出仅一行,一个数,表示最大总价值。样例输入10 42 13 34 57 9样例输出1.
2022-02-26 14:43:23
1456
原创 全排列c/c++实现
题目:给出n个字母,逐行输出所有可能的排列组合。输入在第一行给出一个数字n,接下一行给出n个字母。输出所有可能的排列,每种排列占一行。思路:利用数组内部的有序交换,防止重复,这次我们直接用老板的思维来看待问题,以对ABC进行排列举例,最大老板只需要用A分别与A,B,C进行交换,这里是三种情况三条分支,用循环来控制。下一层有3个同级老板要对BC,AC,BA进行同样的操作,依此类推,详见下图:最顶层老板思维:1.制定好规则,保证下一层老板的行为和所解决的问题是和自己...
2022-02-14 22:38:02
2756
原创 名企面试题:硬币表示某个给定数值
题目:有1分,2分,5分,25分四种硬币,每种硬币数量无限,给定n分钱,问有多少种组合可以组成n分钱。输入在一行给出一个整数n。输出在一行给出有几种组合方式。思路:和上楼梯以及机器人走方格类似,先列举小范围的情况。1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 1 1 1 2 2 2 2 2 4 4 4
2022-02-13 20:20:18
309
原创 机器人走格子(上楼梯问题进阶)
问题:有一个X*Y的网格,一个机器人只能走格点且只能向右或向下走,要从左上角走到右下角。请问机器人一共有多少种走法。输入在一行给出n,m代表n行m列的网格,n<=6,m<=6。输出在一行给出方法数。思路:与上楼梯问题一样,我们先从小规模可以解决的问题开始考虑。情况1: 1行1列 1 方法数为1。情况2:1行2列1 1 方法数为1。情况3: 2行1列1 1 方法数为1。情况4: 2行2列1 1...
2022-02-12 15:40:52
1072
原创 上楼梯(递归和迭代的对比)
题目:一个小孩上楼梯,楼梯有n阶,小孩每次可以上一阶,两阶或三阶,问一共有几种走法。输入在一行给出n,约定n为0是方法数为1。答案对1e10^7取模。输出在一行给出方法数。思路:这是一道很经典的题目,此前也遇到过很多次,但每次回头看都会有一些不一样的想法。要解决这道题,首先肯定是从阶数较小的开始分析。如果只有一阶楼梯,方法显然只有1种。如果有两阶楼梯,有2种方法。一种是一次走两阶。一种是先走一阶,再走一阶。如果有三阶楼梯,则有4种方法。一种是一次走三阶。一种是先走一阶,此时剩
2022-02-12 13:33:21
513
原创 kmp中next数组的应用
首先加深以下对next数组的理解(kmp算法见基础算法专栏),next它的核心是这个公式:next[j] = k;它的含义是在模式字符串p中,[ 0 , j )这一子串的最长匹配数(前缀与后缀相同的最长个数)为k,所以若在p[j] 处失配,会回溯到next[k]进行匹配,举个例子:a b c g a b c x 0 1 2 3 4 5 6 7 k
2022-02-11 13:57:21
311
原创 字符串匹配之kmp
题目:判断字符串s中是否包含字符串p(长度均小于1000),若包含,则输出第一次在字符串s中出现的下标,否则输出-1,若s长度大于p,也输出s。输入占两行,分别为字符串s和字符串p。输出字符串p在字符串s中第一次出现的下标,若不存在输出-1。案例:输入:babababcbababababbbababb输出:12首先考虑暴力解法,遍历字符串s,每个字符都做一次开头,依次往后遍历与p规模相同的字串,若其中有与字符串p完全匹配的字串,则该这个字串开头字符对应的下标就是答案
2022-02-10 20:48:39
570
原创 字符串匹配之Pabinkarp
题目:判断字符串s中是否包含字符串p。输入占两行,分别为字符串s和字符串p。输出包含字符串s中字符串p的起始下标,若有多个匹配则全部输出,每个输出占一行。案例:输入:ABABABAABA输出:024初步探究Pabinkarp算法思路:先算出字符串p的哈希值,逐一遍历s中长度与字符串p相等的子串(连续)(时间复杂度n),算出其哈希值(时间复杂度m)并与字符串p的哈希值做对比,相同则匹配成功,输出即可。该思路时间复杂度为n*m(n和m分别是字符串s和字符串p的长
2022-02-09 23:01:21
419
原创 旋转词c/c++实现
题目:给定两个字符串s1和s2,判断s2是否能够被通过s1做循环移位得到的字符串包含。输入包括两行,每行一个字符串。若s2能够被通过s1做循环移位得到的字符串包含,则输出true,否则输出false。案例:输入:aabcdcdaa输出:true(aabcd循环一位移位可得到ABC大,循环两位移位可得到bcdaa,后者包含cdaa,所以是true)思路:本题要求判断s2串是否包含在s1的其中一个循环移位得到的字符串中。只要在s1的末尾再拼接一次s1,通过判断s
2022-02-08 13:52:02
816
原创 变形词问题
题目:给定两个字符串,请编写程序,确定其中一个字符串重新排序后能否得到另一个字符串。输入有两行对应为两个字符串(ASCII码范围内)。其中一个字符串重新排序后可以得到另一个字符串就输出true,否则输出false。思路:将两个字符串排序,若排序后的两个字符串完全相同,就输出true,不同则输出false。该算法的时间复杂度为nlgn,代码如下:#include <bits/stdc++.h>using namespace std;char str1[1005];c
2022-02-08 12:21:30
579
原创 判断字符串有无重复字符
题目:给出一个字符串,判断其中是否有重复字符,有输出false,没有输出true。输入在一行给出一个字符串输出在一行输出true或false。思路:作为一个入坑题,这道题没有啥难度,但如果作为一个面试题,要问清楚考官是否使用的是ASCII码,还是uincode编码,这直接影响到解题的方法。下面以ASCII举例来解题。第一种思路是开辟一个新的数组,对每个出现的的字符对应计数,有点像计数排序,时间复杂度为O(n),代码如下:#include <bits/stdc++.h>
2022-02-08 10:49:03
7888
原创 矩阵相乘c/c++实现
题目:第一行输入给出两个数n,m,代表第一个矩阵的行数和列数。随后n行,每行给出m个数。接下去一行给出两个数p,q,代表第二个矩阵的行数和列数。随后p行,每行给出q个数。输出两个矩阵相乘后的结果。案例:输入:2 21 21 -12 31 2 -3-1 1 2输出:-1 4 12 1 -5思路:本题是单纯的矩阵相乘,用3个for循环解决,时间复杂度为n^3,细节见代码:#include <bits/stdc++.h>using nam
2022-02-07 23:43:53
260
原创 求子矩阵最大累加和
题目如下:输入在一行给出两个数n,m,代表矩阵的行和列。而后的每n行,每一行给出m个数,数值有正有负,也可能是0。输出在一行给出子矩阵的最大累加和。给出一个案例。输入:3 3-90 48 78 64 -40 64-81 -7 66输出:209 (48+78-40+64-7+66=209)整体思路是定义一个起始行,对该行开始往后的每一个矩阵进行竖向求和,而后将其转换为求最大子序列和的问题,细节见代码:#include <bits/stdc++.h>u
2022-02-07 22:49:34
268
原创 最大子序列和
题目很简单:输入第一行给出一个整数n,随后一行给出n个整数,求该数组的最大子序列和。输出在一行给出求该数组的最大子序列和。拿到这题,首先的想法是用两层循环,外层循环定住一个下标,内层循环为游标,每次进行求和并取最大值,这种思想并不难,时间复杂度为O(n^2),直接上代码#include <bits/stdc++.h>using namespace std;int a[1005];int main(){ int n,sum,ans = 0; cin >> n
2022-02-07 15:42:59
277
原创 找出边界为1的最大子矩阵
题目如下:给定一个N*N的矩阵,在这个矩阵中,只有0和1两种值,返回边框全是1的最大正方形的边长长度例如:{0,1,1,1,1},{0,1,0,0,1},{0,1,0,0,1},{0,1,1,1,1},{0,1,0,1,1},其中 ,边框全是1的最大正方形的大小是4*4, 返回4。输入在第一行给出一个N,代表这个矩阵的边长,随后给出N行,每行给出N个数组成该矩阵。输出在一行给出边框全是1的最大正方形的边长长度。思路:首先考虑遍历二维数组爆搜。列举每一个坐标点(时间复杂
2022-02-07 14:23:40
309
原创 堆排序c/c++实现
主要有两个步骤,一个是建堆(时间复杂度nlgn),一个是排序(时间复杂度nlgn),总的时间复杂度为nlgn,细节见代码。以下给出下面给出从小到大排序的代码。#include <bits/stdc++.h>using namespace std;void MinHeap(int* A,int n);void MinHeapFixUp(int* A,int i,int n);void Heapsort(int* A,int n);int main() { int A[] =
2022-02-01 11:46:08
925
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人