- 博客(5)
- 资源 (1)
- 收藏
- 关注
原创 LeetCode 剑指 Offer 59 - I. 滑动窗口的最大值
原题链接思路:暴力解法和双端队列。暴力解法:窗口每次移动都去找当前窗口内的最大值。双端队列:存储元素的的下标,队列中下标的对应元素是从大到小的顺讯,并按时判断当前队列中的最大值是否还在窗口内。暴力解法:/** * Note: The returned array must be malloced, assume caller calls free(). */int maxInt(int* nums, int left, int numsSize){ int max = -1000
2020-12-13 21:24:14 61
原创 LeetCode 剑指 Offer 40. 最小的k个数
原题链接思路:利用快排的思想,找到能够区分 k 个 和 n-k 个元素的轴值下标k,输出前 k个元素即可。代码分三部分写,分段、判断分段结果函数、初始函数。注意的地方是 partition 函数中判断是否要继续 --right 或者 ++left 的条件中,轴值与数组元素需要至少保持一个有等于的情况,如果两个判断都没有等于的情况,那么会造成无限循环。原因是,如果在等于轴值的地方内层第一个 while 循环退出,在会把 nums[left] 位置的值换成轴值,相应的内层下一个 while 则不进入,
2020-12-13 17:54:35 64
原创 LeetCode 剑指 Offer 61. 扑克牌中的顺子
原题链接思路:最大值与最小值不能超过4;不能出现除0之外的重复数字。bool isStraight(int* nums, int numsSize){ int arr[14] = {0}; // 来个桶统计元素数量 int maxNum = -1, minNum = 14; for(int i =0; i < numsSize; i++){ if(nums[i] != 0){ //元素不为 0 时候统计 arr[nums[
2020-12-13 15:15:08 67
原创 LeetCode 剑指 Offer 62. 圆圈中最后剩下的数字
约瑟夫环问题。思路:一个一个杀掉,再逆向补回来还原位置。参考解释int lastRemaining(int n, int m){ int pos = 0; for(int i = 2; i <= n; i++){ pos = (pos + m) % i; } return pos;}
2020-12-06 17:21:13 69
原创 LeetCode 剑指 Offer 54. 二叉搜索树的第k大节点
思路:开辟数组;中序遍历;索引找值。换成C语言风格。要不然太依赖STL了。/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */void dfs(struct TreeNode* root, int* count, int* returnSize){
2020-12-06 16:52:25 92
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人