随笔分类 - Algo.
摘要:输出不是有向图的拓扑序列 吐槽一下pat真的用起来很烦,最后一个用例如果直接输出一直过不了,得把数据存入vector再输出才过了 #include<iostream> #include<vector> #include<algorithm> #include<set> using namespace
阅读全文
摘要:##题目 求最短路径与最大点权 ##有点问题 代码里默认列表全部都是先只定义了,默认值就不稳定; 问题在这int nms[500];//最短路径数这里nms全部是为0的,如果把nms[500]改成nms[c],nms里面的值又有问题了; 然后单独定义一个列表里面的值都是乱的,很奇怪 ##code d
阅读全文
摘要:主要问题是从低位往高位每数3位打个commas,最开始按顺序插入逗号搞成了高位到低位;然后碰巧是3的倍数就可以通过。 关键在转换为字符后的位置应该==总长度%3,就可以实现从低位到高位打逗号 #include <iostream> using namespace std; int main() {
阅读全文
摘要:这两种筛法思路太巧妙了 ##埃氏筛EratosthenesEratosthenes class Solution { public: int countPrimes(int n) { int primes; vector<int> isPrime(n, 1); for (int i = 2; i <
阅读全文
摘要:#题目leetcode326 给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false 。 整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3x ##神奇数字243 我的方法:求$log_3(n)$,判断是否是整数.然后遇到243怎么也通
阅读全文
摘要:主要是为了实现getMin函数 ##题目 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) —— 将元素 x 推入栈中。 pop() —— 删除栈顶的元素。 top() —— 获取栈顶元素。 getMin() —— 检索栈中的最小元素。 伪单栈解
阅读全文
摘要:##开始的想法 生成n个独立的(),然后把最后一个往前面扔(重复这个过程) 但是不好实现 ##答案解法思路是类似生成然后去除不符合的项 ###用动规好理解一些 n+1可以理解为比n项多了一个括号,所以把n项放在括号里面p项和外面q项排列;p和q就转化成了子问题。但是要注意p和q的顺序是固定的,可以是
阅读全文
摘要:leetcode的提交不知道是不是有问题,我写的在本地跑起来比官方答案快,但是提交失败。 ##我的思路 正推,字符串首尾各放一指针,向中间查找相同项,找到后开始判断是否回文串,当两指针相遇判断结果,记录长度。并且第一个找到的回文串肯定是最大,所以前面的指针向前继续查找 string longestP
阅读全文
摘要:1,确定状态 2,找到转移公式 3,确定初始条件以及边界条件 ##leetcode53 最大子数组和 https://leetcode-cn.com/problems/maximum-subarray/ 两者关系转换条件--后无效性! ###求连续项最大和 class Solution { publ
阅读全文
摘要:爬楼梯问题抽象出来就是斐波那契数列求和, 像这样递推公式,第一时间想到就是用递归 ##普通树形递归 一提交就爆栈,当n过大时压不住 case 10: result = 89; case 20: result = 10946; case 45: result = 1836311903; class S
阅读全文
摘要:##哈希表 初始:将key通过hash function转换到地址 查询:将查询值通过哈希转换,访问内存地址,对比key值 ##使用 查询key值,O(k) class Solution { public: vector<int> twoSum(vector<int> nums,int t){ un
阅读全文
摘要:第一次写成了O(n^2) 没搞懂初始化构建大顶堆有什么用,就每次都从下往上比较然后生成大顶堆; 要让复杂度降到nlog(n)得利用堆的性质呀,从上往下比较才能是logn class Solution { public: vector<int> sortArray(vector<int>& nums)
阅读全文
摘要:1.前后两指针互换 void Qrank(vector<int>& nums,int start,int over){ if(start>=over) return; int left=start; int right=over; // int rdm = rand() % (over - star
阅读全文
摘要:主要就是利用左右指针把O(n3)降到O(n2) 剩下的就想办法排除重复 class Solution { public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> ts;//返回 int m = num
阅读全文
摘要:##最容易想到的 利用sort() class Solution { public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { for(int i=0;i<n;i++){ nums1[m+i]=nums2[i
阅读全文
摘要:先怎么想不出递归解法,想到只能用BFS队列。。。 ##BFS /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode
阅读全文
摘要:##非递归 在做层序遍历之前,一直认为递归最牛逼,非递归是 💩 。然后用到BFS时递归没法用了,遂硬着头皮回去看,发现递归原理也是调用栈来储存。。。 其实多理解一下发现思路和递归差不多,但并不是一来就是按照顺序压栈,一般先压单边,然后弹出的时候再处理。 思路 不了解三种遍历方式可以先看看介绍 1.
阅读全文
摘要:##题目 给定一个二叉树,检查它是否是镜像对称的。 例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3 进阶: 你可以运用递归和
阅读全文
摘要:种一棵二叉树最好的时间是十年前,其次是现在:smile:。 先讲一下前序、中序、后序遍历, 其实就是(访问当前节点的值的代码cout<<(root->val)<<endl;)与递归代码(递归左右节点)位置关系来区分 ##二叉树遍历类型 ###前序遍历 {//前序遍历 if (root==nullpt
阅读全文
摘要:没做出来,复盘一下 ##题目 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 1: 输入:root = [2,1,
阅读全文

浙公网安备 33010602011771号