目录

第1题:字符的最短距离

第2题:棒球比赛

第3题:判定是否互为字符重排

第4题:岛屿的周长

第5题:两个数组的交集

第6题:计算质数

第7题:旋转数组

第8题:二叉树的层平均数

第9题:修建二叉搜索树

第10题:分糖果


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

第1题:字符的最短距离

试题要求如下:

解答思路:

从左向右遍历,记录上一个字符 C 出现的位置 prev,那么答案就是 i - prev。

从右想做遍历,记录上一个字符 C 出现的位置 prev,那么答案就是 prev - i。

这两个值取最小就是答案。

回答(C语言):

/*** Note: The returned array must be malloced, assume caller calls free().*/
int* shortestToChar(char * S, char C, int* returnSize){int tmp1,tmp2;int len = strlen(S);int* ret = (int *)malloc(len * sizeof(int));for(int i = 0; i < len; i++){tmp1 = 0;for(int j = i; j >= 0; j--){if (S[j] != C) {if (j == 0) {tmp1 = len;} else {tmp1++;}} else {break;}}tmp2 = 0;for(int j = i; j < len; j++){if (S[j] != C) {if (j == len-1) {tmp2 = len;} else {tmp2++;}} else {break;}}ret[i] = tmp1 < tmp2 ? tmp1 : tmp2;}*returnSize = len;return ret;
}

运行效率如下所示:


第2题:棒球比赛

试题要求如下:

解答思路:

堆栈思想。

回答(C语言):

int calPoints(char ** ops, int opsSize){int arr[1000]={0};int score = 0,i = 0,j = 0;while(i < opsSize){switch(ops[i][0]){case 'C':arr[j-1]=0;j-=2;break;case 'D':arr[j]=arr[j-1]*2;break;case '+':arr[j]=arr[j-1]+arr[j-2];break;default://字符串类型转整数类型arr[j]=atoi(ops[i]);break;}j++;i++;}for(int i=0;i<j;i++){score+=arr[i];}return score;
}

运行效率如下所示:


第3题:判定是否互为字符重排

试题要求如下:

回答(C语言):

bool CheckPermutation(char* s1, char* s2){int i = 0,j = 0,s1Len = 0,s2Len = 0;s1Len=strlen(s1);s2Len=strlen(s2);if(s1Len != s2Len){return false;}char letter[26]={0};for(i=0;i<s1Len;i++){letter[s1[i]-'a']++;}for(i=0;i<s2Len;i++){letter[s2[i]-'a']--;}for(i=0;i<26;i++){if(letter[i]!=0){return false;}}return true;
}

运行效率如下所示:


第4题:岛屿的周长

试题要求如下:

解答思路:

每个岛+4周围四个方向有岛屿则-1。

回答(C语言):

int islandPerimeter(int** grid, int gridSize, int* gridColSize){int circle = 0;for (int i = 0; i < gridSize; i++) {for (int j = 0; j < (*gridColSize); j++) {if (grid[i][j] == 1) {circle +=4;if (i > 0 && grid[i-1][j] == 1) {circle--;}if ((i + 1) < gridSize && grid[i + 1][j] == 1){circle--;}if (j > 0 && grid[i][j - 1] == 1) {circle--;}if ((j + 1) < (*gridColSize) && grid[i][j + 1] == 1){circle--;}}}        }return circle;
}

运行效率如下所示:


第5题:两个数组的交集

试题要求如下:

解答思路:

使用哈希表查询:对数组1进行映射,将数组元素作为下标,对散列表相应元素++;遍历数组2,同样将数组元素作为下标,判断该下标处元素是否有数值(在数组1中是否存在)。

回答(C语言):

运行效率如下所示:


第6题:计算质数

试题要求如下:

解答思路:

质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。

厄拉多塞筛法:

回答(C语言):

int countPrimes(int n)
{int *isPrime = (int*)malloc(sizeof(int) * n);memset(isPrime, 0, sizeof(int) * n);int cnt = 0;for(int i = 2; i < n; i++){if(isPrime[i] == 0){cnt++;for(int j = i + i; j < n; j += i){  //筛去i的倍数isPrime[j] = 1;}}}return cnt;
}

运行效率如下所示:


第7题:旋转数组

试题要求如下:

解答思路:

使用反转数组的方法,例如k为3时:

原始数组 : 1 2 3 4 5 6 7

反转所有数字后 : 7 6 5 4 3 2 1

反转前 k 个数字后 : 5 6 7 4 3 2 1

反转后 n-k 个数字后 : 5 6 7 1 2 3 4 --> 结果

回答(C语言):

static void reverse(int* nums, int numsSize, int start, int end)
{int temp = 0;while (start < end){temp = nums[start];nums[start] = nums[end];nums[end] = temp;start++, end--;}
}void rotate(int* nums, int numsSize, int k){k = k % numsSize;reverse(nums, numsSize, 0, numsSize - 1);reverse(nums, numsSize, 0, k - 1);reverse(nums, numsSize, k, numsSize - 1);
}

运行效率如下所示:


第8题:二叉树的层平均数

试题要求如下:

回答(C语言):

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*//*** Note: The returned array must be malloced, assume caller calls free().*/void helper(struct TreeNode* root, double* sum, double* count, int index, int* head){if(root==NULL){return;}sum[index] += root->val;count[index]++;(*head) = fmax(*head, index);helper(root->left, sum, count, index+1, head);helper(root->right, sum, count, index+1, head);}double* averageOfLevels(struct TreeNode* root, int* returnSize){int NUM = 10000;double* sum = (double*)calloc(NUM, sizeof(double));double* count = (double*)calloc(NUM, sizeof(double));int head = 0;helper(root, sum, count, 0, &head);double* ret = (double*)malloc((head+1)*sizeof(double));for(int i=0; i<head+1; i++) {ret[i] = sum[i]/count[i];}*returnSize = head+1;return ret;
}

运行效率如下所示:


第9题:修建二叉搜索树

试题要求如下:

回答(C语言):

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/struct TreeNode* trimBST(struct TreeNode* root, int L, int R){if (NULL == root){return NULL;}if (root->val < L){return trimBST(root->right, L, R);}if (R < root->val){return trimBST(root->left, L, R);}root->left = trimBST(root->left, L, R);root->right = trimBST(root->right, L, R);return root;
}

运行效率如下所示:


第10题:分糖果

试题要求如下:

回答(C语言):

int cmpfunc (const void * a, const void * b)
{return ( *(int*)a - *(int*)b );
}int distributeCandies(int* candies, int candiesSize){int cou = 0;qsort(candies, candiesSize, sizeof(int), cmpfunc);for(int i = 0,j = 1;i < candiesSize-1;i++,j = i+1){if(candies[i] != candies[j]){cou++;}}cou++;if(cou < candiesSize/2){return cou;}return candiesSize/2;
}

运行效率如下所示:

力扣(LeetCode)刷题,简单题(第13期)相关推荐

  1. Leetcode-How-What 力扣Leetcode刷题指南

    Leetcode-How-What 力扣Leetcode刷题指南 About the way how to use Leetcode wisely for preparing the intervie ...

  2. 力扣(LeetCode)刷题,简单+中等题(第35期)

    力扣(LeetCode)定期刷题,每期10道题,业务繁重的同志可以看看我分享的思路,不是最高效解决方案,只求互相提升. 第1题:解码异或后的排列 试题要求如下: 回答(C语言): /*** Note: ...

  3. 力扣(LeetCode)刷题,简单+中等题(第26期)

    目录 第1题:字典序排数 第2题:字符串解码 第3题:查找常用字符 第4题:所有奇数长度子数组的和 第5题:长按键入 第6题:分割字符串的最大得分 第7题:回文链表 第8题:有多少小于当前数字的数字 ...

  4. 力扣(LeetCode)刷题,简单题(第23期)

    目录 第1题:整数转换 第2题:重复的子字符串 第3题:范围求和2 第4题:反转数位 第5题:数字转换为十六进制 第6题:比较含退格的字符 第7题:三个数的最大乘积 第8题:珠玑妙算 第9题:旋转字符 ...

  5. 力扣(LeetCode)刷题,简单题(第15期)

    目录 第1题:将整数转换为两个无零整数的和 第2题:一周中的第几天 第3题:把二叉搜索树转换为累加树 第4题:连续字符 第5题:拿硬币 第6题:删除中间节点 第7题:猜数字 第8题:整数的各位积和之差 ...

  6. 力扣(LeetCode)刷题,简单题(第5期)

    目录 第1题:二进制中1的个数 第2题:打印从 1 到最大的 n 位十进制数 第3题:删除链表的节点 第4题:调整数组顺序使奇数位于偶数前面 第5题:链表中倒数第K个节点 第6题:反转链表 第7题:二 ...

  7. 力扣(LeetCode)刷题,简单+中等题(第34期)

    目录 第1题:整数转罗马数字 第2题:电话号码的字母组合 第3题:二叉树的所有路径 第4题:砖墙 第5题:下一个排列 第6题:括号生成 第7题:删除并获得点数 第8题:全排列 第9题:颜色分类 第10 ...

  8. 力扣(LeetCode)刷题,简单+中等题(第33期)

    目录 第1题:Z 字形变换 第2题:删除字符串中的所有相邻重复项 第3题:基本计算器 II 第4题:螺旋矩阵 第5题:螺旋矩阵 II 第6题:盛最多水的容器 第7题:删除有序数组中的重复项 II 第8 ...

  9. 力扣(LeetCode)刷题,简单+中等题(第32期)

    目录 第1题:数组的度 第2题:托普利茨矩阵 第3题:爱生气的书店老板 第4题:翻转图像 第5题:有效的数独 第6题:无重复字符的最长子串 第7题:区域和检索 - 数组不可变 第8题:二维区域和检索 ...

  10. 力扣(LeetCode)刷题,简单+中等题(第31期)

    目录 第1题:同构字符串 第2题:最后一块石头的重量 第3题:最小路径和 第4题:键盘行 第5题:存在重复元素 II 第6题:两数相加 第7题:三个数的最大乘积 第8题:等价多米诺骨牌对的数量 第9题 ...

最新文章

  1. abaqus python二次开发攻略_Abaqus有限元分析常见问题解答与实用技巧 12天后上架...
  2. 【无码专区13】最小公倍数(线段树)
  3. spring的aop_Spring AOP 小结
  4. PHP 继承新增,php类的扩展和继承用法实例
  5. 2017.10.12 礼物(zjoi2011) 失败总结
  6. The type javax.xml.rpc.ServiceException cannot be resolved.It is indirectly
  7. React中函数式声明组件
  8. php实现鼠标悬停显示下拉菜单,jquery实现鼠标滑过显示二级下拉菜单效果
  9. 简单合并word文档(转)
  10. sqlite 查找表中多余的重复记录
  11. 101. Domino 10 就要来了
  12. J0ker的CISSP之路:复习-Information Security Management(2)
  13. 水哥:用好泳道图,轻松化解复杂系统的业务流程梳理 | 真北敏捷群分享
  14. keystore提取私钥和证书
  15. wp8 导出短信 到android,如何从outlook同步联系人头像以及管理短信呢
  16. 大数据可视化多个模板案例(前端)
  17. 【JUC】动态线程池
  18. python排序三个数大小_python三个数从小到大排序_后端开发
  19. 公安大数据与图侦应用结合现状分析
  20. 一种电冰箱关门提醒器

热门文章

  1. [JavaScript] JavaScript 运算符与流程控制
  2. python 2x list 里面的中文打印效果为unicode 编码 的处理方法
  3. Kotlin的几个面试题
  4. json字符串的理解
  5. 显示intent的使用讲解
  6. Eclipse配置注释模板
  7. 【转载】浏览器事件循环机制(event loop)
  8. 操作系统性能优化分析及工具
  9. ElasticSearch(六) Update API
  10. gulp-load-task 解决 gulpfile.js 过大的问题