C/C++
葡萄老君
这个作者很懒,什么都没留下…
展开
-
K个一组反转链表
链表如下: head -> 1, tail -> 81 -> 2 -> 3 -> 4 ->5 -> 6 -> 7 -> 8-> nullptrK = 3=> 1 -> 2 -> 5 -> 4 -> 3 -> 8 -> 7 -> 6 -> nullptr(最后一部分小于K, 则不用再反转)K = 4=>4 -> 3 -> 2 -> 1 -> 8 -原创 2020-08-02 15:37:26 · 584 阅读 · 0 评论 -
leetcode 628: maximum3 product
原题 leetcode 628第一个思路如下, 求n个数中任选3个(k个)数的最大积;需要考虑负数的情况, 可以先选出2个最大正数和最小负数(可以和求第3大数类似的思路), 然后求这2个正数, 复数的积的大者, 然后再从剩下的序列中找出最大的正整数, 相乘得到最大的3个数的积.但这个思路是特定针对k=3的; 在有负数的情况下,不适用于k为任意数字的通用思路;隔了一天, 想到了第二个思路:最大的k个数积: n个数中选任意3个, 求出积最大的那个, 实际上就等效于n个元素的集合选出k=3的子集, 然后原创 2020-07-28 23:20:41 · 176 阅读 · 0 评论 -
求子集问题
原题: leetcode这道题提供若干种解法。之所以如此, 原因是和软院同学王佳晚上的一次会话。因为一开始我写不出基于回溯思想的非递归的实现,想找王佳请教一下。聊完之后, 经受点拨, 感觉确实收益颇深!写来记录一下。解题最重要的, 是理解什么才"正向的"解题思路。 找到一个可以表示问题空间的模型,或者理解题目本身具有的性质,或者是能把问题抽象成数学或状态方程。 借助这样的理解,可能会把问题A转化成问题B. 再借助问题B有关的知识,方法去解题。以给求定集合A的所有子集问题为例,可以有好几种理解该问题的模原创 2020-07-23 18:51:56 · 1049 阅读 · 0 评论 -
N皇后问题详解
原题: leetcode 51隐式图, 状态/关系, DFS与回溯法图的DFS的搜索过程形成搜索树, 在七月君的视频及pdf里有针对图的DFS/BFS的详细过程的讲解. 注意这个讲解是针对图(邻接表实现)的结构进行的; DFS/BFS的时间复杂度都是O(n + m); (n - 节点数量, m - 边数量); 但现实解题中图的结点和边并不是一开始就明确给出的, 需要把现实问题转换成一个"隐式图"。隐式图, 需要根据问题去划分"状态"与"关系"。状态是指从初始到目标, 问题经历的中间过程; 状态一般是隐原创 2020-07-21 11:31:42 · 4170 阅读 · 0 评论 -
拓扑习题 leetcode 207 cource schedule
原题: course schedule#include <iostream>#include <vector>using namespace std;class Solution { public: struct ArchNode { int idx; struct ArchNode* next; ArchNode(int i): idx(i), next(nullptr) {} }; str.原创 2020-07-13 16:50:17 · 88 阅读 · 0 评论 -
C++ Concurrency in Actions -注解1 -附录A
C++ Concurrency in Actions Annotations - 1今年春节放假的整整二月份, 正好在家哪儿都去不了。我逼自己用流水帐的方式读完了C++ Concurrency in Action这本书。由于是粗读,现在需要做一些笔记用以消化这些知识。不是翻译网上出现过这本书的中文翻译版, 我看了一个开头, 就没看了。然后浏览了知乎上的一些评价,基本以吐槽为主。这些吐槽也符合我对这本书的直译版的印象。英文版技术书很难按章节语句本身去直译。并不是因为某些老外所说的中文准确性的问题。个人认原创 2020-05-18 18:36:43 · 322 阅读 · 0 评论 -
堆应用: 合并k个排序链表
合并k个排序链表: 合并给定k个排序链表;e.g.2->4->nullptr-4->4->5->nullptr-1->nullptr合并这3个有序的链表, 返回: -4->-1->2->4->4->5->nullptr解法思路:主要思路是建堆MinHeap。从k个链表表头取元素, 建堆, 然后heap.peek...原创 2020-03-29 23:29:21 · 163 阅读 · 0 评论 -
堆(1): 基本实现
// min-heap 10 / \ 20 100 / 30 堆定义和基本性质数组实现的二叉树; 因此它不是使用parent pointer/child pointer;它是根据"堆属性"来排序的,决定在数组中各个元素的位置;堆属性: max-heap, min-heap;堆是一颗"完全二叉树"(a complete binary tree)...原创 2020-03-28 21:49:44 · 191 阅读 · 1 评论 -
给定前序遍历和中序遍历顺序构造二叉树
先贴代码,后写解释递归:#include <iostream>#include <vector>struct node { int value; struct node* left; struct node* right; node(int val): value(val), left(nullptr), righ...原创 2020-03-21 17:34:29 · 628 阅读 · 1 评论 -
设计一个可以求最大/最小元素的队列/栈
设计一个可以求最大/最小元素的队列/栈设计队列/栈, 支持出入,求最大元素; 要求全部操作O(1)leetcode 155MinStack, leetCode 155// 这个解在提交leetcode时,// 由于测试数据样本很多很大,会出现heap-buffer-overflow, 是int值溢出了;#define MAX_INT 2147483646class MinSt...原创 2020-03-08 20:49:34 · 164 阅读 · 0 评论 -
decodeString
leetCode 394: decodeString第一个版本写的非常挫折,代码也十分混乱。比较大的收获是学会了gdb调试常规情况. 总结一些心得:先不要着急开始写;有些情况是递归方便, 有些情况是非递归方便(例如按层遍历树, 包括此题). 前提是, 如果需要递归把递归的操作拆解清楚(返回类型, 入参等); 对于递归情况和复杂的,尝试拆解手工栈的操作;对于这种明显利用栈或某种数据结构的,...原创 2020-01-09 12:34:00 · 361 阅读 · 0 评论 -
快速排序递归与非递归C++实现
快速排序基本思路对一个给定的数组, 选择一个元素, 对数组进行整理,使得位于该元素的左边的元素都比选定元素小, 右边的部分都比选定元素大或相等; 这个整理过程叫做partition; 把partition过程递归的应用到选定元素的左侧和右侧的子数组,直到子数组少于2个元素,递归结束; 整个数组变为有序的;所以问题转变成partition的实现, 给定一个数组,选一个数组中的元素, 如何整理使得...原创 2019-07-04 17:15:05 · 1146 阅读 · 0 评论