力扣(LeetCode)刷题,简单题(第13期)
目录
第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期)相关推荐
- Leetcode-How-What 力扣Leetcode刷题指南
Leetcode-How-What 力扣Leetcode刷题指南 About the way how to use Leetcode wisely for preparing the intervie ...
- 力扣(LeetCode)刷题,简单+中等题(第35期)
力扣(LeetCode)定期刷题,每期10道题,业务繁重的同志可以看看我分享的思路,不是最高效解决方案,只求互相提升. 第1题:解码异或后的排列 试题要求如下: 回答(C语言): /*** Note: ...
- 力扣(LeetCode)刷题,简单+中等题(第26期)
目录 第1题:字典序排数 第2题:字符串解码 第3题:查找常用字符 第4题:所有奇数长度子数组的和 第5题:长按键入 第6题:分割字符串的最大得分 第7题:回文链表 第8题:有多少小于当前数字的数字 ...
- 力扣(LeetCode)刷题,简单题(第23期)
目录 第1题:整数转换 第2题:重复的子字符串 第3题:范围求和2 第4题:反转数位 第5题:数字转换为十六进制 第6题:比较含退格的字符 第7题:三个数的最大乘积 第8题:珠玑妙算 第9题:旋转字符 ...
- 力扣(LeetCode)刷题,简单题(第15期)
目录 第1题:将整数转换为两个无零整数的和 第2题:一周中的第几天 第3题:把二叉搜索树转换为累加树 第4题:连续字符 第5题:拿硬币 第6题:删除中间节点 第7题:猜数字 第8题:整数的各位积和之差 ...
- 力扣(LeetCode)刷题,简单题(第5期)
目录 第1题:二进制中1的个数 第2题:打印从 1 到最大的 n 位十进制数 第3题:删除链表的节点 第4题:调整数组顺序使奇数位于偶数前面 第5题:链表中倒数第K个节点 第6题:反转链表 第7题:二 ...
- 力扣(LeetCode)刷题,简单+中等题(第34期)
目录 第1题:整数转罗马数字 第2题:电话号码的字母组合 第3题:二叉树的所有路径 第4题:砖墙 第5题:下一个排列 第6题:括号生成 第7题:删除并获得点数 第8题:全排列 第9题:颜色分类 第10 ...
- 力扣(LeetCode)刷题,简单+中等题(第33期)
目录 第1题:Z 字形变换 第2题:删除字符串中的所有相邻重复项 第3题:基本计算器 II 第4题:螺旋矩阵 第5题:螺旋矩阵 II 第6题:盛最多水的容器 第7题:删除有序数组中的重复项 II 第8 ...
- 力扣(LeetCode)刷题,简单+中等题(第32期)
目录 第1题:数组的度 第2题:托普利茨矩阵 第3题:爱生气的书店老板 第4题:翻转图像 第5题:有效的数独 第6题:无重复字符的最长子串 第7题:区域和检索 - 数组不可变 第8题:二维区域和检索 ...
- 力扣(LeetCode)刷题,简单+中等题(第31期)
目录 第1题:同构字符串 第2题:最后一块石头的重量 第3题:最小路径和 第4题:键盘行 第5题:存在重复元素 II 第6题:两数相加 第7题:三个数的最大乘积 第8题:等价多米诺骨牌对的数量 第9题 ...
最新文章
- abaqus python二次开发攻略_Abaqus有限元分析常见问题解答与实用技巧 12天后上架...
- 【无码专区13】最小公倍数(线段树)
- spring的aop_Spring AOP 小结
- PHP 继承新增,php类的扩展和继承用法实例
- 2017.10.12 礼物(zjoi2011) 失败总结
- The type javax.xml.rpc.ServiceException cannot be resolved.It is indirectly
- React中函数式声明组件
- php实现鼠标悬停显示下拉菜单,jquery实现鼠标滑过显示二级下拉菜单效果
- 简单合并word文档(转)
- sqlite 查找表中多余的重复记录
- 101. Domino 10 就要来了
- J0ker的CISSP之路:复习-Information Security Management(2)
- 水哥:用好泳道图,轻松化解复杂系统的业务流程梳理 | 真北敏捷群分享
- keystore提取私钥和证书
- wp8 导出短信 到android,如何从outlook同步联系人头像以及管理短信呢
- 大数据可视化多个模板案例(前端)
- 【JUC】动态线程池
- python排序三个数大小_python三个数从小到大排序_后端开发
- 公安大数据与图侦应用结合现状分析
- 一种电冰箱关门提醒器