1.
1023. 驼峰式匹配
难度中等107收藏分享切换为英文接收动态反馈
如果我们可以将小写字母插入模式串 pattern
得到待查询项 query
,那么待查询项与给定模式串匹配。(我们可以在任何位置插入每个字符,也可以插入 0 个字符。)
给定待查询列表 queries
,和模式串 pattern
,返回由布尔值组成的答案列表 answer
。只有在待查项 queries[i]
与模式串 pattern
匹配时, answer[i]
才为 true
,否则为 false
。
示例 1:
输入:queries = ["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"], pattern = "FB" 输出:[true,false,true,true,false] 示例: "FooBar" 可以这样生成:"F" + "oo" + "B" + "ar"。 "FootBall" 可以这样生成:"F" + "oot" + "B" + "all". "FrameBuffer" 可以这样生成:"F" + "rame" + "B" + "uffer".
示例 2:
输入:queries = ["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"], pattern = "FoBa" 输出:[true,false,true,false,false] 解释: "FooBar" 可以这样生成:"Fo" + "o" + "Ba" + "r". "FootBall" 可以这样生成:"Fo" + "ot" + "Ba" + "ll".
示例 3:
输入:queries = ["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"], pattern = "FoBaT" 输出:[false,true,false,false,false] 解释: "FooBarTest" 可以这样生成:"Fo" + "o" + "Ba" + "r" + "T" + "est".
看题一会,出现不匹配的原因就两种情况
1,有多余的大写字母,匹配不到
2,匹配完了,pattern还未全匹配到
有以上的条件,直接开搞
bool* camelMatch(char ** queries, int queriesSize, char * pattern, int* returnSize){
int sum=0;
int h=strlen(pattern);
*returnSize=queriesSize;
bool* ans=(bool*)malloc(sizeof(1)*queriesSize);
for(int j=0;j<queriesSize;j++){
ans[j]=true;
int i=0;
int m;
for(m=0;queries[j][m]!='\0';m++){
if(queries[j][m]<'a'){
if(queries[j][m]==pattern[i]&&i<h)
i++;
else{
ans[j]=false;
break;
}
}
else{
if(queries[j][m]==pattern[i]&&i<h)
i++;
}
}
if(i<h){
ans[j]=false;
}
}
return ans;
}
自己定义内存,有点变扭,不常写,哎呀,但是对指针的理解,还有底层的理解直接大大的提升.呀
ok next one
506. 相对名次
难度简单207收藏分享切换为英文接收动态反馈
给你一个长度为 n
的整数数组 score
,其中 score[i]
是第 i
位运动员在比赛中的得分。所有得分都 互不相同 。
运动员将根据得分 决定名次 ,其中名次第 1
的运动员得分最高,名次第 2
的运动员得分第 2
高,依此类推。运动员的名次决定了他们的获奖情况:
- 名次第
1
的运动员获金牌"Gold Medal"
。 - 名次第
2
的运动员获银牌"Silver Medal"
。 - 名次第
3
的运动员获铜牌"Bronze Medal"
。 - 从名次第
4
到第n
的运动员,只能获得他们的名次编号(即,名次第x
的运动员获得编号"x"
)。
使用长度为 n
的数组 answer
返回获奖,其中 answer[i]
是第 i
位运动员的获奖情况。
示例 1:
输入:score = [5,4,3,2,1] 输出:["Gold Medal","Silver Medal","Bronze Medal","4","5"] 解释:名次为 [1st, 2nd, 3rd, 4th, 5th] 。
示例 2:
输入:score = [10,3,8,9,4] 输出:["Gold Medal","5","Bronze Medal","Silver Medal","4"] 解释:名次为 [1st, 5th, 3rd, 2nd, 4th] 。
提示:
n == score.length
1 <= n <= 104
0 <= score[i] <= 106
-
score
中的所有值 互不相同
没啥技巧
对数组的值用枚举给他们一个排名
随后根据排名来,给字符串赋值
难点就是,要自己开二维数组
char ** findRelativeRanks(int* score, int scoreSize, int* returnSize){
char** ans=(char**)malloc(sizeof(char*)*scoreSize);
char * jk=(char*)malloc(sizeof(char)*20*scoreSize);
int ansr[50000]={0};
*returnSize=scoreSize;
for(int h=0;h<scoreSize;h++)
ans[h]=&jk[h*20];
for(int h=0;h<scoreSize;h++){
int sum=1;
for(int j=0;j<scoreSize;j++){
if(score[h]<score[j])
sum++;
}
ansr[h]=sum;
}
for(int b=0;b<scoreSize;b++){
if(ansr[b]==1)
strcpy(ans[b],"Gold Medal");
else if(ansr[b]==2)
strcpy(ans[b],"Silver Medal");
else if(ansr[b]==3)
strcpy(ans[b],"Bronze Medal");
else
sprintf(ans[b], "%d",ansr[b]);
}
return ans;
}
ok next one
1334. 阈值距离内邻居最少的城市
难度中等96收藏分享切换为英文接收动态反馈
有 n
个城市,按从 0
到 n-1
编号。给你一个边数组 edges
,其中 edges[i] = [fromi, toi, weighti]
代表 fromi
和 toi
两个城市之间的双向加权边,距离阈值是一个整数 distanceThreshold
。
返回能通过某些路径到达其他城市数目最少、且路径距离 最大 为 distanceThreshold
的城市。如果有多个这样的城市,则返回编号最大的城市。
注意,连接城市 i 和 j 的路径的距离等于沿该路径的所有边的权重之和。
示例 1:
输入:n = 4, edges = [[0,1,3],[1,2,1],[1,3,4],[2,3,1]], distanceThreshold = 4 输出:3 解释:城市分布图如上。 每个城市阈值距离 distanceThreshold = 4 内的邻居城市分别是: 城市 0 -> [城市 1, 城市 2] 城市 1 -> [城市 0, 城市 2, 城市 3] 城市 2 -> [城市 0, 城市 1, 城市 3] 城市 3 -> [城市 1, 城市 2] 城市 0 和 3 在阈值距离 4 以内都有 2 个邻居城市,但是我们必须返回城市 3,因为它的编号最大。
示例 2:
输入:n = 5, edges = [[0,1,2],[0,4,8],[1,2,3],[1,4,2],[2,3,1],[3,4,1]], distanceThreshold = 2 输出:0 解释:城市分布图如上。 每个城市阈值距离 distanceThreshold = 2 内的邻居城市分别是: 城市 0 -> [城市 1] 城市 1 -> [城市 0, 城市 4] 城市 2 -> [城市 3, 城市 4] 城市 3 -> [城市 2, 城市 4] 城市 4 -> [城市 1, 城市 2, 城市 3] 城市 0 在阈值距离 2 以内只有 1 个邻居城市。
提示:
2 <= n <= 100
1 <= edges.length <= n * (n - 1) / 2
edges[i].length == 3
0 <= fromi < toi < n
1 <= weighti, distanceThreshold <= 10^4
- 所有
(fromi, toi)
都是不同的。
用邻间矩阵存边,再用floyed算法得到全部得最短路
枚举一遍得到每个城市可以到达另外的城市的数目
再枚举一遍,得到最少得,要用<=的条件(要求城市的编号最大)
上代码
int findTheCity(int n, int** edges, int edgesSize, int* edgesColSize, int distanceThreshold){
int a[n][n];
memset(a,10001,sizeof(int)*(n*n));
for(int j=0;j<edgesSize;j++){
a[edges[j][0]][edges[j][1]]=edges[j][2];
a[edges[j][1]][edges[j][0]]=edges[j][2];
}
for(int h=0;h<n;h++)
for(int b=0;b<n;b++)
for(int g=0;g<n;g++){
a[b][g]=fmin(a[b][g],a[b][h]+a[h][g]);
}
int ans[n];
memset(ans,0,sizeof(int)*n);
for(int j=0;j<n;j++){
for(int k=0;k<n;k++){
if(a[j][k]<=distanceThreshold&&j!=k){
ans[j]++;
}
}
}
int minr=0;
int mine=ans[0];
for(int h=1;h<n;h++){
if(mine>=ans[h]){
mine=ans[h];
minr=h;
}
}
return minr;
}
其它的水题就不写了
今天,撒花谢幕,可恶明天力扣有竞赛好像,第一次打文章来源:https://www.toymoban.com/news/detail-417586.html
哎呀!!!文章来源地址https://www.toymoban.com/news/detail-417586.html
到了这里,关于4.15搞力扣哈哈的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!