
算法
这个饕字怎么读
你写的这是个锤子的博客?orz
展开
-
求逆序对的数目
本片文章旨在记录求逆序对数目的算法题,但涉及到之前写过另一道求逆序数的Leetcode算法题,则第一部分为之前写过的LeetCode [315],第二部分为求逆序对数目题目。(第二部分其实为第一部分改动而来,原理在第一部分介绍)一、LeetCode [315] 计算右侧小于当前元素的个数(求逆序数)题目描述给定一个整数数组 nums,按要求返回一个新数组 counts。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。示例输入:n原创 2020-10-19 10:05:55 · 1225 阅读 · 0 评论 -
二叉树与图 LeetCode算法例子【总】
本文章记录贪心法的一些 LeetCode 题目,是我学习b站小象学院视频教程所做笔记,文末注明教程出处。侵删 ¯\_( ͡° ͜ʖ ͡°)_/¯LeetCode [113] 路径总和Ⅱ题目描述给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。说明: 叶子节点是指没有子节点的节点。示例给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13原创 2020-10-04 15:47:57 · 220 阅读 · 0 评论 -
递归-回溯-分治 LeetCode算法例子【总】
本文章记录贪心法的一些 LeetCode 题目,是我学习b站小象学院视频教程所做笔记,文末注明教程出处。侵删 ¯\_( ͡° ͜ʖ ͡°)_/¯LeetCode [78] 子集问题描述给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例输入: nums = [1,2,3]输出:[[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]递归与回溯方法算法思路图片来自小象学院教程算法代原创 2020-10-04 15:44:17 · 287 阅读 · 0 评论 -
贪心法LeetCode算法例子【总】
本文章记录贪心法的一些 LeetCode 题目,是我学习b站小象学院视频教程所做笔记,文末注明教程出处。侵删 ¯\_( ͡° ͜ʖ ͡°)_/¯LeetCode [455] 分发饼干问题描述假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这原创 2020-10-04 15:40:34 · 369 阅读 · 0 评论 -
【最大最小堆算法】求数组中第K大的元素 / 求数据中位数
C++ 的 STL 优先级队列构造最大最小堆的方式priority_queue<int> big_heap; // 默认构造最大堆priority_queue<int, vector<int>, greater<int>> small_heap; // 构造最小堆priority_queue<int, vector<int>, less<int>> big_heap2; // 构造最大堆优先级队列及其函数实例#原创 2020-08-10 14:00:31 · 659 阅读 · 0 评论 -
C++基本加减计算器堆栈实现 / 计算字符串表达式的值
问题:实现一个基本的计算器来计算一个简单的字符串表达式的值。字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格 。使用用堆栈结构实现:用状态机的实现思路图:———— 图片来自小象学院教程// 计算函数void compute(stack<long>& number_stack, stack<char>& operation_stack) { if (number_stack.size() < 2)原创 2020-08-09 20:21:32 · 1012 阅读 · 0 评论 -
用堆栈检查一个序列的顺序是否合法
例如:现有一个顺序序列是32541,入栈的序列为12345,检查32541是否合法算法如下:bool check_is_valid_order(std::queue<int>& order) { stack<int> S; int n = order.size(); for (int i = 0; i <= n; i++) { S.push(i); while (!S.empty()&&原创 2020-08-09 16:08:20 · 204 阅读 · 0 评论 -
用队列实现栈 / 用栈实现队列 / 实现带最小值的栈【C++】
C++的 STL stack和 STL queue头文件分别是 <stack> 和 <queue>注意:使用需要namespace stdSTL stack基本操作stack<int> S;S.empty();S.push(10);S.pop();STL queue基本操作queue<int> Q;Q.empty();Q.push(5);Q.pop();Q.front();用队列数据结构实现栈使用队列实现栈的下列操原创 2020-08-09 00:35:24 · 200 阅读 · 0 评论 -
多个有序链表的有序合并【C++】
问题描述:合并 k 个排序链表,返回合并后的排序链表可以有三个办法,在此问题上的基础是进行两个链表的合并,代码如下:struct ListNode { int val; ListNode* next; ListNode(int x) : val(x), next(NULL) {}};// 合并两个有序链表ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode temp_head(0);原创 2020-08-07 18:18:52 · 714 阅读 · 0 评论 -
复制带随机指针的链表算法【C++】
问题描述: 复制带随机指针的链表给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的 深拷贝。STL Map的使用int main() { map<Node*, int> node_map; Node a(5); Node b(3); Node c(6); a.next = &b; b.next = &c; a.random = &c; b原创 2020-08-07 18:16:37 · 240 阅读 · 0 评论 -
链表根据数值划分算法【C++】
给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。弄两个新的表头,一个储存小于特定值的节点,一个储存大于特定值的结点,再结合,简单的直接上代码:结点数据结构: // Definition for singly-linked list.struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next原创 2020-08-07 18:15:28 · 195 阅读 · 0 评论 -
简单链表求环算法问题【C++】
方法一:使用用C++的set库遍历链表逐一装入set集合,当出现一个结点已经收录在set中时,便找到了该节点// 算法写在一个类里class Solution {public: ListNode* detectCycle(ListNode* head) { set<ListNode*> node_set; while (head) { if (node_set.find(head) != node_set.e原创 2020-08-04 18:52:45 · 296 阅读 · 0 评论 -
链表逆置算法 C++实现
链表逆置算法 C++实现链表结构:#include <iostream>using namespace std; // Definition for singly-linked list.struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {}};整个链表逆置:用一个新的空头指针,从第一个节点开始逐一接入新的头指针,新接入的节点的next为上一原创 2020-08-03 16:01:23 · 1032 阅读 · 0 评论 -
C++求两个链表的交点
方法一,使用C++的set库set的使用方法:int main() { set<int> setA; const int lenA = 7; const int lenB = 8; int a[lenA] = { 5,1,4,8,10,1,3 }; int b[lenB] = { 2,7,6,3,1,6,0,1 }; for (int i = 0; i < lenA; i++) { setA.insert(a原创 2020-08-04 17:27:07 · 408 阅读 · 0 评论