飞道的博客

力扣(LeetCode)刷题,简单题(第21期)

486人阅读  评论(0)

目录

第1题:最大连续1的个数

第2题:相同的树

第3题:检查平衡性

第4题:仅仅反转字母

第5题:检测大写字母

第6题:在区间范围内统计奇数数目

第7题:二分查找

第8题:字符串轮转

第9题:公交车站间的距离

第10题:有效的括号(2020 哔哩哔哩校招笔试题)


力扣(LeetCode)定期刷题,每期10道题,业务繁重的同志可以看看我分享的思路,不是最高效解决方案,只求互相提升。

第1题:最大连续1的个数

试题要求如下:

回答(C语言):


  
  1. int findMaxConsecutiveOnes(int* nums, int numsSize){
  2. int temp = 0;
  3. for( int i = 0,cou = 0; i < numsSize; i++){
  4. if(nums[i] == 1){
  5. cou++;
  6. }
  7. else{
  8. cou = 0;
  9. }
  10. if(cou > temp){
  11. temp = cou;
  12. }
  13. }
  14. return temp;
  15. }

运行效率如下所示:


第2题:相同的树

试题要求如下:

回答(C语言):


  
  1. /**
  2. * Definition for a binary tree node.
  3. * struct TreeNode {
  4. * int val;
  5. * struct TreeNode *left;
  6. * struct TreeNode *right;
  7. * };
  8. */
  9. bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
  10. if (p == NULL && q == NULL) {
  11. return true;
  12. } else if (p == NULL || q == NULL) {
  13. return false;
  14. } else if (p->val != q->val) {
  15. return false;
  16. } else {
  17. return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
  18. }
  19. }

运行效率如下所示:


第3题:检查平衡性

试题要求如下:

回答(C语言):


  
  1. /**
  2. * Definition for a binary tree node.
  3. * struct TreeNode {
  4. * int val;
  5. * struct TreeNode *left;
  6. * struct TreeNode *right;
  7. * };
  8. */
  9. #define MAX(a, b) ((a) < (b) ? (b) : (a))
  10. bool CoreFunc(struct TreeNode* root, int* depth)
  11. {
  12. if ( NULL == root) {
  13. *depth = 0;
  14. return true;
  15. }
  16. if ( NULL == root->left && NULL == root->right) {
  17. *depth = 1;
  18. return true;
  19. }
  20. int left = 0;
  21. int right = 0;
  22. bool ret = CoreFunc(root->left, &left) && CoreFunc(root->right, &right);
  23. int res = left > right ? left - right : right - left;
  24. *depth = MAX(left, right) + 1;
  25. if (ret && res <= 1) {
  26. return true;
  27. } else {
  28. return false;
  29. }
  30. }
  31. bool isBalanced(struct TreeNode* root)
  32. {
  33. if ( NULL == root) {
  34. return true;
  35. }
  36. int depth = 0;
  37. return CoreFunc(root, &depth);
  38. }

运行效率如下所示:


第4题:仅仅反转字母

试题要求如下:

回答(C语言):


  
  1. char * reverseOnlyLetters(char * S){
  2. int i= 0,j= strlen(S) -1;
  3. char tmp= 0;
  4. while(i<j){
  5. if(!((S[i] >= 'a' && S[i] <= 'z') || (S[i] >= 'A' && S[i] <= 'Z'))) //排除i指向非字母的情况
  6. {
  7. i++;
  8. continue;
  9. }
  10. if(!((S[j] >= 'a' && S[j] <= 'z') || (S[j] >= 'A' && S[j] <= 'Z'))) //排除j指向非字母的情况
  11. {
  12. j--;
  13. continue;
  14. }
  15. tmp=S[i]; //交换字母
  16. S[i]=S[j];
  17. S[j]=tmp;
  18. i++;
  19. j--;
  20. }
  21. return S;
  22. }

运行效率如下所示:


第5题:检测大写字母

试题要求如下:

回答(C语言):


  
  1. bool detectCapitalUse(char * word){
  2. int len = strlen(word);
  3. int cnt = 0;
  4. for( int i = 0;i<len;i++){
  5. if((word[i] >= 'A')&&(word[i] <= 'Z'))
  6. cnt++;
  7. }
  8. //对应情况1和情况3
  9. if((cnt == len)||(cnt == 0)){
  10. return true;
  11. }
  12. //对应情况2
  13. else if(((word[ 0] >= 'A')&&(word[ 0] <= 'Z')&&(cnt == 1))){
  14. return true;
  15. }
  16. return false;
  17. }

运行效率如下所示:


第6题:在区间范围内统计奇数数目

试题要求如下:

 

回答(C语言):


  
  1. int countOdds(int low, int high){
  2. if((low% 2 == 0) && (high% 2 == 0)){
  3. return (high-low)/ 2;
  4. }
  5. return (high-low)/ 2+ 1;
  6. }

运行效率如下所示:


第7题:二分查找

试题要求如下:

回答(C语言):


  
  1. int search(int* nums, int numsSize, int target){
  2. int left = 0;
  3. int right = numsSize - 1;
  4. int mid = 0;
  5. while (left <= right) {
  6. mid = left + (right - left) / 2;
  7. if (nums[mid] == target) {
  8. return mid;
  9. } else if (nums[mid] < target) {
  10. left = mid + 1;
  11. } else if (nums[mid] > target) {
  12. right = mid - 1;
  13. }
  14. }
  15. return -1;
  16. }

运行效率如下所示:


第8题:字符串轮转

试题要求如下:

回答(C语言):


  
  1. bool isFlipedString(char* s1, char* s2){
  2. int a = strlen(s1),b = strlen(s2);
  3. if(a != b) return false;
  4. int count = 0;
  5. for( int i = 0; i < a; i++)
  6. {
  7. if(s1[i] == s2[count])
  8. {
  9. count++;
  10. }
  11. }
  12. int m = count;
  13. for( int i = 0; i < a-count; i++)
  14. {
  15. if(s1[i] != s2[m])
  16. {
  17. return false;
  18. }
  19. m++;
  20. }
  21. return true;
  22. }

运行效率如下所示:


第9题:公交车站间的距离

试题要求如下:

回答(C语言):


  
  1. int distanceBetweenBusStops(int* distance, int distanceSize, int start, int destination){
  2. int dis1 = 0, dis2 = 0;;
  3. int s;
  4. s = start;
  5. while (s != destination) {
  6. dis1 += distance[s];
  7. s = (s + 1) % distanceSize;
  8. }
  9. while (s != start) {
  10. dis2 += distance[s];
  11. s = (s + 1) % distanceSize;
  12. }
  13. return dis1 < dis2 ? dis1 : dis2;
  14. }

运行效率如下所示:


第10题:有效的括号(2020 哔哩哔哩校招笔试题)

试题要求如下:

回答(C语言):


  
  1. bool isValid(char * s){
  2. int top = 0;
  3. char* stack = ( char*) malloc( strlen(s));
  4. if (s== NULL || strlen(s)<= 0) return true;
  5. for ( int i = 0; i< strlen(s); i++){
  6. if(s[i]== '(' || s[i]== '{' || s[i]== '['){
  7. stack[top++] = s[i];
  8. } else{
  9. if(--top < 0) return false;
  10. if(s[i]== ')' && stack[top] != '(') return false;
  11. if(s[i]== '}' && stack[top] != '{') return false;
  12. if(s[i]== ']' && stack[top] != '[') return false;
  13. }
  14. }
  15. if (top > 0) return false;
  16. return true;
  17. }

运行效率如下所示:


转载:https://blog.csdn.net/m0_38106923/article/details/107830843
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场