
算法
我有一個夢想
IT
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
带负权边的单源最短路径-判断是否存在负环-输出最短距离
带负权边的单源最短路径-判断是否存在负环-输出最短距离原创 2022-06-13 18:51:45 · 589 阅读 · 0 评论 -
LeetCode-563 二叉树的坡度 ——树
题目题解题目的要求就是求各个节点左右子树和的差递归遍历二叉树并算出各个节点的子树和然后中序遍历下该二叉树 求各个节点左右子树差绝对值和代码class Solution {public: void InOrder(TreeNode *root, int &sum) { if (nullptr != root) { if (nullptr == root->left && nul...原创 2022-03-25 15:51:31 · 1525 阅读 · 0 评论 -
LeetCode-2038 如果相邻两个颜色均相同则删除当前颜色
如果相邻两个颜色均相同则删除当前颜色原创 2022-03-22 19:25:36 · 271 阅读 · 0 评论 -
LeetCode-160 相交链表
求两个相交的链表节点题解利用Map存节点 遍历链表 利用两个指针pa pb遍历两个链表 pa == pb 则返回当前节点 pa遍历完链表1则把pa指向链表2pb遍历完链表2则把pa指向链表1 当pa pb 遍历完两个链表都没有相同的节点 则为无交点 有交点必会在两则遍历过程中遇到 代码class Solution {public: ListNode *getIntersectionNode(ListNode *headA, ListNode *h...原创 2022-03-18 15:09:35 · 1081 阅读 · 0 评论 -
LeetCode-599 两个列表的最小索引总和
我的题解:map记录list1各字符串的位置遍历list2 在map找相同字符串的位置 记录最小距离最后遍历下list1或者list2获得最小距离字符串class Solution {public: vector<string> findRestaurant(vector<string>& list1, vector<string>& list2) { map<string, int>...原创 2022-03-14 19:11:38 · 609 阅读 · 0 评论 -
Leetcode-430 扁平化多级双向链表(二叉树遍历、链表)
题解这题把示例的图 转一下 因为不需要考虑前一个节点 发现其实是一颗二叉树 只要先序遍历节点就行 /*// Definition for a Node.class Node {public: int val; Node* prev; Node* next; Node* child;};*/class Solution {public: void preOrder(Node* node, ve...原创 2021-09-24 16:14:04 · 226 阅读 · 0 评论 -
Leetcode-162 寻找峰值(二分查找)
题解顺序查找 二分查找顺序查找 n的复杂度 但是题目要求logN 所以顺序不符合要求logN这种的一般第一反应是二分看了题解 解释为啥可以二分为什么二分查找大的那一半一定会有峰值呢?(即nums[mid]<nums[mid+1]时,mid+1~N一定存在峰值)首先已知 nums[mid+1]>nums[mid],那么mid+2只有两种可能,一个是大于mid+1,一个是小于mid+1,小于mid+1的情况,那么mid+1就是峰值,大于mid...原创 2021-09-15 14:21:02 · 243 阅读 · 0 评论 -
Leetcode-502 IPO (贪心,排序, 堆, 优先队列)
题解贪心 排序 堆 优先队列只要每次选取的时候保证 w >= 投资资本 选取符合要求的利润最大的即可先按投资资本从小到大排序每次在符合 w >= 投资资本 选取profits最大的那个如果两个for循坏 直接超时这个时候需要没有学习过的大顶堆 把符合要求 w >= 投资资本 的项目利润都放进堆 取堆顶就是每次取的最大利润 维护这个大顶堆 就不需要两个for循坏了大顶堆可以用优先队列来实现//升序队列priorit...原创 2021-09-08 11:23:06 · 272 阅读 · 0 评论 -
Leetcode-1109 航班预订统计 (差分)
题解基本差分class Solution {public: vector<int> corpFlightBookings(vector<vector<int>>& bookings, int n) { vector<int> res; int cf[20002]; memset(cf, 0, sizeof(cf)); int m = bookin...原创 2021-09-01 10:52:23 · 207 阅读 · 0 评论 -
简单差分介绍
给出个数,给出个询问,每个询问给出,,,要求你在到上每一个值都加上,最后要求你输出每个位置上的大小,而只给你的时间范暴力超时线段树可能会超 如果限定int 线段树可能会超范围 因为我们只需要知道根节点大小 不是做区间查询差分可解差分过程模板题 Leetcode1109. 航班预订统计直接套用差分class Solution {public: vector<int> corpFlightBookings(vector<vector...原创 2021-09-01 10:49:26 · 212 阅读 · 0 评论 -
Leetcode-404 左叶子之和(深搜)
计算给定二叉树的所有左叶子之和。题解深搜遍历节点判定是否为左子树if (node->left && !node->left->left && !node->left->right)用了个全局sum记录左子树之和需要先遍历右子树 再判定是否为左叶子节点 再遍历左子树class Solution {public: int sum; int sumOfLeftLeaves(TreeNod...原创 2021-08-31 14:19:52 · 147 阅读 · 0 评论 -
Leetcode-257 二叉树的所有路径(深搜)
给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。叶子节点 是指没有子节点的节点。输入:root = [1,2,3,null,5]输出:["1->2->5","1->3"]示例 2:输入:root = [1]输出:["1"]提示:树中节点的数目在范围 [1, 100] 内-100 <= Node.val <= 100题解深度优先搜索深搜遍历每个点 然后把点放入string中 等访问...原创 2021-08-30 23:18:36 · 205 阅读 · 0 评论 -
Leetcode-113 路径总和 II(深搜/广搜)
题解相比1 这个题目要求输出和的路径广搜方法每搜一个节点 需要记录下 当前节点 路径和 所访问的节点列表自己开了一个Class 记录这三个东西 然后这个class入队class PreNode{ public: TreeNode *treeNode; int sum; vector<int> list; PreNode(TreeNode...原创 2021-08-30 16:57:39 · 172 阅读 · 0 评论 -
Leetcode-112 路径总和(深搜/广搜)
题解DFS方法深度优先搜索二叉树, 到根节点和为目标就返回true 否则返回false因为是二叉树 所以不需要记录是否访问过 每个节点只会访问到一次class Solution {public: bool hasPathSum(TreeNode* root, int targetSum) { if (root == nullptr) return false; return DFS(root, 0, targetSum);...原创 2021-08-30 15:28:02 · 171 阅读 · 0 评论 -
Leetcode-490 迷宫(深搜)
题解此题不同于以往的走迷宫问题,并非在每个格子都可以改变方向,只有碰到墙壁情况,停下来,才能换方向继续走,所以会比普通走迷宫多一段直线走的代码for (int i=0; i<4; i++) { int dx = x + dirx[i]; int dy = y + diry[i]; while(dx>=0 && dx<n && dy>=0 && dy<m &&am...原创 2021-08-30 14:34:37 · 729 阅读 · 0 评论 -
Leetcode-统计「优美子数组」
给你一个整数数组 nums 和一个整数 k。如果某个 连续 子数组中恰好有 k 个奇数数字,我们就认为这个子数组是「优美子数组」。请返回这个数组中「优美子数组」的数目。示例 1:示例 1:输入:nums = [1,1,2,1,1], k = 3输出:2解释:包含 3 个奇数的子数组是 [1,1,2,1] 和 [1,2,1,1] 。示例 2:输入:nums =...原创 2020-04-21 18:50:46 · 307 阅读 · 0 评论 -
二分查找
1.算法二分查找是比较常见的一种查找算法,二分顾名思义,一分为二,将有序的序列(升序或者降序)分成两部分,根据关键字的大小确定所在区间,然后继续把新区间一分为二,判断新的区间,直到找到或者找完也没找到为止。2.举例代码#include#include#include#includeusing namespace std;int array[1001];int B原创 2015-01-23 08:25:22 · 469 阅读 · 0 评论 -
二叉树的中序遍历-python实现-Leetcode
递归和非递归方法中序遍历二叉树 Leetcode题递归方法:# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right =...原创 2019-03-03 16:45:49 · 1412 阅读 · 0 评论 -
二叉树的后续遍历-python实现-Leetcode
递归和非递归两种方法:递归:# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solu...原创 2019-03-03 19:49:02 · 464 阅读 · 0 评论 -
二叉树的层次遍历 II-python-Leetcode 107
二叉树的层次遍历 IILeetcode 107此题为二叉树的层次遍历翻版,就是从底往上输出层次遍历结果其实就是把二叉树的层次遍历这题最后输出reverse()就OK了python代码:# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# ...原创 2019-03-03 20:31:43 · 502 阅读 · 0 评论 -
从前序与中序遍历序列构造二叉树-Leetcode 105-python
从前序与中序遍历序列构造二叉树-Leetcode 105思路来自:https://blog.csdn.net/htt789/article/details/80164049脑子不好使思路:1.前序序列第一个为根结点,在中序序列中找到该结点位置,中序序列就分为左右子树结点2.前序序列除第一个结点,其余为左右子树结点,根据中序序列中左右子树各自的长度将前序序列划分了左右子树3....原创 2019-03-03 22:31:24 · 362 阅读 · 0 评论 -
重建二叉树-牛客网-剑指Offer-Python
剑指Offer重建二叉树题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。根据前序和中序序列重建二叉树Leetcode有相同的题,Leetcode用习惯了用不好牛客网的代码:#...原创 2019-03-10 22:23:42 · 244 阅读 · 0 评论 -
用两个栈实现队列-牛客网-剑指Offer-Python
用两个栈实现队列题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。代码:# -*- coding:utf-8 -*-class Solution: def __init__(self): self.stack1 = [] self.stack2 = [] def pus...原创 2019-03-10 22:25:47 · 276 阅读 · 0 评论 -
对称二叉树-Leetcode 101-python
给定一个二叉树,检查它是否是镜像对称的。例如,二叉树[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递归方法:# Definition fo...原创 2019-03-15 11:11:16 · 295 阅读 · 0 评论 -
求质数-Leetcode 204-python
统计所有小于非负整数n的质数的数量。示例:输入: 10输出: 4解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。python:class Solution(object): def countPrimes(self, n): """ :type n: int :rtype: int ...原创 2019-03-15 12:29:46 · 246 阅读 · 0 评论 -
二叉搜索树中的插入操作-Leetcode 701 -python
给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 保证原始二叉搜索树中不存在新值。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回任意有效的结果。例如,给定二叉搜索树: 4 / \ 2 7 / \ 1 3和 插入的值: ...原创 2019-03-07 21:49:55 · 273 阅读 · 0 评论 -
二叉树的前序遍历-python实现-Leetcode
二叉树的前序遍历:递归:# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Soluti...原创 2019-03-03 16:12:42 · 3016 阅读 · 0 评论 -
买卖股票的最佳时机-Leetcode 121 - python
给定一个数组,它的第i个元素是一支给定股票第i天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 ...原创 2019-03-08 15:30:42 · 208 阅读 · 0 评论 -
二叉树的层次遍历-python实现-Leetcode
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例如:给定二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]层次遍历二叉树 并且每层需要分开保存思路:记录每层的最后一个位置...原创 2019-03-03 13:53:45 · 822 阅读 · 0 评论 -
结构体简单排序-一级-二级
结构体简单的二级排序sort 和 qsort.#include#include#include#includeusing namespace std;typedef struct node{ int x,y;}G;int cmp1(const G &a,const G &b) { if(a.x!=b.x) return a.x>b.x; //以X递减排序 e原创 2015-06-23 10:17:01 · 2230 阅读 · 0 评论 -
[动态规划]0-1背包问题
0-1背包问题非递归解法在不需要刚好装满情况复杂度O(NW)代码:#include#include#define W 1001#define N 101int Max(int a,int b){ return a>b?a:b;}int main(){ int wi[N],val[N];//物品重量及价值 int dp[N][W]; int weight原创 2015-07-02 09:27:49 · 412 阅读 · 0 评论 -
[动态规划]最长公共子序列问题(LCS)
最长公共子序列是动态规划的经典问题:状态转移方程:dp[i][j] = 0 如果i=0或j=0dp[i][j] = dp[i-1][j-1] + 1 如果X[i-1] = Y[i-1]dp[i][j] = max{ dp[i-1][j], dp[i][j-1] } 如果X[i-1] != Y[i-1] 此问题网上好多文章介绍,百度即可,转移方程要记住。还有就是要记录原创 2015-08-10 13:12:59 · 526 阅读 · 0 评论 -
二叉树的基本操作-递归实现
二叉树的一些基本操作学习1.二叉树定义typedef char Elemtype;typedef struct TreeNode{ Elemtype data; struct TreeNode *lchild,*rchild;}TreeNode,*BinTree;2.二叉树建立(先序递归建立)//先序序列构造二叉树,形如ABC##DE###FG###void原创 2015-09-02 00:33:40 · 1190 阅读 · 0 评论 -
[动态规划]数塔问题
数塔问题就是从顶点向下走,每个节点有个权值,求到达底部节点时所经过节点和最大用动态规划思想,从底部自下而上求dp[i][j]=max{dp[i+1][j],dp[i+1][j+1]}+dp[i][j]。原创 2015-08-11 14:18:18 · 895 阅读 · 0 评论 -
[动态规划]最长不降子序列问题-N*N算法
最长不降子序列N*N算法状态转移方程:dp[i]=max(dp[j]+1)(其中j=0~i-1) 即i之前最长的加上1便是到i位置最长的序列。算法复杂度N*N代码:此例是严格递增的最长序列#include#includeint main(){ int i,j; int n,max; int a[1001],list[1001]; while原创 2015-06-19 16:35:17 · 596 阅读 · 0 评论 -
最短路SPFA
求单源最短路的SPFA算法的全称是:Shortest Path Faster Algorithm,是西南交通大学段凡丁于1994年发表的。从名字我们就可以看出,这种算法在效率上一定有过人之处。很多时候,给定的图存在负权边,这时类似Dijkstra等算法便没有了用武之地,而Bellman-Ford算法的复杂度又过高,SPFA算法便派上用场了。简洁起见,我们约定加权有向图G不存在负权回路,即最短路径一原创 2014-11-10 00:03:47 · 403 阅读 · 0 评论 -
[动态规划]最长不降子序列-NlogN算法
NlogN算法精髓在于设立数组原创 2015-06-19 16:49:06 · 989 阅读 · 0 评论 -
[动态规划]最大连续子序列和
方程: MaxSum[i] = Max{ MaxSum[i-1] + A[i], A[i]}这里可以不用数组for(i=0;i<n;i++) { sum+=a[i]; if(max<sum) { max=sum; } if(原创 2015-08-11 15:00:58 · 385 阅读 · 0 评论 -
基数排序
1.基数排序思想基数排序(Radix Sorting) 又称为桶排序或数字排序:按待排序记录的关键字的组成成分(或“位”)进行排序。 基数排序和前面的各种内部排序方法完全不同,不需要进行关键字的比较和记录的移动。借助于多关键字排序思想实现单逻辑关键字的排序。把带排序的数字看成‘0’-‘9’的字符串组成,从低位到高位,或者从高位到低位 根据数字先分配,然后重原创 2015-01-17 16:47:10 · 612 阅读 · 0 评论 -
[数据结构]字符串匹配KMP
KMP主要用于字符串匹配关键在于NEXT数组的求解,当匹配不成功的时候模式串的回退位置就由NEXT数组决定。NEXT数组只与主串有关,其求解过程就运用到了KMP思想,求解过程网上很多,个人觉得比较难以理解。NEXT数组应用,下标从1开始:前缀与后缀的最大匹配长度,next[i]为前缀与后缀的最长匹配长度求循环节,循环周期if i%(i-next[i])==0,说明字原创 2015-08-28 10:16:36 · 492 阅读 · 0 评论