- 博客(31)
- 收藏
- 关注
原创 69. x 的平方根
69. x 的平方根 x 的平方根水题直接贴代码:int mySqrt(int x){ int a = 1; while(x/a >= a) a++; return a-1;}
2022-05-02 07:31:54 200
原创 225. 用队列实现栈
225. 用队列实现栈用队列实现栈入栈,push数据到不为空的队列。出栈,把不为空的队列的前n-1个数据导入空队列,最后剩下的一个删掉。队列的实现可以看这篇文章数据结构之栈和队列typedef int QDataType;typedef struct QueueNode{ QDataType data; struct QueueNode* next;}QNode;typedef struct Queue{ QNode* head; QNode* tail;}Queue;
2022-05-01 14:33:43 101 1
原创 20. 有效的括号
20. 有效的括号有效的括号用栈来实现,遇到左括号入栈,遇到右括号出栈,检查是否匹配。栈的函数可以看这篇文章数据结构之栈和队列typedef char STDataType;typedef struct Stack{ STDataType* a; int top; // 栈顶 int capacity; // 容量}Stack;void StackInit(Stack* ps){ assert(ps); ps->a = NULL; ps->capacity = 0
2022-04-30 18:56:54 795
原创 数据结构之栈和队列
数据结构之栈和队列一、栈1.栈的概念及结构2.栈的实现方式的选择二、队列一、栈1.栈的概念及结构栈: 一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈: 栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈: 栈的删除操作叫做出栈。出数据也在栈顶。2.栈的实现方式的选择数组栈链式栈因为数组栈尾插尾删效率很高,所以更多会选择数组栈。二、
2022-04-30 18:53:46 133
原创 92. 反转链表 II
92. 反转链表 II反转链表 II#mermaid-svg-jG6PqpQkwbXb7UqU {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-jG6PqpQkwbXb7UqU .error-icon{fill:#552222;}#mermaid-svg-jG6PqpQkwbXb7UqU .error-text{fill:#552222;stroke:#552222;}
2022-04-30 09:50:36 60
原创 141. 环形链表
141. 环形链表环形链表快慢指针解决此题,快指针一次走2步,慢指针一次走一步,若快慢指针相遇,则说明有环。bool hasCycle(struct ListNode *head) { struct ListNode* fast=head,*slow=head; while(fast&&fast->next&&slow) { fast=fast->next->next; slow=slow->
2022-04-30 08:23:38 752
原创 237. 删除链表中的节点
237. 删除链表中的节点删除链表中的节点这道题和下面这道题完全一样。面试题 02.03. 删除中间节点void deleteNode(struct ListNode* node) { node->val=node->next->val; node->next=node->next->next;}...
2022-04-30 08:09:07 785
原创 234. 回文链表
234. 回文链表回文链表用快慢指针找到中间节点,把后半链表逆置。struct ListNode* reverseList(struct ListNode* head) { struct ListNode* prev = NULL; struct ListNode* curr = head; while (curr) { struct ListNode* next = curr->next; curr->next = prev;
2022-04-29 08:18:23 478
原创 面试题 02.03. 删除中间节点
面试题 02.03. 删除中间节点删除中间节点这道题是说只能访问中间某个位置的节点,然后要把它删除。由于没给前驱指针,如果真的删了中间的节点,链表就断开了。所以考虑把下一个节点的值赋给当前节点,然后删除下一个节点,这样就相当于删除了中间节点。void deleteNode(struct ListNode* node) { node->val = node->next->val; //把下一个节点的值赋给当前节点 node->next = node-&g
2022-04-28 17:12:56 327
原创 83. 删除排序链表中的重复元素
83.删除排序链表中的重复元素删除排序链表中的重复元素前驱指针和当前指针配合解决此题。struct ListNode* deleteDuplicates(struct ListNode* head){ if(head==NULL||head->next==NULL) return head; struct ListNode* prev = head; struct ListNode* cur = head->next; while(cur)
2022-04-28 16:58:27 63
原创 21. 合并两个有序链表
21. 合并两个有序链表合并两个有序链表两个链表头部值较小的一个节点与剩下元素的 merge 操作结果合并。前面的两个if是递归的结束临界条件。struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){ if(list1==NULL) return list2; else if(list2==NULL) return list1; else if(
2022-04-28 16:29:43 203
原创 C++工具之命名空间
C++工具之命名空间一、为什么需要命名空间二、什么是命名空间三、命名空间的定义在之前学习C++时,我们已经多次看到了在程序中用了以下的语句:using namespace std;这里就是使用了命名空间std,下面将对它作较详细的介绍。一、为什么需要命名空间在C/C++中,变量、函数和类都是大量存在的,这些变量、数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。二、什么
2022-04-28 11:23:35 933
原创 数据结构之链表
链表一、概念及结构概念:分类:二、接口实现1.无头单向非循环链表`SList..h``SList.c`动态申请一个节点单链表打印单链表尾插单链表的头插单链表的尾删单链表头删单链表查找单链表在pos位置之后插入x单链表删除pos位置之后的值2.带头双向循环链表`SList.h``SList.c`创建返回链表的头结点双向链表销毁双向链表打印双向链表尾插双向链表尾删双向链表头插双向链表头删双向链表查找双向链表在pos的前面进行插入双向链表删除pos位置的节点一、概念及结构概念:链表是一种物理存储结构上非连续
2022-04-27 19:21:16 125
原创 27. 移除元素
27. 移除元素移除元素要把所有的val都移到后面,也就相当于把所有的非val移到前面。int removeElement(int* nums, int numsSize, int val){ int k=0; for(int i=0;i<numsSize;i++) { if(nums[i]!=val) nums[k++]=nums[i]; } return k;}...
2022-04-26 20:47:14 50
原创 数据结构之顺序表
系列文章目录顺序表系列文章目录一、关于线性表二、顺序表三级目录一、关于线性表线性表是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。二、顺序表三级目录...
2022-04-26 20:11:42 329
原创 时间复杂度和空间复杂度
时间复杂度和空间复杂度一、什么是算法?二、算法的效率1.如何衡量一个算法的好坏?2.算法的复杂度三、算法的时间复杂度1.时间复杂度的定义2.大O的渐进表示法(1)大O记法(2)推导大O阶方法(3)常见的时间复杂度(4)最坏情况和平均情况(5)常见的时间复杂度计算举例四、算法的空间复杂度1.空间复杂度的定义2.常见的空间复杂度计算举例一、什么是算法?算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。就拿排序为例,冒泡排序和选择排序是两种不同的算法,但都可以
2022-04-24 14:46:25 55
原创 58. 最后一个单词的长度
58. 最后一个单词的长度链接链接题目要求找出最后一个单词的长度,所以可以倒着遍历字符数组。注意末尾的空格,把它去掉就好了。int lengthOfLastWord(char * s){ int count=0; for(int i=strlen(s)-1;i>=0;i--) { if(s[i]==' ') strcpy(s+i,s+i+1); else break; } for(int i
2022-04-24 13:56:54 47
原创 2.KK的秘密通信
系列文章目录1.考试安排文章目录系列文章目录# KK的秘密通信题目描述KK最近和饲养员大叔聊得火热,可惜室友们总是要凑上来偷看八卦,所以KK和饲养员大叔约定使用一些手段来加密消息,如a->fasa,aba->gdsabafdf,abcdcba->fdsabcdcball,即在回文字符串的基础上加一些干扰字符串,最长的回文字符串既是真正的消息。你能火眼金睛吗?输入输入有多行字符串,其中包括字母(字母区分大小写),数字,符号。 不用判断结束 。输出与输入相对应每一行输
2022-01-25 16:01:11 459
原创 1.考试安排
系列文章目录1.考试安排考试安排系列文章目录1.考试安排题目描述小明本学期有四门考试要考,每门考试考一天,哪天考什么由他自己决定,小明列了个自己在第几天考第几门的发挥程度矩阵(4*4),然后问题就来了,小明该如何安排考试,使自己考试发挥最佳。输入输入数据为多组数据,每组数据有四行,每行四个数字,表示自己在第几天(行)考第几门(列)的发挥程度(<=1000的正整数)。输出对于每组数据,输出最高的总发挥程度。样例输入1 1 1 31 1 3 11 3 1 13 1 1 1样例输
2022-01-23 23:31:32 466
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人