图解算法数据结构
Yohaoa
活着
展开
-
力扣K神图解算法数据结构解析10
十、分治算法剑指07,重建二叉树//时间O(n),空间O(n)//自己一直觉得这道题很难,没想到还是能够拿下,其实理论也清楚,前序遍历和中序遍历//关键如下//1.recur递归参数的确定,根节点在前序遍历中的索引,子树在中序遍历中的左边界和右边界//2.关于中序遍历哈希表的建立,空间换时间,使得查询为O(1)//3.常规递归基本操作,先写出整个程序框架,然后慢慢补充class Solution {public: TreeNode* buildTree(vector<in原创 2021-08-23 19:45:28 · 329 阅读 · 0 评论 -
力扣K神图解算法数据结构解析09
九、数学剑指14,剪绳子1//时间O(1),空间O(1)//需要注意几个点//1.3最优,2次之,1最差,相同段越多乘积越大//2.如果最后剩下1,要拿一个3过来和1组成2*2,因为2*2>3*1//3.对于第一条,其实证明也挺简单的,n=ax,试问当x为多少时,x^a最大,x^a=x^(n/x),求极值class Solution {public: int cuttingRope(int n) { if(n <= 3) return n-1原创 2021-08-23 19:43:31 · 329 阅读 · 0 评论 -
力扣K神图解算法数据结构解析08
八、位运算剑指15,二进制中1的个数class Solution {public: int hammingWeight(uint32_t n) { int cnt = 0; for(int i=0;i<32;++i) { if(1<<i & n) ++cnt; } return cnt; }};剑指56,数组中数字出现的次数1//时原创 2021-08-23 19:41:38 · 245 阅读 · 0 评论 -
力扣K神图解算法数据结构解析07
七、查找剑指03,数组中重复的数字//时间O(n),空间O(1)//不能使用哈希表,因为其空间复杂度为O(n)//此题妙就妙在可以把对应的值放在对应索引的位置//第一次查找到表示这个值存在,第二次查找到表示重复//有几点需要注意//1.把对应的值放在对应索引的位置//2.查两次,第一次查找到表示这个值存在,第二次查找到表示重复//3.交换后不能直接++,需要再查一次class Solution {public: int findRepeatNumber(vector<原创 2021-08-23 19:40:17 · 161 阅读 · 0 评论 -
力扣K神图解算法数据结构解析06
六、排序剑指40,最小的k个数//时间O(n),空间O(logn),此方法比使用快排快,空间为快排平均复杂度//此题不能使用快排,因为面试时基本不让让你使用快排//此方法基于快排但又不是快排,准确的说是部分快排,只对感兴趣的部分快排//因此时间复杂度相较于快排更低,其思想是当哨兵的序号等于k时,哨兵左边即为最小k个数//需要注意几点//1.终止条件与快排不一样//2.两个while(i<j)等号不要忘记,一个是<=,一个是>=//3.对于递归,不全递归,只选择感兴趣的原创 2021-08-23 19:38:29 · 228 阅读 · 0 评论 -
力扣K神图解算法数据结构解析05
五、双指针剑指18,删除链表的节点//时间O(n),空间O(1)//基本操作,情况要考虑清楚class Solution {public: ListNode* deleteNode(ListNode* head, int val) { if(!head) return nullptr; if(head->val == val) return head->next; auto cur = head->next;原创 2021-08-23 19:36:24 · 144 阅读 · 0 评论 -
力扣K神图解算法数据结构解析04
四、搜索与回溯算法DFS,本质是递归递推参数终止条件递推工作回溯BFS,本质是队列queue<int> que;que.push(第一个参数);while(!que.empty()){ auto tmp = que.front(); que.pop(); if(终止条件) continue; //进行递推工作 que.push(新的参数);}树的递归调用某函数既然可以递归调用root,那么也一定可以调用root-原创 2021-08-23 19:34:07 · 613 阅读 · 0 评论 -
力扣K神图解算法数据结构解析03
三、动态规划动规做题步骤状态定义,即定义dp[i]表示什么意思转移方程,思考dp[i]与dp[i-1]之间有什么关系,写出转移方程初始状态,特殊值dp[0],dp[1]返回值,dp[n]动态规划是从0,1一直往n开始推的,所以一般是有for循环的动规的dp数组一般可以压缩,因此空间复杂度可以从O(n)降到O(1)一般题目中有,最后一步,子问题,通常都要用到动规剑指10,斐波那契//时间O(n),空间O(1)//经典问题,斐波那契,使用递归会超时,严格遵循动规操作步骤来cl原创 2021-08-23 19:08:39 · 238 阅读 · 0 评论 -
力扣K神图解算法数据结构解析02
二、模拟剑指29,顺时针打印矩阵//时间O(mn),空间O(mn)//模拟,定义四个边界,每遍历一行就收缩一次边界,同时注意跳出循环边界条件class Solution {public: vector<int> spiralOrder(vector<vector<int>>& vec) { if(vec.empty()) return {}; vector<int> res;原创 2021-08-23 19:07:30 · 179 阅读 · 0 评论 -
力扣K神图解算法数据结构解析01
一、数据结构剑指05,替换空格//时间O(n),空间O(1) //计算空格数目,预分配空间,双指针class Solution {public: string replaceSpace(string s) { if(s.empty()) return s; int cnt = 0; for(size_t i=0;i<s.size();++i) { if(s[i] == ' ') ++原创 2021-08-23 19:04:47 · 311 阅读 · 0 评论