日常学习
文章平均质量分 59
ontheway12138
这个作者很懒,什么都没留下…
展开
-
花式遍历二叉树
左神介绍的遍历二叉树的花式方法#include<iostream>#include<stack>#include<queue>using namespace std;struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};/*struct Comm原创 2022-03-22 22:22:33 · 593 阅读 · 0 评论 -
花式排序大集合
#include<iostream>#include<vector>#include<algorithm>#include<random>#include<ctime>using namespace std;void bubbleSort(vector<int> &nums){ // 冒泡排序 for(int i=0; i<nums.size()-1; ++i) for(in.原创 2022-03-22 22:18:42 · 178 阅读 · 0 评论 -
重构:改善既有代码的设计 读书笔记
基本定义:重构(名词)是在不改变软件外在行为的前提下改善其内部结构。提高可理解性,降低修改成本。重构(动词)是使用一系列重构手法,在不改变软件外在行为的前提下,调整其结构。第一章 如果你需要为程序添加一个新功能,而现有的代码结构使你无法很方便地达成目的,那就需要先重构现有的代码结构。 重构之前,首先检查自己是否有一套可靠的测试机制。这些测试必须有自我检验能力。 重构技术就是以微小的步伐修改程序。如果你放下错误,很容易便可以发现它。 第二章重构的时机: ..原创 2021-08-13 11:48:43 · 221 阅读 · 0 评论 -
矩阵快速幂 —— 商汤笔试第三题
题目描述,如果没有 这样的限制的话,这题属于一个 easy 的一道题。先根据公式计算出对应的矩阵然后就是矩阵快速幂的套路了,在这里总结一下,后面可以算的快一些#include <bits\stdc++.h>using namespace std;typedef long long ll;typedef vector<ll> vec;typ...原创 2019-08-20 15:29:07 · 294 阅读 · 0 评论 -
并查集,实现简单,功能强大
并查集中,只需要实现最简单的 getFather(Node) 以及 unionNode(Node, Node) 就能使用了。在处理是否联通问题里面,特别好用,写一下基本实现过程, MARK 一下主要有一个 faMap 来存储每个节点的父节点,可以为哈希表,也可以为 vector在节点为 int 型,并且元素范围固定的情况下,vector 更高效sizeMap 同理,存储每个...原创 2019-07-28 10:06:32 · 258 阅读 · 1 评论 -
C++ 实现 LRU 缓存机制,以及 采用模板的 LRU
LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。LeetCode 原题链接思路,主要涉及到查找和更新,采用双向链表加 unordered_map 可以把时间复杂度降为 O(1)其中,双向链表可以自己实现,也可以采用 STL 中的 list ,其中 list 里面有封装好的实现,可以精简代码自己实现,...原创 2019-07-25 16:00:26 · 1426 阅读 · 4 评论 -
C++ 中,二分查找的 API, lower_bound 和 upper_bound 的用法
总是记混这两个查找方法,今天写篇博客 MARK 一下。lower_bound 查找的为 第一个大于等于当前查找数的位置;upper_bound 查找的为 第一个严格大于当前查找数的位置。若查找元素不存在,则两个方法返回同样的位置。#include <bits\stdc++.h>using namespace std;int main(){ vec...原创 2019-07-30 12:32:08 · 667 阅读 · 0 评论 -
【剑指 Offer】N个骰子的点数问题 题解再优化 C++ 代码优乐美
话不多说,先放代码#include<iostream>#include<vector>#include<math.h>#include<algorithm>#include<numeric> // for accumulateusing namespace std;int main(){ int n; ...原创 2019-06-07 10:03:44 · 224 阅读 · 0 评论 -
The split in C++ C++ 中 split 函数的三种实现方式及对比
第一种,较为全能的实现方式, strtok 实现,其中也借助了 strcpy 所以要包含头文件 <cstring> ,代码如下vector<string> split(string& str, string& delim){ vector<string> arr; // strtok 实现 if(str == ...原创 2019-05-26 10:00:19 · 506 阅读 · 2 评论 -
LeetCode 115. 不同的子序列 从暴力递归到动态规划,从动态规划到优化
在 LeetCode 上刷题刷到了一道 Hard 的题 115. 不同的子序列 ,用暴力递归的话,逻辑其实很好写,就是复杂度太高,测试用例复杂一些就直接GG,我就采用了牛客左程云左神的思想,将暴力递归改成动态规划,并通过评论区大神的思路将正向的动态规划进行优化变成逆向的动态规划。记录一下,进一步加深对动态规划的理解。---------------------------------------...原创 2019-05-07 11:22:26 · 442 阅读 · 1 评论 -
extern "C" 用法 以及编译过程
extern "C" 主要用来C++ 文件和C 语言文件的互相调用建立3个文件 cExample.h 头文件#ifndef C_EXAMPLE_H#define C_EXAMPLE_Hextern int add(int x, int y);#endifcExample.c 文件#include "cExample.h"int add(int x, int ...原创 2019-04-29 19:25:32 · 352 阅读 · 0 评论