![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法排序
不知道起个啥名“”
每天敲一敲yyds
展开
-
数据结构时间复杂度
O(1)原创 2022-07-12 10:04:25 · 365 阅读 · 0 评论 -
二叉树的构建和遍历
二叉树的递归遍历递归按照这三要素来写1.确定递归函数的参数和返回值:确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型2.确定终止条件:写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出3.确定单层递归的逻辑:确定每一层递归需要处理的信息。在这里也就会重复调用自己来实现递归的原创 2022-04-23 12:47:03 · 104 阅读 · 0 评论 -
二叉树知识
二叉树有两种主要的形式:满二叉树和完全二叉树满二叉树如果一颗二叉树只有度为0和度为2,并且度为0的节点都在同一层的二叉树就是满二叉树这棵二叉树为满二叉树,也可以说深度为k,有2^k-1个节点的二叉树完全二叉树在完全二叉树,1.除了最底层可能没有填满,2.其余每层都填满,3.最底层中左子树没有的话后面节点也不能有若最底层为第 h 层,则该层包含 1~ 2^(h-1) 个节点二叉搜索树...原创 2022-04-20 20:36:33 · 1077 阅读 · 0 评论 -
输出前 K 个高频元素
原题链接思路:这道题目主要涉及到如下三块内容:1.要统计元素出现频率2.对频率排序3.找出前K个高频元素在这道题中使用map来统计所有元素出现的频率,用优先队列的小顶堆来进行排序,把频率低的元素出队,剩下的是频率前k高的元素,最后输出即可具体实现代码:// 时间复杂度:O(nlogk)// 空间复杂度:O(n)class Solution {public: // 小顶堆 class mycomparison { public: bool ope原创 2022-04-18 16:20:43 · 179 阅读 · 0 评论 -
堆、大顶堆、优先队列
1.什么是堆堆是一棵完全二叉树2.大顶堆:节点的值大于等于其左右孩子节点的值3.优先队列:1.优先队列是披着队列的的皮的堆2.优先级队列内部元素是自动依照元素的权值排列3.4.大顶堆和优先队列大顶堆(堆头是最大元素),小顶堆(堆头是最小元素),如果懒得自己实现的话,就直 接用priority_queue(优先级队列)就可以了,底层实现都是一样的,从小到大排就是小顶堆,从大到小排就是大顶堆...原创 2022-04-18 11:55:00 · 576 阅读 · 0 评论 -
删除字符串中的所有相邻重复项
力扣原题链接给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。测试代码:/************************************************************************* > File Name: 4-删除字符串中的所有相邻重复项.cpp > Author: > Mail:原创 2022-04-16 20:59:17 · 381 阅读 · 0 评论 -
有效的括号
力扣原题给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串实现代码class Solution {public: bool isValid(string s) { stack<int> st; for(int i=0;i<s.size();i++) { //1.根据左括号把右括号进栈原创 2022-04-11 16:22:01 · 55 阅读 · 0 评论 -
哈希表---有效的字母异位词
题目链接:力扣原题/************************************************************************* > File Name: 有效的字母异位词.cpp > Author: > Mail: > Created Time: Sat 09 Apr 2022 03:00:34 PM CST 题目:https://leetcode-cn.com/problems/valid-anagram/给定两个字原创 2022-04-09 15:53:21 · 165 阅读 · 0 评论 -
回文链表--将值复制到数组中后用双指针法
题目:给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。力扣原题思路:将值复制到数组中后用双指针法具体步骤:将链表的值复制到数组vec中,通过双指针判断数组前后值是否一样,一样的话就返回真//判断是否为回文,即前后一半是一样bool isPalindrome(ListNode* head){ vector<int > vec; while(head)//把链表里面的值,保存到数组容器里 { vec原创 2022-04-01 18:53:53 · 732 阅读 · 0 评论 -
删除链表中所有满足 Node.val == val 的节点
题目:给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点ListNode* removeElements(ListNode* head, int val){ ListNode*tmp=new ListNode(0); tmp=_dummyHead; _dummyHead=head; while(tmp->next) { if(tmp->next->val==val)//判断tmp的下个原创 2022-03-31 21:10:18 · 1065 阅读 · 0 评论 -
使用 插入排序 对链表进行排序
题目:给定单个链表的头 head ,使用 插入排序 对链表进行排序,并返回 排序后链表的头 。思路:三个指针,tmphead用来寻找插入合适位置;pre负责指向新元素,last 负责指向新元素的前一元素先用pre和last比较pre指向的元素是否需要执行插入操作当需要插入时,tmphead指针每次都会从头查找合适位置,找到合适位置后就重新连接节点关系//链表插入排序ListNode*insertionSortList(ListNode *head){ _dummyHead->原创 2022-03-31 19:34:47 · 1725 阅读 · 0 评论 -
旋转链表--最清晰易懂的题解
题目:给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。力扣原题思路:求出链表长度,找出k位置,让tail指向尾巴,步骤1:把tail指向头节点步骤2:head指向倒数k位置步骤3:让倒数k节点的前一个节点指向空如图所示://链表向右移动k位 ListNode* rotateRight(ListNode* head, int k) { ListNode*p=head; ListNode*tail=p; int n=0; while(p)//求出链原创 2022-03-30 20:33:27 · 1087 阅读 · 0 评论 -
【合并两个有序链表】简单迭代
//合并两个有序链表 ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) { ListNode*p=_dummyHead; //p指向虚头节点 while(list1 && list2) { //比较两链表找出最小值, if(list1->val<list2->val) { p->next=list1;//p指向值较小的链表, list1=lis原创 2022-03-29 21:15:43 · 172 阅读 · 0 评论 -
分隔链表leetcode
题目:给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。你应当 保留 两个分区中每个节点的初始相对位置力扣原题思路:创建biglist链表,用来保存值大于=x的节点;创建samlllist链表,用来保存小于x的节点;最后要把biglist链表的最后节点的next=nullptr;smalllist的最后节点的next要指向biglist链表起始的节点的下个节点//分隔链表 ListNode* part原创 2022-03-28 21:47:43 · 221 阅读 · 0 评论 -
删除原始链表中所有重复数字的节点,只留下不同的数字
题目:给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表力扣原题//删除一个有序的链表的所有重复值节点 ListNode* deleteDuplicates(ListNode* head) { _dummyHead->next=head; ListNode* cur=_dummyHead; while(cur->next && cur->next->next) {原创 2022-03-28 19:28:22 · 912 阅读 · 0 评论 -
删除一个有序的链表的重复值节点
题目:给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。力扣原题思路:指针 cur指向链表的头节点,随后开始对链表进行遍历。如果当前 cur->val 与 cur->next->val对应的元素相同,那么我们就将 cur->next 从链表中移除;否则说明链表中已经不存在其它与 cur->val对应的元素相同的节点,因此可以将 cur指向 cur->next;//删除一个有序的链表的重复值节点 List原创 2022-03-28 17:52:23 · 1222 阅读 · 0 评论 -
反转链表部分节点
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。来源:力扣(LeetCode)链接:力扣原题链接//反转部分链表ListNode *reverseBetween(ListNode *head, int left, int right){ _dummyHead->next=head;//虚头的下个指针指向头 ListNode*pre=_dummyH原创 2022-03-28 16:07:10 · 1182 阅读 · 0 评论 -
两链表相加求和
题目要求:给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/add-two-numbers-ii著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。//3.链表相加两个数 ListNode* addTwoNumbers(ListNode* l1,原创 2022-03-28 13:04:36 · 545 阅读 · 0 评论 -
求链表交点-leetcode
链表相交:思路:求出两链表长度,求得两链表长度差,让长度大的链表先走到和另个链表对齐, 之后就可以比较后面链表节点是否一样,一样即交点ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { ListNode* curA = headA; ListNode* curB = headB; int lenA = 0, lenB = 0; while ..原创 2022-03-20 12:22:30 · 1453 阅读 · 0 评论 -
求链表环入口位置
/************************************************************************* > File Name: 1-删除链表的倒数第N个节点.cpp > Author: > Mail: > Created Time: Sat 19 Mar 2022 09:14:55 AM CST通过快慢指针实现,快慢指针最初都指向头结点,让快指针每次走2步,慢指针每次走1步,若有环,两指针必...原创 2022-03-20 10:55:11 · 1437 阅读 · 0 评论 -
两两交换链表内容
//两两交换链表内容比如原链表 1、2、3、4 交换后 2、1、4、3 ListNode* swapPairs(ListNode* head) { ┊ ListNode*dummyhead=new ListNode(0); ┊ ListNode*cur=dummyhead; ┊ ListNode*tmp,*tmp1; ┊ dummyhead->next=head;//虚头节点指向头结点 ┊ while(cur->n..原创 2022-03-19 16:20:35 · 744 阅读 · 0 评论 -
删除链表倒数的n个操作
/*除了删除链表倒数的n个操作外还加了些常见操作思路:利用快慢指针,先让快指针走n+1步,再同时一步步移动快慢指针,直到快指针指向null,此时慢指针的下个指针就是要删除的位置*/#include<stdio.h>#include<stdlib.h>struct Mylinkedlist{ int val; struct Mylinkedlist* next;} ;typedef struct Mylinkedlist Mylinkedl原创 2022-03-19 12:43:35 · 277 阅读 · 0 评论 -
冒泡排序-c语言
冒泡排序:两两比较,把最大的数往后排,小的逐渐冒泡n个元素要比较n-1趟,每趟比较n-1-i次,i代表当前是第几趟#include<stdio.h>#include<stdlib.h>#include<time.h>void Bubble_sort(int*a,int len){ for(int i=0;i<len-1;i++)//要比较len-1趟 { ┊ for(int j=0;j<len-i-1;j++)/原创 2022-03-16 16:45:21 · 748 阅读 · 0 评论 -
堆排序--c语言
/************************************************************************* > File Name: 6-堆排序.c > Author: > Mail: > Created Time: Wed 16 Mar 2022 09:02:27 AM CST堆排序思路;把数组看成二叉树,由上往下,由左往右作为数组位置例如:int a[]={2,0,4,5,6,0}; ┊原创 2022-03-16 16:43:46 · 773 阅读 · 0 评论