自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 关于基础排序

比较相邻元素:首先比较数组中的相邻两个元素。如果第一个比第二个大,则交换这两个元素的位置。这样,较大的数就会逐渐“浮”到数组的末尾。多轮比较:接下来,对数组进行下一轮比较,从开始到结尾,但排除已经排序好的最大数。这一轮中,较大的数会被继续交换到数组的末尾。重复过程:持续进行上述步骤,直到整个数组有序排列。

2024-08-15 15:04:40 323

原创 一些常见基础

begin为指向待sort()的数组的第一个元素的指针,end为指向待sort()的数组的最后一个元素的下一个位置的指针,cmp参数为排序准则,cmp参数可以不写,如果不写的话,默认从小到大进行排序。如果我们想从大到小排序可以将cmp参数写为greater()就是对int数组进行排序,当然中我们也可以写double、long、float等等。如果我们需要按照其他的排序准则,那么就需要我们自己定义一个bool类型的函数来传入。// 创建一个二维vector// 按每行的第一个数进行排序。

2024-08-01 21:07:53 738

原创 啥叫格雷码,格雷码的生成与转换

在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码。生成方法:这种方法基于格雷码是反射码的事实,利用递归的如下规则来构造: 1位格雷码有两个码字 (n+1)位格雷码中的前2n个码字等于n位格雷码的码字,按顺序书写,加前缀0 (n+1)位格雷码中的后2n个码字等于n位格雷码的码字,按逆序书写,加前缀1 n+1位格雷码的集合 = n位格

2022-01-08 18:09:37 5908

原创 并查集原理及优化

解决的问题:查询两个样本是否在同一个集合中,并且合并两个样本集合。是上述两个问题的复杂度都是O(1)原理检查的主旨在于看最头上是不是一个元素合并的主旨在于改变少的头的指向对n个节点设置n个对应的指针,初始化时每个指针指向自己。检查两个元素是否属于一个集合:通过将两个原元素往上指到不能再往上,如果两个元素的头头不是一个元素那么这两个元素不属于同一个集合。以现在的a,b为例:a往上到不能再往上是a,b往上到不能再往上是b;合并两个元素所在集合:将两个元素往上到不能再往上,将元素.

2021-12-17 11:35:28 223

原创 function函数封装

function函数封装std::function是一种通用、多态的函数封装,它的实例可以对任何可以调用的目标实体进行存储、复制和调用操作,它也是对 C++中现有的可调用实体的一种类型安全的包裹(相对来说,函数指针的调用不是类型安全的),简而言之,std::function就是函数的容器。#include<iostream>#include<functional>int foo(int x, int y){ return x+y;}int mai...

2021-12-15 20:19:30 5215

原创 没有名字的临时函数(匿名函数)

Lambda 函数与表达式C++11 提供了对匿名函数的支持,称为 Lambda 函数(也叫 Lambda 表达式)。Lambda 表达式把函数看作对象。Lambda 表达式可以像对象一样使用,比如可以将它们赋给变量和作为参数传递,还可以像函数一样对其求值。Lambda 表达式本质上与函数声明非常类似。Lambda 表达式具体形式如下:[capture](parameters)->return-type{body};[函数对象函数](操作符重载函数参数) mutable 或 exc

2021-12-15 20:18:43 439

原创 图题目总结

目录一:喧闹与富有方法一:拓扑排序:方法二:深度搜索一:喧闹与富有851. 喧闹和富有 - 力扣(LeetCode) (leetcode-cn.com)https://leetcode-cn.com/problems/loud-and-rich/方法一:拓扑排序:构造由富人指向穷人的图,并统计每一个人有多少上级邻居(多少和自己直接相邻的富人)首先根据图选择最富的那批人,也就是没有入度的点,将这些点放入队列中,与此同时这些点对应的结果也是知道的,就是它本身(因为没有比它们有钱的

2021-12-15 19:30:17 446

原创 贪心算法题目总结

1:课程选择问题630. 课程表 III - 力扣(LeetCode) (leetcode-cn.com)https://leetcode-cn.com/problems/course-schedule-iii/class Solution {public:bool compare(int a,int b){ return a<b;} int scheduleCourse(vector<vector<int>>& courses) {

2021-12-14 11:37:48 938

原创 属实折磨的下棋题目,离大谱

794. 有效的井字游戏 - 力扣(LeetCode) (leetcode-cn.com)https://leetcode-cn.com/problems/valid-tic-tac-toe-state/submissions/class Solution {public://题目要求是判断是否有可能达到给出的字符串数组形式。//可以返回true的:只有三种结果:玩家1获胜,玩家2获胜,还没有人获胜//可以返回false的,要不就是数字差值有问题,要不就是有人赢了但是还没有停手继续下//对于有

2021-12-13 19:08:00 451

转载 关于二分查找函数的使用,以及sort排序函数

关于lower_bound( )和upper_bound( )的常见用法_brandong-优快云博客_lower_boundhttps://blog.youkuaiyun.com/qq_40160605/article/details/80150252lower_bound( )和upper_bound( )都是利用二分查找的方法在一个排好序的数组中进行查找的。在从小到大的排序数组中,lower_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于或等于n

2021-12-11 18:34:22 210

原创 基础提升*哈希函数与哈希表

3:布隆过滤器(黑名单的查询与建立)可能会误杀但是不会错过,在建立黑名单时,首先建立一个m大小bit的位图空间,将待处理url通过k个哈希函数,将得到的k个哈希值进行模m计算,然后将对应位置bit“描黑”,在对一个待判断的url进行判断是判断得到的k个哈希值模计算后的格子是否都为黑,如果有不为黑的那么就不存于黑名单中。所以通过这种方式不会错过但有可能误杀。需要调整的参数时k和mm越大失误率越小。但k的大小应该根据m的大小和样本数量改变,而不是单纯的越大或者越小就更好。...

2021-12-09 18:15:02 777

原创 暴力递归尝试

1:汉诺塔问题​​​​​面试题 08.06. 汉诺塔问题 - 力扣(LeetCode) (leetcode-cn.com)https://leetcode-cn.com/problems/hanota-lcci/class Solution {public:void zhuanYi(int i,vector<int>&from,vector<int>&other,vector<int>&to){ if(i==1){int di

2021-12-03 17:26:28 1394

原创 auto x与auto &x

auto:用来声明自动变量。它是存储类型标识符,表明变量(自动)具有本地范围auto让编译器通过初始值来推算变量的类型auto常见于for循环(以string s为例)1:for(auto x:s)表示对s中逐个元素的复制引用(类似于将数据结构传入void函数中不加“&”)这表明对x操作并不会影响s中逐个元素的值string s = "hello";for (auto i : s ){i = toupper(i);} //改变成大写,不影响s的值cout<&.

2021-11-27 19:43:51 1389

原创 N皇后问题

51. N 皇后 - 力扣(LeetCode) (leetcode-cn.com)https://leetcode-cn.com/problems/n-queens/submissions/目录方法一:采用深度探索与递归的方法进行选择方法二:使用数字的位信息方法一:采用深度探索与递归的方法进行选择可取之处是将判断与遍历拆分成为两个子函数,这样有利于增加可读性。同时使用一维向量xi记录第几行的皇后放在第几个位置上。同时应该注意关于数据结构(队列,栈,向量,哈希表)作为参数传入函数时

2021-11-26 18:06:57 589

原创 返回数据流的中位数

建立大根堆和小根堆。1:比较当前数与大根堆的堆顶的大小。如果当前数<=大根堆堆顶,将当前数放进大根堆 > ,将当前数放进小根堆2:比较大根堆的size和小根堆的size,如果较大的比较小的多2,那么将size较大的堆的堆顶放进另一个堆。3:在将所有的数据处理完成后,得到的中位数就是大小根堆的堆顶的平均数(数据个数为偶数的前提下),否则为size大的堆的堆顶(数据个数为奇数)...

2021-11-25 22:14:03 129

原创 图*深度遍历(栈,注意拿出来再放进去的小地方)*层序遍历(队列)**拓扑排序(队列和入度数组)**最小生成树的三种算法*

图的层序(宽度优先)遍历:建立队列和一张hashset,从一个点开始,将点放在队列里面和哈希表中。将该点从队列中处理弹出。选择与此点联通的点检查这些点在哈希表中是否被记录过,将没有被记录过的联通点都放在队列和哈希表中。(建立哈希表的目的就在于避免重复处理)弹出队列top的点并重复处理(检查,放入,弹出~~~~)图的深度优先遍历:(逮着一条路走到黑)使用栈和hashset实现:(先处理后弹出)建立栈和一张hashset,从一个点开始,将点处理后放在栈里面和哈希表中。将该

2021-11-20 20:24:44 1254

原创 二叉树题目*公共祖先**后继节点**折纸问题*

二叉树的公共祖先节点:236. 二叉树的最近公共祖先 - 力扣(LeetCode) (leetcode-cn.com)https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree/首先建立一张哈希表记录全图的父子关系,子为索引,对应的为父。根据上面建立的哈希表建立关于节点1的“族谱”...

2021-11-17 12:33:53 4258

原创 2021-11-15*树形DP的思路**搜索二叉树**完全二叉树**满二叉树**平衡二叉树*

1:判断是否为搜索二叉树(左子节点<根<右子节点)方法:中序遍历判断是否为递增序列!2:判断是否为完全二叉树(前面层都是满的,即使最后一层不满也是从左到右依次的)方法:宽度遍历1:任一结点有右无左返回false2:在1不违规的条件下: 如果遇到了第一个左右子节点不全的情况(有左无右或者有右无左或者左右皆无)则后面的节点都是叶节点(无子)...

2021-11-16 22:12:23 467

原创 2021-11-14*二叉树* *深度遍历与宽度遍历* *栈* *队列*

目录二叉树的深度遍历三种遍历方法(采用递归实现)非递归实现:(栈)二叉树的宽度(按层)遍历二叉树的深度遍历深入学习二叉树(一) 二叉树基础 - 简书 (jianshu.com)https://www.jianshu.com/p/bf73c8d50dc2三种遍历方法(采用递归实现)先序:头左右中序:左头右后序:左右头/*二叉树的前序遍历递归算法*/void PreOrderTraverse(BiTree T){ if(T==NULL) ..

2021-11-14 19:45:49 625 1

原创 2021-11-14*链表*

判断链表有无环,并且找到入环节点:方法一:走一次存一次,当遇到原来走过的就是入环节点。方法二:首先使用快慢指针,当快慢指针相遇时首先判断出来有环。然后如何找出入环节点? 在快慢指针相交处将快指针返回到头节点,之后将快慢节点都以同样的速度向前走,当再次相遇时就是入环节点。判断链表相交并找到相交节点:方法一:统计两个链表的长度n1,n2,同时在找到尾节点时判断两个尾节点是否同一地址如果不相等就直接返回没有相交。如果判断出尾节点相等就判断出相交。(前提时两个都无环)...

2021-11-14 11:42:48 396

原创 排序笔记(归并与快排)

归并排序:将原数组分两部分,对两部分分别进行排序,得到两个有序数组,最后采用双指针的方式对这两个有序数组进行归并.快排:(荷兰国旗问题)将原数组选定一个属,比如尾部的数,将原数组按照“小于此数”“等于此数”“大于此数”的顺序进行排序。然后在前后两个部分分别重新选数重复此过程。具体到如何将原数组按照“小于此数”“等于此数”“大于此数”的顺序进行排序。参见下图:这个方法复杂度O(N平方)快排的进阶:由原来选最后一个数改成等概率随机选一个作为num。时间复杂度变为O(N*N的对数).

2021-11-12 21:26:23 408

原创 算术平方根的整数部分(简单)*求平方根的三种方法**整数与小数取绝对值*

69. Sqrt(x) - 力扣(LeetCode) (leetcode-cn.com)https://leetcode-cn.com/problems/sqrtx/目录方法一:牛顿迭代法PS:求取绝对值方法二:通过其它的数学函数代替平方根函数得到精确结果,取整数部分作为答案;方法三:二分法查找方法一:牛顿迭代法class Solution {public: int mySqrt(int x) { double result=(double)x;.

2021-11-11 19:46:40 5862

原创 三数之和(中等)*双指针**有点类似于最大容器的题目*

class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { int n=nums.size(); vector<vector<int>>result; // for(int i=0;i<n-1;i++){ // for(int j=0;j<n-1-i;j++).

2021-11-09 20:23:16 218

原创 字符串转换整数(atoi)(中等)

8. 字符串转换整数 (atoi) - 力扣(LeetCode) (leetcode-cn.com)https://leetcode-cn.com/problems/string-to-integer-atoi/submissions/class Solution {public: int myAtoi(string s) { int len=s.length(); long result=0; int biao=0; int

2021-11-09 12:01:01 2661

原创 最长回文子串(困难)*函数返回多个数值* *复制字符串函数*

5. 最长回文子串 - 力扣(LeetCode) (leetcode-cn.com)https://leetcode-cn.com/problems/longest-palindromic-substring/submissions/目录方法一:中心向两边扩散找最大回文子串,同时遍历所有点都作为中心点试一试。重点:子函数的返回类型为vector型(这样就可以返回多个数了)方法2:思想上从外向内扒开。如果一个串左右两侧相等那么该串是否是回文子串取决于扒开后的是不是回文串。重点:复制字符串函

2021-11-07 17:06:55 111

原创 Z字型变换(中等)*改变走向的方法*

6. Z 字形变换 - 力扣(LeetCode) (leetcode-cn.com)https://leetcode-cn.com/problems/zigzag-conversion/目录方法一:在画赋值走向图时,可以画成“V”字走向这样不失一般性(V字和Z字赋值是一样的,只不过好理解。)方法二:PS:关于printf和cout输出方法一:在画赋值走向图时,可以画成“V”字走向这样不失一般性(V字和Z字赋值是一样的,只不过好理解。)因为最后结果是按行输出,所以建立numRo

2021-11-06 20:19:09 356

原创 两数相加(简单)*空白链表的创建*

2. 两数相加 - 力扣(LeetCode) (leetcode-cn.com)https://leetcode-cn.com/problems/add-two-numbers/submissions//** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} *

2021-11-05 12:30:52 84

原创 同构字符串(简单)

205. 同构字符串 - 力扣(LeetCode) (leetcode-cn.com)https://leetcode-cn.com/problems/isomorphic-strings/class Solution {public: bool isIsomorphic(string s, string t) { unordered_map<char,char>hashable1; unordered_map<char,char>ha

2021-11-03 18:46:51 129

原创 *哈希相关知识*

std::unordered_map - cppreference.comhttps://en.cppreference.com/w/cpp/container/unordered_map查阅相关函数!!!目录一:unordered_map和unordered_set二:相关函数1:hashtable.find(输入参数为索引key)2:hashable.count(输入参数为索引Key)3:hashable.insert(输入参数为键值对)一:unordered_map和u

2021-11-02 21:48:30 499

空空如也

空空如也

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

TA关注的人

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