自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

原创 【LC875】爱吃香蕉的珂珂_中等

珂珂喜欢吃香蕉。这里有 n 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 h 小时后回来。珂珂可以决定她吃香蕉的速度 k (单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉 k 根。如果这堆香蕉少于 k 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉。珂珂喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。返回她可以在 h 小时内吃掉所有香蕉的最小速度 k(k 为整数)。逻辑上没有问题,但是超时了,从1开始遍历吃香蕉的速度效率低,改用二分:...

2022-06-07 17:41:36 125 1

原创 【LC929】独特的电子邮件地址_简单

每个有效电子邮件地址都由一个本地名和一个域名组成,以 ‘@’ 符号分隔。除小写字母之外,电子邮件地址还可以含有一个或多个 ‘.’ 或 ‘+’ 。如果在电子邮件地址的 本地名 部分中的某些字符之间添加句点(‘.’),则发往那里的邮件将会转发到本地名中没有点的同一地址。请注意,此规则 不适用于域名 。如果在 本地名 中添加加号(‘+’),则会忽略第一个加号后面的所有内容。这允许过滤某些电子邮件。同样,此规则 不适用于域名 。可以同时使用这两个规则。给你一个字符串数组 emails,我们会向每个 email

2022-06-04 22:03:30 290

原创 【LC450】删除二叉搜索树中的节点

给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤:...

2022-06-02 20:48:32 110

原创 【LC1022】从根到叶的二进制数之和_简单

题目给出一棵二叉树,其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数 01101,也就是 13 。对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。返回这些数字之和。题目数据保证答案是一个 32 位 整数。树中的节点数在 [1, 1000] 范围内Node.val 仅为 0 或 1题解1/** * Definition

2022-05-30 22:42:49 75

原创 【LC144】二叉树的前序遍历_简单

题目给你二叉树的根节点 root ,返回它节点值的前序遍历。题解根左右/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int v

2022-05-30 22:13:00 47

原创 【LC468】验证IP地址_中等

题目给定一个字符串 queryIP。如果是有效的 IPv4 地址,返回 “IPv4” ;如果是有效的 IPv6 地址,返回 “IPv6” ;如果不是上述类型的 IP 地址,返回 “Neither” 。有效的IPv4地址 是 “x1.x2.x3.x4” 形式的IP地址。 其中 0 <= xi <= 255 且 xi 不能包含 前导零。例如: “192.168.1.1” 、 “192.168.1.0” 为有效IPv4地址, “192.168.01.1” 为无效IPv4地址; “192.168.1

2022-05-29 22:46:00 113

原创 【LC1021】删除最外层的括号

题目有效括号字符串为空"“、”(“+A+”)"或A+B,其中A和B都是有效的括号字符串,+代表字符串的连接。例如,"","()","(())()" 和 "(()(()))" 都是有效的括号字符串。如果有效字符串s非空,且不存在将其拆分为s=A+B的方法,我们称其为原语(primitive),其中A和B都是非空有效括号字符串。给出一个非空有效字符串s,考虑将其进行原语化分解,使得:s = P_1 + P_2 + … + P_k,其中P_i是有效括号字符串原语。对s进行原语化分解,删除分解中每个原语

2022-05-28 23:02:07 43

原创 【面试题17.11】单词距离

题目有个内含单词的超大文本文件,给定任意两个不同的单词,找出在这个文件中这两个单词的最短距离(相隔单词数)。如果寻找过程在这个文件中会重复多次,而每次寻找的单词不同,你能对此优化吗?题解双指针记录两个单词出现的位置,取最小值,但需要注意的是两指针的初始值的绝对值为String数组长度的最大值,以避免某个单词出现后,在比较时导致最短距离被无意缩小class Solution { public int findClosest(String[] words, String word1, Strin

2022-05-27 10:57:59 57

原创 【LC467】环绕字符串中唯一的子字符串

题目把字符串 s 看作是 “abcdefghijklmnopqrstuvwxyz” 的无限环绕字符串,所以 s 看起来是这样的:"...zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd...." . 现在给定另一个字符串 p 。返回 s 中唯一的p的非空子串的数量 。题解失败案例暴力遍历所有子串,并利用set保证子串不重复,在遍历set中的子串并判断是否存在于环绕字符串中,结果超时class Solution { pu

2022-05-26 21:34:02 42

原创 【LC1297】子串的最大出现次数

题目给你一个字符串s,请你返回满足以下条件且出现次数最大的任意子串的出现次数:子串中不同字母的数目必须小于等于 maxLetters 。子串的长度必须大于等于 minSize 且小于等于 maxSize 。题解class Solution { /** [minSize, maxSize] 表示子串窗口的大小 */ public int maxFreq(String s, int maxLetters, int minSize, int maxSize) {

2022-05-26 16:02:24 86

原创 【LC78】子集

题目给你一个整数数组 nums ,数组中的元素互不相同。返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。你可以按任意顺序返回解集。题解方法1以[1,2,3]为例:numlenres[]11[] [1]22[],[1] [2],[1,2]34[],[1],[2],[1,2] [3],[1,3],[2,3],[1,2,3]class Solution { public List<List

2022-05-26 14:13:34 51

原创 【LC3】无重复字符的最长子串

题目给定一个字符串 s,请你找出其中不含有重复字符的最长子串的长度。s 由英文字母、数字、符号和空格组成题解方法1参考热评题解:创建数组用于记录字符上一次出现的位置beg变量用于记录无重复子串的开始位置,并保证窗口开端不会左移class Solution { public int lengthOfLongestSubstring(String s) { int[] last = new int[128]; //记录字符上一次出现的位置 for

2022-05-24 22:48:26 197

原创 【LC965】单值二叉树

题目如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。题解递归终止条件:root == null,返回true方法体:倘若当前节点的左右子节点存在且与当前节点的值不同,则给定的数不是单值二叉树,返回false/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode lef

2022-05-24 22:07:37 80

原创 【算法笔记】二叉树的路径和

LC437 路径总和Ⅲ解法一 两次递归思路:先序递归遍历每个节点 + dfs确定路径和为targetSum的路径数目int res = 0;int pathSum(TreeNode* root, int targetSum) { if(root == nullptr) return 0; dfs(root, targetSum); pathSum(root->left, targetSum); pathSum(root->right, targetSum

2021-08-04 21:17:29 126

原创 【算法笔记】回文串

LC5 最长回文子串1 枚举(超时)stringPalindrome(string s) { int len = s.length(); if(len < 2) return s; int maxlen = 1; int begin = 0; //枚举所有长度大于1的子串 for(int i = 0; i < len - 1; ++i) { //右边界 for(int j = i + 1; j <

2021-08-02 22:55:45 112

原创 【算法笔记】链表相关

LC 141环形链表注意快慢指针的使用bool hasCycle(ListNode *head) { //快慢指针 if(head == nullptr) return false; ListNode *fast = head, *slow = head; while(fast->next && fast->next->next) { /* * 在链表中只有一个节点时,快慢指针都为nullptr,返回tru

2021-07-28 22:46:24 58

原创 【算法笔记】LC72 编辑距离

题目给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符插入和删除等同1 动态规划步骤:定义二维dp方程,dp[i][j]表示word1的前i个字符转换成word2的前j个字符所使用的的最少操作数; 边界状态初始化,从空串到有i个字符的字符串所需要的经过的步骤为i; 状态转移方程: 当前字母相同:dp[i][j...

2021-07-27 18:31:40 88

原创 【算法笔记】二叉树遍历

目录1 先序遍历1.1 递归1.2 迭代2 中序遍历2.1 递归2.2 迭代3 后序遍历3.1 递归3.2 迭代1 先序遍历1.1 递归void preOrder(TreeNode* root, vector<int>& preRes) { //根左右 if(root == nullptr) return; preRes.push_back(root->val); preOrder(root->...

2021-07-27 14:04:14 122

原创 C++11_std::chrono应用demo

目录1 代码2 结果参考1 代码#include <iostream>#include <string>#include <chrono>#include <unistd.h>typedef std::chrono::high_resolution_clock Clock;typedef Clock::time_point TimeStamp;int main(){ std::chrono::hours hour_ti

2021-07-08 16:06:02 181 1

原创 HTML基础笔记及实例速查

1 样式内部样式-在html元素中使用“style”属性内部样式表-在html文档头部<head>区域使用<style>元素来包含css外部引用-使用外部CSS文件当特殊的样式需要应用到个别元素时,可以使用内联样式。背景颜色:font-family:字体color:颜色font-size:字体大小text-align:文字对齐2 图像src:存储图像的位置alt:为图像定义一串预备的可替换文本heigh

2021-07-08 11:07:34 83

原创 MySQL之正则表达式搜索

SELECT prod_name FROM products WHERE prod_name REGEXP '1000' ORDER BY prod_name; -- REGEXP后跟的东西作为正则表达式处理SELECT prod_name FROM products WHERE prod_name REGEXP '.000' ORDER BY prod_name; -- . 表示匹配任意一个字符-- 匹配不区分大小写。为区分大小写,可使用BINARY关键字SELECT prod_name F

2021-06-28 10:38:47 118

原创 MySQL基础学习笔记

前言:本文参考b站狂神说MySQL视频教程整理而得,不包含JDBC部分,仅作为学习笔记留存参考。目录1 基础1.1 什么是数据库1.2 数据库分类1.3 MySQL简介1.4 安装MySQL1.5 SQLyog1.6 基本命令2 操作数据库2.1 操作数据库(了解)2.2 数据库的列类型2.3 数据库的字段属性(重点)2.4 创建数据库表(重点)2.5 数据表的类型2.6 修改和删除表3 MySQL的数据管理3.1 外键(了解即可)3.2 DML语言(全部记住)3.3 添加3.4 修改3.5 删除4 DQ

2021-06-02 15:53:56 294

原创 chapter5 关联式容器:hashtable相关

目录1 hashtable1.1 概述1.1.1 线性探测1.1.2 二次探测1.1.3 开链1.2 hashtable的buckets和nodes1.3 hashtable的迭代器1.4 hashtable的数据结构1.5 hashtable的构造与内存管理1.5.1 插入与表格重整1.5.2 判知元素的落脚处(bkt_num)1.5.3 复制和整体删除1.5.4 应用实例1.6 hash functions2 hash_set3 hash_map4 hash_multiset&hash_mult

2021-06-02 13:18:17 134

原创 chapter5 关联式容器:树&红黑树

目录1 关联式容器2 树2.1 二叉树2.2 二叉搜索树2.3 平衡二叉搜索树2.4 AVL tree2.4.1 定义2.4.2 单旋转2.4.3 双旋转3 RB-tree(红黑树)3.1 特性3.2 插入节点3.3 一个由上而下的程序3.4 RB-tree的节点设计3.5 RB-tree的迭代器3.6 RB-tree的数据结构3.7 RB-tree的构造与内存管理3.8 RB-tree的元素操作3.8.1 元素插入3.8.2 元素的搜寻1 关联式容器所谓关联式容器,观念上类似关联式数据库(实际上则简

2021-05-27 22:38:51 140

原创 muduo学习笔记:chapter2&3 线程同步及多线程

目录chapter2 线程同步精要1 互斥器1.1 只使用不可重入锁(非递归锁)1.2 死锁2 条件变量3 不要使用读写锁和信号量4 封装MutexLock、MutexLockGuard、Condition5 小结6 借shared_ptr实现copy-on-writechapter3 多线程服务器的适用场合与常用编程模型1 进程与线程2 单线程服务器的常用编程模型3 one loop per thread4 进程间通信只用TCP4.1 TCP sockets与pipe4.2 分布式系统中使用TCP长连接通

2021-05-26 21:07:06 154

原创 chapter4 序列式容器:slist

目录@[TOC](目录)1 概述2 slist的节点和迭代器3 slist的数据结构4 slist的元素操作1 概述STL list是个双向链表。SGI STL另提供了一个单向链表(single linked list),名为slist。它和list的主要区别在与slist的迭代器属于单向的Forward Iterator,后者的迭代器属于双向的Bidirectional Iterator。它和list的共同具有的一个特点:它们的插入、移除、接合等操作不会造成原有迭代器的失效。根据STL的习惯,插

2021-05-25 21:05:27 170

原创 chapter4 序列式容器:priority_queue

目录1 概述2 定义完整列表3 priority_queue没有迭代器4 示例1 概述priority_queue带有权值观念,其内的元素并非依照被推入的次序排列,而是自动依照元素的权值排列(通常权值以实值表示)。权值最高者,排在最前面。缺省情况下,priority_queue系利用一个max-heap完成,后者是一个vector表现的complete binary tree。max-heap可以满足priority_queue所需要的“依权值高低自动递增排序”的特性。2 定义完整列表prio

2021-05-25 19:23:19 95

原创 chapter4 序列式容器:heap

目录1 heap1.1 概述1.1.1 priority queue底层机制的选择分析1.1.2 binary heap1.1.3 heap的分类1.2 heap算法1.2.1 push_heap1.2.2 pop_heap1.2.3 sort_heap1.2.4 make_heap2 priority_queue2.1 概述2.2 定义完整列表2.3 priority_queue没有迭代器2.4 示例1 heap1.1 概述heap并不是归属于STL容器组件,它是个幕后英雄,扮演priority

2021-05-25 19:21:48 133

原创 muduo学习笔记:chapter1 线程安全的对象生命周期管理

目录1 MutexLock与MutexLockGuar2 空悬指针3 智能指针3.1 shared_ptr3.2 weak_ptr3.3 关键点4 C++可能出现的内存问题4.1 类型4.2 解决思路5 智能指针的应用6 shared_ptr的线程安全7 shared_ptr技术与陷阱7.1 意外延长对象的生命期7.2 函数参数7.3 析构动作在创建时被捕获7.4 析构所在的线程7.5 现成的RAII机制8 对象池8.1 enabled_shared_from_this8.2 弱回调8.3 完整的Stock

2021-05-18 20:59:03 252

原创 chapter5 关联式容器:set与map

目录1 map的特性1 map的特性 所有元素会根据元素的键值自动被排序。 map的所有元素都是pair,同时拥有实值(value)和键值(key)。pair的第一元素被视为键值,第二元素被视为实值。 //pair定义template<class T1, class T2>struct pair { typedef T1 first_type; typedef T2 second_type; T1 first; ...

2021-05-17 21:35:13 72

原创 C++知识点查漏补缺(待续ing)

目录1. 空悬指针和野指针空悬指针野指针解决措施参考:1. 空悬指针和野指针空悬指针定义:指向已经销毁的对象或已经回收的地址的指针。影响:当对象被析构、删除时,如果指向它的指针没有被同时修改,那么指针指向的仍是原来的内存地址,若系统此时重新分配这块free掉的内存,就可能会有不可预见的事情发生。char *ptr = (char*)malloc(sizeof(char));free(ptr); //释放动态分配的内存,ptr为空悬指针ptr = MULL; //修改ptr指向野指针定义:

2021-05-17 16:34:25 68

原创 《深度探索C++对象模型》chapter4:Function语意学

目录1 Member的各种调用方式1.1 非静态成员函数1.2 虚拟成员函数1.3 静态成员函数2 虚拟成员函数2.1 单一继承下的虚函数2.2 多重继承下的虚函数2.3 虚拟继承下的虚函数3 指向成员函数的指针4 内联函数1 Member的各种调用方式1.1 非静态成员函数C++的设计准则之一:nonstatic member function至少必须和一般的nonmember function有相同的效率。//Point3d::magnitude()float Point3d::magnitu

2021-05-14 20:18:29 121

原创 《深度探索C++对象模型》chapter3:Data语意学

目录1 虚继承2 Data Member的布局3 Data Member的存取3.1 static data member3.2 nonstatic data member4 “继承”与data member4.1 只要继承不要多态4.2 加上多态4.3 多重继承1 虚继承class X {};class Y: public virtual X {};class Z: public virtual X {};class A: public Y, public Z {};继承关系:X是空类

2021-05-13 22:29:44 123

原创 《深度探索C++对象模型》chapter1:关于对象

目录前言什么是C++对象模型?1 关于对象1.0 加上封装后的布局成本1.1 C++对象模式1.1.1 派生类如何模塑其基类实例?1.2 C++中的多态1.3 需要多少内存以表现一个class object?1.4 class的object布局和pointer布局1.5 OO与OB前言什么是C++对象模型?语言中直接支持面向对象程序设计的部分对于各种支持的底层实现机制1 关于对象1.0 加上封装后的布局成本成员函数不占用类对象的内存空间一个类对象至少占用1个字节的内存空间成

2021-05-10 19:30:39 118

原创 chapter4 序列式容器:stack&queue

目录1stack1.1 概述1.2 stack定义完整列表1.3 stack没有迭代器1.4 以list作为stack的底层容器2 queue2.1 概述2.3 queue没有迭代器2.4 以list作为queue的底层容器1stack1.1 概述stack是一种先进后出(First In Last Out, FILO)的数据结构。它只有一个出口。stack允许新增元素、移除元素、取得最顶端元素。但除了最顶端外,没有任何其他办法可以存取stack的其他元素。换言之,stack不允许遍历行为。pu

2021-04-23 22:18:57 80

原创 chapter4 序列式容器:deque

目录1 deque概述2 deque的中控器3 deque的迭代器3.1 迭代器结构3.2 迭代器操作4 deque的数据结构5 deque的构造与内存管理5.1 deque的构造5.2 push_back()与push_front()5.3 map的重新整治6 deque的元素操作6.1 pop_back()和pop_front()6.2 clear()6.3 erase()6.4 insert()1 deque概述vector是单向开口的连续线性空间,deque则是一种双向开口的连续线性空间。所谓双

2021-04-21 21:33:56 93

原创 chapter4 序列式容器:list

目录1 list1.1 与vector的区别1.2 list的节点1.3 list的迭代器1.3.1 list迭代器的设计1.4 list的数据结构1.5 list的构造与内存管理1.6 list的元素操作1.6.1 push_front()和push_back()1.6.2 erase()1.6.3 pop_front()和pop_back()1.6.4 clear()1.6.5 remove()1.6.6 unique()1.6.7 迁移操作transfer()1.6.8 接合操作splice()1.6

2021-04-20 20:12:18 115

原创 chapter4 序列式容器:vector

目录1 前言2 vector2.1 与array的区别2.2 vector的迭代器2.3 vector的数据结构2.4 vector的构造与内存管理2.4.1 定义data_allocator进行空间配置2.4.2 提供允许指定空间大小及初值的constructor2.4.3 push_back()2.5 vector的元素操作:pop_back,erase,clear,insert2.5.1 pop_back2.5.2 erase2.5.3 clear2.5.4 insert1 前言序列式容器:其中

2021-04-20 20:07:02 95

原创 chapter3 迭代器概念与traits编程技法

目录1 迭代器设计思维——STL关键所在2 迭代器是一种smart pointer3 迭代器相应型别(associated types)4 Traits编程技法——STL源代码门钥4.1 Partial Specialization(偏特化)的意义4.2 traits编程技法1 迭代器设计思维——STL关键所在STL的中心思想在于:将容器(containers)和算法(algorithms)分开,彼此独立设计,然后使用迭代器(iterators)将它们撮合在一起。可使用class template和

2021-04-08 19:30:24 112

原创 chapter2 空间配置器allocator

目录1 placement new2 配置器定义3 构造和析构的基本工具:construct和destory函数4 空间的配置与释放:std::alloc5 第一级配置器__malloc_alloc_template6 第二级配置器__default_alloc_template6.1 free-lists的节点构造(union联合体)6.2 自由链表free_list6.3 相关函数6.3.1 空间配置函数allocate()6.3.2 空间释放函数deallocate()6.3.3 重新填充free l

2021-04-07 21:21:10 78

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除