自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C语言中switch语句

#include<stdio.h>int main(){int day=8;switch(day){case 1:printf(“星期一\n”);break;case 2:printf(“星期二\n”);break;case 3:printf(“星期三\n”);break;case 4:printf(“星期四\n”);break;case 5:printf(“星期五\n”);break;case 6:printf(“星期六\n”);break;ca

2021-06-14 11:56:09 228

原创 C语言中代码风格对比

//代码1if (condition) {return x;}return y;//代码2if(condition){return x;}else{return y;}//代码2更好,更加清晰//代码3int num = 1;if(num == 5){printf(“hehe\n”);}//代码4int num = 1;if(5 == num){printf(“hehe\n”);}//代码4的代码风格更好,因为如果我们不小心把"==“写成了”="的话,

2021-06-14 11:54:19 193

原创 C语言中的指针

#include<stdio.h>int main(){char ch=‘w’;char*p=&ch;*p=‘h’; //改变指针指向printf("%c\n",*p); //输出结果位hreturn 0;}#include<stdio.h>#include<string.h>int main(){//指针大小在32位平台是4个字节,64位平台是8个字节printf("%d\n",sizeof(char*)); //8pri

2021-06-14 11:50:28 154

原创 C语言中的static关键字

#include<stdio.h>void test(){int i=0;i++;printf("%d\n",i);}int main(){int i=0;for(i=0;i<10;i++){test();}return 0;}1.static修饰局部变量改变了变量的生命周期,让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。#include<stdio.h>void test(){static int i=0; //sta

2021-06-14 11:42:51 391

原创 C语言中的typedef关键字

typedef unsigned int unit_32; //typedef关键字将unsigned int类型重命名为unit_32类型#include<stdio.h>#include<string.h>int main(){unsigned int sum1=0;unit_32 sum2=0;printf("%d\n",sizeof(sum1)); //sum1和sum2是同一类型的变量printf("%d\n",sizeof(sum2));

2021-06-14 11:32:33 200

原创 C语言中的while循坏

#include<stdio.h>int main(){printf(“请选择:\n”);int p=0;while(p<=5){printf(“hahhaha\n”);//打印6次hahahhap++;}if(p>=6){printf(“hehehhhe\n”);//打印一次hehhehehe}return 0;}

2021-06-14 11:30:55 106

原创 C语言中的字符串

#include<stdio.h>#include<string.h>int main(){char arr1[]={“bit”};char arr2[]={‘b’,‘i’,‘t’};char arr3[]={‘b’,‘i’,‘t’,’\t’};//char a=sizeof(arr1);printf("%s\n",arr1); //输出结果:bitprintf("%s\n",arr2); //输出结果:bitprintf("%s\n",arr3); //输出结果

2021-06-14 11:26:37 124

原创 C语言中的函数

/*//常规写法:#include<stdio.h>int main(){int sum1=0;int sum2=0;int sum=0;printf(“请输入两个操作数:”);scanf("%d %d",&sum1,&sum2);sum=sum1+sum2;printf(“sum=%d\n”,sum);return 0;}*///编写一个加法函数写法:#include<stdio.h>int add(int x,int y)//函数

2021-06-14 11:18:13 145

原创 C语言中的转义字符、sizeof与strlen的区别

//程序输出什么?#include <stdio.h>#include<string.h>int main(){printf("%d\n", sizeof(“abcdef”));//输出结果为7,sizeof计算字符串的长度加上了\0printf("%d\n",strlen(“abcdef”));//输出结果为6,strlen计算字符串的长度没有加\0printf("%d\n", strlen(“c:es\t\328es\t.c”));//输出结果为12,因为\t析成一

2021-06-14 11:15:18 494

原创 C语言中四种常量

1.枚举常量2.字面常量3.const修饰的常变量4.define标识符常量#include<stdio.h>enum sex{male,//男female,//女secret// 秘密}; //枚举常量int main(){3.14; //字面常量1000; //字面常量const float p=3.14f; //const修饰的常量//p=5.12; //会报错,const修饰的变量不能改变#define max 100;/

2021-06-14 11:08:16 421

原创 平衡二叉树

题目描述:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。代码思路:如果使用自底向上的做法,则对于每个节点,函数height 只会被调用一次。自底向上递归的做法类似于后序遍历,对于当前遍历到的节点,先递归地判断其左右子树是否平衡,再判断以当前节点为根的子树是否平衡。如果一棵子树是平衡的,则返回其高度(高度一定是非负整数),否则返回 −1。如果存在一棵子树不平衡,则整个二叉树一定不平衡。代码实现:c

2021-04-23 16:44:52 100

原创 2021-04-23

题目描述:给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。代码思路:思路和算法:这是一种最朴素的方法——深度优先搜索枚举 s中的每一个节点,判断这个点的子树是否和 t相等。如何判断一个节点的子树是否和 t相等呢,我们又需要做一次深度优先搜索来检查,即让两个指针一开始先指向该节点和 t 的根,然后「同步移动」两根指针来「同步遍历」这两棵树,判断对应位置是否相等。代码实现:

2021-04-23 15:26:37 140

原创 二叉树的后序遍历

题目描述:给定一个二叉树,返回它的 后序 遍历。代码实现:方法一:(递归)class Solution {public:void postorder(TreeNode* root,vector &ans){if(root==NULL)return ;postorder(root->left,ans);postorder(root->right,ans);ans.push_back(root->val);}vector postorderTraversal

2021-04-23 15:11:23 290

原创 二叉树的中序遍历

题目描述:给定一个二叉树的根节点 root ,返回它的 中序 遍历。解题思路:按照左子树->根节点->右子树顺序访问二叉树代码实现:方法一:(递归)class Solution {public:void inorder(TreeNode* root,vector &ans){if(root==NULL)return;inorder(root->left,ans);ans.push_back(root->val);inorder(root->r

2021-04-20 22:52:33 145

原创 二叉树的前序遍历

题目描述:给你二叉树的根节点 root ,返回它节点值的 前序 遍历。代码思路:前序遍历是指访问二叉树的顺序为:根节点->左子树->右子树代码实现:方法一:(迭代)class Solution {public:vector preorderTraversal(TreeNode* root) {vector result;if(!root)return result;stack<TreeNode*> S;S.push(root);while(!S.empty()

2021-04-20 21:40:45 190

原创 对称二叉树

题目描述:给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。1/ 2 2/ \ / 3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:1/ 2 2\ 3 3解题思路:我们可以实现这样一个递归函数,通过「同步移动」两个指针的方法来遍历这棵树,p 指针和 q指针一开始都指向这棵树的根,随后 p 右移时,q左移,p 左移时,q右移。每次检查当前 p 和 q节点的值是否相等,

2021-04-11 16:59:59 79

原创 相同的树

题目描述:给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入:p = [1,2,3], q = [1,2,3]输出:true示例 2:输入:p = [1,2], q = [1,null,2]输出:false示例 3:输入:p = [1,2,1], q = [1,1,2]输出:false解题思路:深度优先搜索如果两个二叉树都为空,则两个二叉树相同。如果两个二叉树中有且只有一

2021-04-11 16:06:48 121

原创 二叉树的最大深度

题目描述:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回它的最大深度 3 。解题思路:(1)深度优先搜索:斜体样式如果我们知道了左子树和右子树的最大深度 l和 r,那么该二叉树的最大深度即max(l,r)+1,而左子树和右子树的最大深度又可以以同样的方式进行计算。因此我们可以用「深度优先搜索」

2021-04-11 12:06:47 301

原创 单值二叉树

题目描述:如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。示例 1:输入:[1,1,1,1,1,null,1]输出:true示例 2:输入:[2,2,2,5,2]输出:false解题思路:递归遍历二叉树的节点,然后比较根节点与其左右孩子的值是否相同,相同返回true,不同返回false。代码实现:class Solution {public:bool isUnivalTree(TreeNode* r

2021-04-11 11:31:05 312

原创 最小栈

题目描述:设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。示例:输入:[“MinStack”,“push”,“push”,“push”,“getMin”,“pop”,“top”,“getMin”][[],[-2],[0],[-3],[],[],[],[]]输出:[null,null,null,nu

2021-04-04 22:29:28 115

原创 两个栈实现队列

题目描述:请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:你只能使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, si

2021-04-04 20:11:39 198

原创 两个队列实现栈

题目描述:用两个队列实现一个栈,请实现他的两个函数Push 和 Pop,分别完成入栈和出栈功能。解题思路图:实现代码:#include #include #include using namespace std;template class Cstack {public:Cstack(){}~Cstack(){}void push(const T& val) {if (queue1.empty() && queue2.empty()) {queue1.

2021-03-30 21:38:13 115

原创 循环队列

题目描述:设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。循环队列的实现代码:#includeusing namespace std;class CicleQueue{public://构造队列

2021-03-29 22:21:53 391

原创 链表插入排序

题目描述:对链表进行插入排序。插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据插入完为止。解题思路:1.首先判断给定的链表是否为空,若为空,则不需要进行排序,直接返回。2.创建哑节点 dummyHead,令 dummyHead.next = head。引入哑节点是为了便于在 head 节点之前插入节点。3.维护 lastSorted

2021-03-18 09:33:53 78

原创 返回环形链表的第一个节点

题目描述:给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。解题思路:一个非常直观的思路是:我们遍历链表中的每个节点,并将它记录下来;一旦遇到了此前遍历过的节点,就可以判定链表中存在环。借助哈希表可以很方便地实现。实现代码:clas

2021-03-18 08:40:15 149

原创 环形链表

题目描述:给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。解题思路:最容易想到的方法是遍历所有节点,每次遍历到一个节点时,判断该节点此前是否被访问过。具体地,

2021-03-17 22:17:48 96

原创 单词倒排

题目描述:说明:1、构成单词的字符只有26个大写或小写英文字母;2、非构成单词的字符均视为单词间隔符;3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;4、每个单词最长20个字母;输入描述:输入一行以空格来分隔的句子输出描述:输出句子的逆序示例1输入I//am??a\student输出student a am I解题思路:对于我们来说,有效的字符就是从‘A’~‘z’,当非有效字符的时候代表一个单词的结束。

2021-03-17 15:53:53 123

原创 骆驼命名法

题目描述:从C/C++转到Java的程序员,一开始最不习惯的就是变量命名方式的改变。C语言风格使用下划线分隔多个单词,例如“hello_world”;而Java则采用一种叫骆驼命名法的规则:除首个单词以外,所有单词的首字母大写,例如“helloWorld”。 请你帮可怜的程序员们自动转换变量名。输入描述: 输入包含多组数据。每组数据一行,包含一个C语言风格的变量名。每个变量名长度不超过100。输出描述: 对应每一组数据,输出变量名相应的骆驼命名法。输入例子: hello_worldnice_to_m

2021-03-17 15:14:07 335

转载 2021-03-16

题目描述:给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。进阶:尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?示例 1:输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]示例

2021-03-16 22:51:37 62

原创 转换成小写字母

题目描述:实现函数 ToLowerCase(),该函数接收一个字符串参数 str,并将该字符串中的大写字母转换成小写字母,之后返回新的字符串。示例 1:输入: “Hello”输出: “hello”示例 2:输入: “here”输出: “here”示例 3:输入: “LOVELY”输出: “lovely”实现代码:class Solution {public:string toLowerCase(string str) {string s="";for(int i=0;i&lt

2021-03-16 22:24:56 81

原创 找出两个链表中第一个相等节点

题目描述:编写一个程序,找到两个单链表相交的起始节点。解题思路:方法一: 暴力法对链表A中的每一个结点 i的值,遍历整个链表 B 并检查链表 B 中是否存在结点i的值相等。复杂度分析时间复杂度 : (mn)(mn)。空间复杂度 : O(1)O(1)。代码实现:class Solution {public:ListNode *getIntersectionNode(ListNode headA, ListNode headB) {ListNodeHa=headA;ListNodeHb

2021-03-16 13:56:03 604

原创 判断链表是否为回文结构

回文链表:是指链表对折起来,对应位置的元素相等题目描述:对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。测试样例:1->2->2->1返回:true解题思路:1、利用快慢指针找到中间的位置(起初均指向头结点,然后slow一次走一步,fast一次走两步。注意不需要区分链表结点个数是奇数还是偶数);  2、将后半部分指针翻转; 

2021-03-16 12:22:35 251

原创 删除链表中的重复节点

题目描述:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5示例1输入{1,2,3,3,4,4,5}返回值{1,2,5}代码实现:class Solution {public:ListNode* deleteDuplication(ListNode* pHead) {if (pHead == NULL || pHead

2021-03-14 11:15:25 158

原创 链表分割

题目描述:现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针解题思路:(1)直接创建两个链表:一个链表存放小于x的元素,另一个存放大于或等于x的元素。(2)然后迭代访问整个链表,将元素插入before或者after链表末尾。一旦抵达链表末端,则表明拆分完毕,最后合并两个链表。代码实现:class Partition {public:ListNode* partition(Lis

2021-03-13 19:43:30 112

原创 按升序方式合并两个链表

题目描述:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]代码实现:方法一(递归):class Solution {public:ListNode* mergeTwoLists(ListNode* l1, List

2021-03-13 09:20:00 668

原创 输出该链表中倒数第k个结点。

题目描述:输入一个链表,输出该链表中倒数第k个结点。示例1输入1,{1,2,3,4,5}返回值{5}代码实现:class Solution {public:ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {//当链表为空且k=0时无效if(pListHeadNULL&&k0){return NULL;}ListNodeahead=pListHead;//从k-1节点出发的指针ListN

2021-03-12 16:31:26 120

原创 返回链表的中间节点

题目描述:给定一个头结点为 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.nex

2021-03-12 10:46:56 733

原创 反转链表

题目描述:反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL代码实现:class Solution {public ListNode reverseList(ListNode head) {ListNode prev = null;ListNode curr = head;while (curr != null) {ListNode next = curr.nex

2021-03-11 22:51:18 66

原创 移除链表元素

题目描述:给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。示例1:输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]示例 2:输入:head = [], val = 1输出:[]示例 3:输入:head = [7,7,7,7], val = 7输出:[]提示:列表中的节点在范围 [0, 104] 内1 <= Node.val <= 5

2021-03-11 22:19:48 73

原创 剪绳子2020.12.24

题目描述:假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数 n 。能否在不打破种植规则的情况下种入 n 朵花?能则返回True,不能则返回False。示例 1:输入: flowerbed = [1,0,0,0,1], n = 1输出: True示例 2:输入: flowerbed = [1,0,0,0,1], n = 2输出: Fa

2020-12-25 15:18:37 78

空空如也

空空如也

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

TA关注的人

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