> 文章列表 > 4.15搞力扣哈哈

4.15搞力扣哈哈

4.15搞力扣哈哈

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");elsesprintf(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;}

其它的水题就不写了

今天,撒花谢幕,可恶明天力扣有竞赛好像,第一次打

哎呀!!!