leetcode&&剑指offer
文章平均质量分 53
leetcode&&剑指offer记录
selfsongs
现实生活的艰苦,像一捆粗糙的绳子,紧紧的捆住她像捆住天使。天使却从绳索中飞出来,轻轻落在绳索上,唱她应该唱、想唱的歌
展开
-
unordered_map、unordered_set底层哈希表的实现机理
unordered_map、unordered_set底层哈希表的实现机理哈希表哈希函数哈希冲突哈希表数组的特点是:寻址(查询)容易,插入和删除困难;链表的特点是:寻址(查询)困难,插入和删除容易。那么我们能不能综合两者的特性,做出一种寻址(查询)容易,插入删除也容易的数据结构,答案是肯定的,这就是我们要提起的哈希表 。hash函数就是根据key计算出应该存储地址的位置,地址index=H(key),而哈希表是基于哈希函数建立的一种查找表。哈希函数哈希函数的四个性质:原创 2021-11-10 23:53:30 · 2458 阅读 · 0 评论 -
最小路径和
最小路径和最小路径和动态规划带备忘录的递归最小路径和64. 最小路径和给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。动态规划设f(m,n)为左上角到点(m,n)的最小路径和则状态转移方程dp(m,n)=grid(m,n) + min{dp(m,n-原创 2021-11-10 23:43:31 · 156 阅读 · 0 评论 -
区间dp问题
区间dp问题区间DP概念思路+模板例题1.石子合并直线版NOI1995 石子合并参考:区间DP题型总结全网最最最最最详细的区间dp题目总结!!https://blog.csdn.net/noiau/article/details/72514812区间DP概念区间DP是线性DP的扩展,分阶段地划分问题,与阶段中元素出现的顺序和由前一阶段的哪些元素合并而来有很大的关系。状态转移方程:dp[i][j]=min{dp[i][k]+dp[k+1][j]}+cost[i][j]或者dp[i][j]=转载 2020-11-24 10:56:57 · 902 阅读 · 0 评论 -
求树中两个节点的最低公共祖先节点
最低公共祖先原创 2020-11-24 10:54:37 · 195 阅读 · 0 评论 -
买卖股票问题
买卖股票问题买卖股票问题I122. 买卖股票的最佳时机 II买卖股票问题I121. 买卖股票的最佳时机给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能转载 2020-09-24 22:47:42 · 498 阅读 · 0 评论 -
素数相关习题
素数相关习题判断素数找出1~n内所有的素数素数相关的面试题判断素数素数:只能被1和他本身整除的数因为如果能找到两个因子相乘等于n的话,那么这两个数一定是位于sqrt(n)的两边的,所以我们只用判断[2,sqrt(n)]之间是否有数能够整除n即可判断bool isPrime(int n){ if(1==n) return true; for(int i=2;i<=sqrt(n);i++){ if(n%i==0) return false;原创 2020-08-27 11:00:03 · 286 阅读 · 0 评论 -
动态规划之零钱兑换
零钱兑换问题带备忘录的递归解法动态规划解法模拟0 1完全背包问题的解法322. 零钱兑换给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。示例 1:输入: coins = [1, 2, 5], amount = 11输出: 3解释: 11 = 5 + 5 + 1示例 2:输入: coins = [2], amount = 3输出: -1说明:你可以认为每种硬币的数量是无限原创 2020-08-20 15:08:49 · 564 阅读 · 0 评论 -
约瑟夫环问题
约瑟夫环问题模拟约瑟夫环问题循环数组模拟链表模拟数学分析模拟约瑟夫环问题循环数组模拟经典算法–约瑟夫环问题的三种解法问题描述:N个人围成一圈,从第一个人开始从1开始报数,报到m的人出圈,剩下的人继续从1开始报数,报到m的人出圈;如此往复,直到所有人出圈。(模拟此过程,输出出圈的人的序号)循环的开始和结束:循环的结束取决于圈内是否还有“人”,可以用一个变量alive表示初始人数,每一次出圈,alive - 1。判断alive是否非0即可。while(alive > 0)每一次循环,就是转载 2020-08-20 14:39:15 · 187 阅读 · 0 评论 -
C/C++字符串处理相关总结
字符串处理相关清空字符串区域复制字符串区域搜索字符串相关字符串转整型字符串转浮点型整型转字符串清空字符串区域memset()char* m_buf = new char[10]; memset(m_buf, '\0', 10);bzero()复制字符串区域strcpy()搜索字符串相关strrchr字符串转整型atoi字符串转浮点型atofatod整型转字符串snprintf...原创 2020-08-20 14:34:15 · 492 阅读 · 0 评论 -
实现字符串反转
字符串反转零.标准库提供的函数一.自己实现的字符串反转二.字符串中单词反转零.标准库提供的函数使用algorithm中的reverse函数#include <iostream>#include <string>#include <algorithm>using namespace std; int main(){ string s = "hello"; reverse(s.begin(),s.end()); cout<<原创 2020-08-02 20:05:34 · 481 阅读 · 0 评论 -
字符串转数字,数字转字符串
字符串转整数,整数转字符串atoiatofatodsprintf函数atoiatofatodsprintf函数头文件:#include <stdio.h>sprintf()函数用于将格式化的数据写入字符串,其原型为:int sprintf(char *str, const char *format, ...) 【参数】str – 这是指向一个字符数组的指针,该数组存储了 C 字符串。format – 这是字符串,包含了要被写入到字符串 str 的文本。它可以包含嵌入的 f原创 2020-07-27 00:17:16 · 11356 阅读 · 0 评论 -
二叉树的序列化与反序列化
二叉树的序列化与反序列化原创 2020-07-25 23:42:42 · 145 阅读 · 0 评论 -
动手实现一个string类
实现一个string类原创 2020-07-16 23:04:34 · 207 阅读 · 0 评论 -
二分查找总结
二分查找总结怎么写二分查找**关键点:**动手写二分查找相关例题旋转数组的最小数字爱吃香蕉的珂珂二分查找要求:线性表是有序表,即表中结点按关键字有序,并且要用向量作为表的存储结构。适用情况二分查找只适用顺序存储结构。为保持表的有序性,在顺序结构里插入和删除都必须移动大量的结点。因此,二分查找特别适用于那种一经建立就很少改动、而又经常需要查找的线性表。对那些查找少而又经常需要改动的线性表,可采用链表作存储结构,进行顺序查找。链表上无法实现二分查找。怎么写二分查找求下界问题:1.求大于等于tar原创 2020-07-15 17:17:49 · 278 阅读 · 0 评论 -
二叉树转链表
二叉树转链表二叉树转单链表leetcode 114. 二叉树展开为链表二叉树转双向链表二叉树转单链表leetcode 114. 二叉树展开为链表https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list/给定一个二叉树,原地将它展开为一个单链表。例如,给定二叉树 1 / \ 2 5 / \ \3 4 6将其展开为:1 \ 2 \ 3 \原创 2020-07-08 00:20:39 · 3163 阅读 · 3 评论 -
二叉搜索树的第k个结点
二叉搜索树的第k个结点leetcode 230. 二叉搜索树中第K小的元素剑指offer_面试题54总结leetcode 230. 二叉搜索树中第K小的元素https://leetcode-cn.com/problems/kth-smallest-element-in-a-bst/给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。说明:你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。提供的函数接口如下:/** * Definition原创 2020-07-07 16:06:54 · 676 阅读 · 0 评论 -
位运算相关例题
利用“异或”处理数组的相关算法异或运算寻找数组中丢失的数找出数组中两个只出现一次的数字有N+2个数,N个数出现了偶数次,2个数出现了奇数次(这两个数不相等)异或运算异或是一种基于二进制的位运算,用符号XOR或者 ^ 表示。运算时对运算符两侧的数转化为二进制形式,同值取0,异值取1。异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位。性质1、原创 2020-06-16 18:17:06 · 393 阅读 · 0 评论 -
位图总结
位图位图位图实现位图位图BitMap:位图是一个数组,数组中的每一个数据元素的每一个二进制位表示一个数据,0表示数据不存在,1表示数据存在。如上所示,当我们需要存放一个数据的时候,我们需要安装以下方法:首先确定这个数字在整个数据的哪一个数据(区间)。确定这个数据(区间)的哪一个Bit位上。在这个位上置1即可。举例假设我们要对0-7内的5个元素(4,7,2,5,3)排序(这里假设这些元素没有重复)。那么我们就可以采用Bit-map的方法来达到排序的目的。要表示8个数,我们就只需要8个B原创 2020-06-13 17:33:24 · 254 阅读 · 0 评论 -
内存对齐相关问题总结
海量数据处理 位图 布隆过滤器原创 2020-06-11 20:34:59 · 860 阅读 · 0 评论 -
重建二叉树&&二叉树的下一个节点
重建二叉树题目题目输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树,假设输入的前序遍历和中序遍历的结果中都不含重复的数字。struct BinaryTreeNode{ int value; BinaryTreeNode* left; BinaryTreeNode* right;}前序序列遍历确定root由root去将中序遍历序列一分为二,左边numsLeft个,右边numsRight则前序遍历的左子树[root+1,root+numsLeft-1],右子树[ro原创 2020-06-02 23:44:23 · 163 阅读 · 0 评论 -
排序算法之mergeSort,quikSort,heapSort
排序算法之归并排序,快速排序,堆排序原创 2020-05-28 14:24:04 · 518 阅读 · 0 评论 -
set、multiset和map、multimap的使用
set、multiset和map、multimap的使用关联式容器主要有四种:set,map,multiset,multimapset头文件初始化插入遍历查找参考:https://www.cnblogs.com/Solstice/archive/2013/01/20/2868455.htmlhttps://blog.csdn.net/changjiale110/article/details/79108447?utm_medium=distribute.pc_relevant.none-task-blo原创 2020-05-28 14:14:07 · 367 阅读 · 0 评论 -
排序算法之bubbleSort,selectSort,insertSort,shellSort
温习冒泡排序选择排序插入排序温习关于稳定性稳定的排序算法:冒泡排序、插入排序、归并排序和基数排序。不是稳定的排序算法:选择排序(示例【2 3 2 1】)、快速排序(示例【3 1 2 3 5 4】主元2)、希尔排序(示例【】)、堆排序(示例【3 2 3 2】最小堆)。冒泡排序冒泡排序算法是最简单的排序算法,它的执行效率最低,但冒泡排序算法既适用于顺序物理结构也适用于链式物理结构数组的冒泡排序#include<iostream>#include<vector>.原创 2020-05-28 01:39:57 · 242 阅读 · 0 评论 -
链表类练习题
@TOC单链表双链表习题原创 2020-05-28 01:32:46 · 166 阅读 · 0 评论 -
单链表、双链表
单链表单向环形链表双链表双向环形链表单链表参考:https://www.jianshu.com/p/a43a5046399f 链表是以节点的方式来存储,是链式存储每个节点包含 data 域, next 域:指向下一个节点.链表分带哨兵节点的链表和没有哨兵节点的链表,根据实际的需求来确定操作:增删改查,清空所有内存结点结构体的定义:定义了结点之后,我们就可以把若干个结点连接在一起,形成一个链表:没有哨兵结点:带哨兵结点有时候为了操作方便,我们还会给链表增加一个不存放数据的头结.转载 2020-05-28 01:31:15 · 5901 阅读 · 0 评论 -
二叉堆实现优先队列和堆排序
二叉堆优先队列二叉堆二叉堆是一棵完全二叉树,树上的每一个节点对应数组的每个元素。除了最底层外,该树是完全充满的,而且是从左向右填充。满足两个性质:1)堆中任意节点的值总是大于或小于其子节点的值;2)堆是一棵完全树。二叉堆又被称为优先队列,任意节点不大于其子节点的堆称为最小堆或最小优先队列,反之称为最大堆或最大优先队列。一般用数组存储,且数组下标0的位置不存数据,直接从1开始优先队列优先级队列在插⼊或者删除元素的时候,需要调整元素位置, 保证底层二叉堆的性质优先级队列有两个主要 API.原创 2020-05-26 16:18:23 · 304 阅读 · 0 评论 -
unordered_map、unordered_set使用
实现机理unordered_map内部实现了一个哈希表,也叫散列表,通过把关键码值映射到Hash表中一个位置来访问记录,查找的时间复杂度可达到O(1),其在海量数据处理中有着广泛应用。因此,其元素的排列顺序是无序的。待补充:使用示例参考:http://c.biancheng.net/view/530.html基本:初始化,增删改查;头文件#include < unordered_map >类模板template < class Key,原创 2020-05-25 00:02:11 · 909 阅读 · 1 评论 -
二叉树类习题
@TOC框架对于任何数据结构, 其基本操作⽆⾮遍历 + 访问, 再具体⼀点就是: 增删查改各种数据结构的遍历 + 访问⽆⾮两种形式: 线性的和⾮线性的。线性就是for/while 迭代为代表, ⾮线性就是递归为代表。⼆叉树算法的设计的总路线:明确⼀个结点需要做啥,左右指针怎么变,其他的交给递归...原创 2020-05-20 22:38:49 · 160 阅读 · 0 评论