![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
代码细节
小可爱amour
这个作者很懒,什么都没留下…
展开
-
64. 最小路径和 62. 不同路径 63. 不同路径 II 动态规划系列
64. 最小路径和题目给定一个包含非负整数的mxn网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。解法: 直接利用原数组vector<vector<int>> res(rows, vector<int>(cols, 0));c...原创 2020-09-08 15:36:58 · 123 阅读 · 0 评论 -
剑指面试题04. 二维数组中的查找 (两种方向出发的实现)
解法1:从矩阵左下角出发,每次排除一行或者一列,逐渐向矩阵右上角逼近bool findNumberIn2DArray(int** matrix, int matrixSize, int* matrixColSize, int target){ if (matrixSize <= 0 || *matrix == NULL || matrix == NULL || matrixColSize == NULL || *matrixColSize <= 0) return原创 2020-06-03 20:23:00 · 172 阅读 · 0 评论 -
剑指面试题05. 替换空格
注:leetcode上的此题需要另辟空间,不是像剑指书上那样是原地修改,所以字符串从第一个或最后一个字符移动对时间复杂度没有影响,有点脱离此题的本意。char* replaceSpace(char* s){ if (s == NULL) return NULL; int blank_num = 0, len = 0; char *ptr = s; while (*ptr != '\0') { if (*ptr == ' ')原创 2020-06-04 20:36:40 · 119 阅读 · 0 评论 -
剑指面试题12. 矩阵中的路径 (原地修改和创建额外数组两种解法)
解法1:创建额外数组记录访问与否bool findRecu(char** board, int rows, int cols, int row, int col, char* word, bool* visited) { if (*word == '\0') //不可以和下一个if调换顺序 return true; if (row < 0 || row >= rows || col < 0 || col >原创 2020-06-09 21:31:16 · 125 阅读 · 0 评论 -
剑指面试题13. 机器人的运动范围
解法1:创建矩阵记录访问情况int bitSum(int num) { int sum = 0; while (num) { sum += num%10; num/=10; } return sum;}void movingRcu(int rows, int cols, int k, int row, int col, int *count, bool* visited) { if (row < 0 || row >原创 2020-06-10 19:52:52 · 105 阅读 · 0 评论 -
剑指面试题16. 数值的整数次方 (两种解法的对比和常见坑讲解)
解法1:避坑写法double powRcu(double base, int exponent) { if (exponent == 0) return 1.0; //必须有 if (exponent == 1) return base; double res = powRcu(base, exponent/2); //奇数偶数除以2的值一样 res *= res; if (exponent%2) res *= base; re原创 2020-06-11 20:10:07 · 212 阅读 · 0 评论 -
剑指面试题25. 合并两个排序的链表 (单独处理头结点和辅助头结点两种算法)
解法1:头结点单独处理struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){ if (l1 == NULL) return l2; if (l2 == NULL) return l1; struct ListNode *head, *ptr; //不是struct ListNode* head, ptr if (l1->val <原创 2020-06-12 18:35:46 · 77 阅读 · 0 评论 -
108. 将有序数组转换为二叉搜索树 109. 有序链表转换二叉搜索树 (解法实现和要点)
108:将有序数组转换为二叉搜索树题目:将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1。题目链接示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / /-10 5解法:class Soluti...原创 2020-06-30 20:12:56 · 91 阅读 · 0 评论 -
104. 二叉树的最大深度(三种解法) 110. 平衡二叉树(两种解法) 111. 二叉树的最小深度(两种解法)
解法1:递归class Solution {public: int maxDepth(TreeNode* root) { if (NULL == root) return 0; int leftDep = maxDepth(root->left) + 1; int rightDep = maxDepth(root->right) + 1; return leftDep > rightDe原创 2020-06-30 20:31:13 · 654 阅读 · 0 评论 -
231. 2的幂 338. 比特位计数 342. 4的幂 易错点解析
解法1:若是2的幂,则二进制只有一位1class Solution {public: bool isPowerOfTwo(int n) { if (n == 0) return false; long x = n; return (x&(x-1)) == 0; }};注:1:== 的优先级比 &(按位与)高,一定不要写成return n&(n-1) == 0; 会让你怀疑人生..原创 2020-06-28 20:51:07 · 193 阅读 · 0 评论 -
328. 奇偶链表 链表一分为二及细节处理
题目描述给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL输出: 1->3->5->2->4->NULL示例 2:输入: 2->1->3->5-&g原创 2020-09-01 18:17:26 · 99 阅读 · 0 评论 -
278. 第一个错误的版本 (二分法求mid的陷阱)
这道题目就是一个金典的二分法,但是在求mid的时候有个小陷阱。 在二分查找中,选取mid 的方法一般为mid = (left + right)>>1 如果使用的编程语言会有整数溢出的情况(例如 C++,Java),那么可以用left + (right - left)/2 代替前者。由于/和%的效率较低(约低一个量级),这里我们通常会选择用>>代替/,所以问题又来了,用left + (right -...原创 2020-08-31 17:14:53 · 194 阅读 · 0 评论 -
memset,memcpy,memmove和memchr
1:memset原型:void *memset(void *s, int ch, size_t n);头文件:<memory.h>功能:按字节将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。其他:1.1:对较大的结构体和数组进行清零操作的一种最快方法。一般malloc后结合使用,给内存赋值 1.2:memset函数按字节对内存块进行初始化,所以不能用它将int数组初始化为0和-1之外的...原创 2020-07-16 17:05:23 · 556 阅读 · 0 评论 -
打反引号
将输入法切换到英文,原创 2014-11-24 20:52:09 · 268 阅读 · 0 评论