郑州网站建设、,电商运营培训班,视频网站开发 价格,网站调用谷歌地图一、1033. 移动石子直到连续 思路
这道题是一道数学题#xff0c;它一共分为三种可能
第一种可能为三个石子本来就是连续的时候
第二种可能为最少步数为1的时候#xff0c;相邻石子不能大于一格
第三种可能为最少步数为2的时候#xff0c;这时相邻石子大于一格
那么第二…一、1033. 移动石子直到连续 思路
这道题是一道数学题它一共分为三种可能
第一种可能为三个石子本来就是连续的时候
第二种可能为最少步数为1的时候相邻石子不能大于一格
第三种可能为最少步数为2的时候这时相邻石子大于一格
那么第二种和第三种的最多步数都是 最远的石子 - 最近的石子 - 2
因为输入的数据是乱序的所以还要先将他们排序了来
代码实现
int dis[3];void sort()
{int i , j , s , t;for(i 0 ;i 3 ; i){s i;for(j i 1 ; j 3 ; j)if(dis[s] dis[j])s j;if(s ! i){t dis[i];dis[i] dis[s];dis[s] t;}}
}int* numMovesStones(int a, int b, int c, int* returnSize){int *x(int*)malloc(sizeof(int)*2);dis[0] a;dis[1] b;dis[2] c;sort();a dis[0];b dis[1];c dis[2];if(b - a 1 c - b 1){x[0] 0;x[1] 0;}else if(b - a 2){x[0] 1;x[1] c - a - 2;}else if(c - b 2){x[0] 1;x[1] c - a - 2;}else{x[0] 2;x[1] c - a - 2;}*returnSize 2;return x;
}
二、1376. 通知所有员工所需的时间 思路
这个题可以联想到树的结构我们可以从最底层的员工开始向不断的找他的上级再找的过程中把通知的时间都加上然后与max最长的时间相比将较大的时间赋给max然后再去找下一个底层员工那么最后的max就是要通知所有员工的话要用的时间
做这个题的时候力扣的这个自动判断数组越界就很烦但实际上我这个也确实没越界所以这时候就要设一个新的数组来代替infomTime
代码实现
int numOfMinutes(int n, int headID, int* manager, int managerSize, int* informTime, int informTimeSize)
{int ans[100001];for(int i0;in;i){ans[i]informTime[i];}int i,max0,a,t;for(i0;in;i){if(ans[i]0){amanager[i];if(a-1)tans[headID];else {tans[a];while(a!-1){amanager[a];if (a -1)continue;tans[a];}}if(maxt)maxt;}}return max;
}
三、有效的括号 思路
关于栈的最基础的问题只要实现了入栈和出栈就行了当我们遇见左括号的的时候就将它入栈当我们遇见右括号的时候且符合右括号的时候就将它出栈
要注意一点的是当把字符串中的括号全都遍历完时如果栈里面还有括号那么也是不正确的
再次吐槽一点力扣的这个编译器跟真的好伤人心
代码实现
typedef struct
{char date[10001];int top;
}zlink;void enzlink(zlink *p,char x)
{p-top;p-date[p-top] x;
}void dezlink(zlink *p)
{p-top--;
}bool isValid(char* s) {zlink p;p.top 0;p.date[0] 0;for (int i 0; i strlen(s); i){if (s[i] ( || s[i] { || s[i] [)enzlink(p, s[i]);else{if (p.date[p.top] ( s[i] ))dezlink(p);else if (p.date[p.top] { s[i] })dezlink(p);else if (p.date[p.top] [ s[i] ])dezlink(p);else return false;}}if (p.top ! 0)return false;return true;
}
四、387. 字符串中的第一个唯一字符 思路
首先这个题可以用哈希
我们可以设置一个记录次数的数组当一个字母出现过那么次数至少为1用字母的位置在新数组中显示后面遍历数组的时候遇到第一个次数为1 的直接返回它的位置
代码实现
int firstUniqChar(char * s){int num[30]{0};for(int i0;istrlen(s);i){num[s[i]-a];}for(int i0;istrlen(s);i){if(num[s[i]-a]1)return i;}return -1;
}