力扣(LeetCode)刷题,简单题(第22期)
目录
第1题:两数之和IV—输入BST
第2题:柠檬水找零
第3题:左叶子之和
第4题:第K个缺失的正整数
第5题:反转字符串2
第6题:最小移动次数使数组元素相等
第7题:分发饼干
第8题:二叉树的最小深度
第9题:消失的数字
第10题:多数元素
力扣(LeetCode)定期刷题,每期10道题,业务繁重的同志可以看看我分享的思路,不是最高效解决方案,只求互相提升。
第1题:两数之和IV—输入BST
2、用双指针(即下标),来找对应结果是否存在 i指向最小,j指向最大。若i+j小于目标值,那么i++,i+j大于>目标值,则j--。
#define Maxsize 10000void inorder(struct TreeNode* root,int *nums,int* length);bool findTarget(struct TreeNode* root, int k){int i=0,j=-1; //j记录最大值的下标(即数组最后一个元素),把其指针传给inorder函数int* nums=(int*)malloc(Maxsize*sizeof(int)); inorder(root,nums,&j);while(i<j) //循环判断数组中是否存在两数之和等于k的情况{if(nums[i]+nums[j]==k) return true;else if(nums[i]+nums[j]<k) i++;else j--;}return false;
}void inorder(struct TreeNode* root,int *nums,int* length){ //递归中序遍历二叉搜索树,并且把结果存在数组中if(root==NULL) return;inorder(root->left,nums,length);nums[++(*length)]=root->val;inorder(root->right,nums,length);
}
第2题:柠檬水找零
bool lemonadeChange(int*a, int n)
{if (a == NULL || n <= 0) {return false;} int s5 = 0, s10 = 0, s20 = 0;for (int i = 0; i < n; i++) {switch (a[i]) {case 20: // 给20找15元 if (s10 > 0 && s5 > 0) {s20++, s10--, s5--;continue; // 找开了 }if (s5 > 3) {s20++, s5 -= 3;continue; // 找开了}return false;case 10: //给10元找5元 if (s5 > 0) {s10++, s5--;continue; // 找开了}return false;case 5: // 给5元s5++;continue; // 不找钱 default: // 其他都失败 return false;}}return true;
}
第3题:左叶子之和
/*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/int sumOfLeftLeaves(struct TreeNode* root){if(!root) return 0;int sum=0;if(root->left){if(!root->left->left&&!root->left->right){sum+=root->left->val;}else{sum+=sumOfLeftLeaves(root->left);}}if(root->right){sum+=sumOfLeftLeaves(root->right);}return sum;
}
第4题:第K个缺失的正整数
int findKthPositive(int* arr, int arrSize, int k){int i = 0, cnt=0, hash[10000] = {0};for(i=0;i<arrSize;i++){hash[arr[i]]++; //记录出现次数,arr[i]对应下标的hash表值hash[arr[i]]就不会为0}for(i=1;i<10000;i++){if(hash[i]==0){cnt++;}if(cnt==k){ //找到第k个为0的元素,它也就是第k个没有出现的元素,返回对应下标即可break;}}return i;
}
第5题:反转字符串2
char * reverseStr(char * s, int k){//每2k个翻转前k个//不足2k但大于等于1k,翻转前k个字符剩下的不变//小于k个字符,全部翻转int len = strlen(s);for(int i=0; i<len; i+=2*k){int left = i;int right = (i + k - 1 < len) ? i + k - 1 : len - 1;while(left<right){char c = s[left];s[left++] = s[right];s[right--] = c;} }return s;
}
第6题:最小移动次数使数组元素相等
n - 1个数加1即1个数减1,因此只需算sum(nums) - numsSize * min。
int minMoves(int* nums, int numsSize){int ret = 0;int min = nums[0];for(int i = 0;i < numsSize;i++){if(nums[i] < min){min = nums[i];}}for(int i = 0;i < numsSize;i++){ret = ret + nums[i] - min;}return ret;
}
第7题:分发饼干
采用贪心算法的思路,此问题的贪心选择是“先把胃口最小的孩子满足,再满足之后的,如果当前胃口最小的孩子都没满足那么已经终止分配了”。
int cmp(const void *a, const void *b) {return (*(int*)a - *(int*)b);
}int findContentChildren(int* g, int gSize, int* s, int sSize){qsort(g, gSize, sizeof(int), cmp);qsort(s, sSize, sizeof(int), cmp);int i = 0, j = 0;int count = 0;while (i < gSize && j < sSize) {if (g[i] <= s[j]) {i++;count++;}j++;}return count;
}
第8题:二叉树的最小深度
2、二叉树不为空树,两子树均不为空,获取左右子树的最小深度,取最小的那个加1;
3、二叉树不为空树,但两子树其中之一为空,最小深度为子树不为空的最小深度加1。
/*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/#define min(A, B) ((A) < (B) ? (A) : (B))
int minDepth(struct TreeNode* root){if (root == NULL) {return 0;}int left = minDepth(root->left);int right = minDepth(root->right);return (left && right) ? min(left, right) + 1 : left + right + 1;
}
第9题:消失的数字
int missingNumber(int* nums, int numsSize){int sum = 0;for(int i = 0; i < numsSize; i++){sum += nums[i];}return ((numsSize * (1 + numsSize))/2) - sum;
}
第10题:多数元素
摩尔投票法,通过一个计数变量s,来观察哪一个数最后不是0即为majority;相同加,不相同减,变为0后换下一个。
int majorityElement(int* nums, int numsSize){int s = 1;int maj = nums[0];for (int i = 1; i < numsSize; i++) {if (maj == nums[i]){s++;}else {s--;}if (s == 0) {maj = nums[i + 1];}}return maj;
}
力扣(LeetCode)刷题,简单题(第22期)相关推荐
- 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题 ...
最新文章
- text-shadow
- myeclipse + maven项目创建
- Android图片适应屏幕大小
- 前端学习(1874)vue之电商管理系统电商系统之处理项目中eslint语法报错
- echarts中国地图3D各个城市标点demo
- document.addEventListener理解
- IBM 100年 科技引导未来
- Debian Ubuntu/Centos7设置某些软件不自动更新
- 【转】kubernetes 中 deployment 支持哪些键值
- 离散数学 - 04 图论
- 【手持式微波频谱分析仪】真正便携且功能强大的仪器 - 欧洲制造
- 七.其他技术-Beetl与BeetlSQL
- Arduino(关于驱动步进电机的学习)
- 折扣力度自动计算器 | 财富自由必备小工具
- 无锡做大做强“中国芯” 华虹功不可没
- xd怎么做页面滑动_Adobe XD中的滚动组功能详解!
- Mes系统批次管理功能
- 华南主板bios怎么恢复出厂设置_最详细的主板bios设置图解教程bios设置指南史无前例...
- ssm的校园单车自行车租赁系统|租车系统计算机专业毕业论文java毕业设计开题报告
- 新电途与华为AITO达成充电合作;SGW和摩托罗拉完成家庭音频产品许可交易 | 美通企业日报...