- 博客(75)
- 收藏
- 关注
原创 二叉树的层序遍历
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */class Solution {public: vector<vector<int> > levelOrder(TreeNode* root) { vector<vector<int> >res; queue<Tr
2021-09-25 14:52:25
202
1
原创 实现二叉树的先序,中序和后序遍历
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */class Solution {public: vector<int> pre; vector<int> mid; vector<int> post; vector<vector<int> >
2021-09-25 14:41:51
144
原创 string类的实现
#include <iostream>#include <cstring>using namespace std;class String{private: char *m_str; public: String(const char *str=""):m_str(strcpy(new char[str?strlen(str)+1:1],str?str:"")){ } String(const String& s):m_str(strcpy(new
2021-09-25 09:59:53
158
原创 C++知识总结(三)
子类的构造多继承与多重继承钻石继承 和 虚继承虚函数 与 多态重载覆盖隐藏虚析构函数纯虚函数虚函数表 与 虚表指针多态 动态绑定C++的异常处理子类的构造任何一个子类对象中都包含着它的"基类子对象". 基类子对象: 在子类对象中包含一个基类的对象任何一个子类对象都可以被视为它的基类对象 --- is a 任何时候,一个子类对象的引用或者指针,都可以被隐式转换为它的基类类型的引用或者指针 基类类型的引用,如果引用子类对象, 它其实是引用的基类子对象(只引用了子类对象的一部分) 如果一个类有多个.
2021-09-21 14:14:17
615
1
原创 三数之和
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。思路:排序+双指针先固定一个元素,再通过左右指针找到两个符合的元素class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { int m=nums.size();
2021-09-15 19:55:10
81
原创 C++知识总结(二)
析构函数拷贝构造函数拷贝复制函数友元运算符重载继承析构函数class CLA_NAME{ 访问控制属性: //constructor 构造函数 函数名和类名相同 没返回值 也不能为void 可以重载 //实例化对象时自动调用构造函数 new 作为类类型成员 CLA_NAME(形参列表):INIT_LIST{ } //析构函数 denconstructor //当一个对象消亡(消失,离开了生命周期) 会 自动调用析构函数 ~CLA_NAME(void.
2021-09-13 20:30:37
143
原创 pow(x, n)
实现 pow(x, n) ,即计算 x 的 n 次幂函数即x^n。思路:把整数n写成二进制,每位二进制上的1代表相应的指数,结果为x的幂次相乘。class Solution {public: double result(double x,long long N){ double res=1.0; double pw=x;//初始幂次 while(N>0){ if(N%2==1){//如果二进制的最低位为1,则需计入
2021-09-09 20:45:18
114
原创 C++知识总结(一)
名字空间结构体、联合和枚举函数动态内存类型转换面向对象编程类和对象构造函数和方法实例化对象this指针初始化列表常对象 和 常方法静态属性 和 静态方法名字空间1.C++对程序中的标识符(类型、函数、变量)按照某种逻辑划分成若干个组 对标识符的逻辑划分 cin cout endl C++标准库的函数,对象,类型都位于std名字空间中 避免了名字冲突2.定义名字空间的语法namespace 名字空间的名字{ 全局变量 类型定义 函数}3.使用名字空间 (1)作用域限定符 名字.
2021-09-09 19:53:35
198
原创 十三种排序算法实现
这里写目录标题内部排序插入直接折半二路希尔选择直接二路堆交换冒泡鸡尾酒快速归并二路归并基数计数外部排序内部排序插入直接void insert(int arr[],int n){//时间复杂度O(n^2) 空间复杂度 O(1) int i,j; for(i=1;i<n;i++){ int key=arr[i]; for(j=i-1;j>=0&&arr[j]>key;j--){ arr[j+1]=arr[j]; } arr[j+1]=key
2021-09-07 20:33:50
566
1
原创 打家劫舍(动态规划)
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。思路:1.如果只有一间房,则偷这间 2.有两间,偷这两件金额最大的3.大于两间,设为第n间(1).偷窃第n 间房屋,偷窃总金额为前 n-2间房屋的最高总金额与第 n间房屋的金额之和。(2).不偷窃第n间
2021-09-02 19:52:32
140
原创 有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。思路:把左括号存入栈,遇到右括号,去除栈顶括号与之匹配char ret(char s){ if(s=='}')return '{'; if(s==']')return '['; if(s==')')return '('; return 0;}bool isValid(char *
2021-08-25 14:28:47
68
原创 不同的二叉搜索树
给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。思路:动态规划F(i,n)表示以i为根节点,n为长度的构成的总数。G(n)表示长度为n构成的总数。G(n)=F(i,n)之和(i=1~n)F(i,n)=G(i-1)*G(n-i)将F(i,n)带入G(n)可得结果分析可得G(0)=G(1)=1int numTrees(int n){ int ret[n+1]; memset(ret,0,sizeo
2021-08-24 19:46:29
78
原创 重排链表
给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → … → Ln-1 → Ln 。请将其重新排列后变为:L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → …不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。思路:用结构体数组保存元素,方便访问指定元素。void reorderList(struct ListNode* head){ struct ListNode*arr[50000];//定义结构体数组存储链表 struct L
2021-08-23 18:44:51
114
原创 跳跃游戏
给你一个非负整数数组 nums ,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。假设你总是可以到达数组的最后一个位置。思路:计算每个区间能达到的最远位置int jump(int* nums, int numsSize){ int i,cnt=0; int begin=0,end=0;//每一段区间的起始位置和终点 while(end<numsSize-1){//位置达到最后一个
2021-08-22 09:53:22
158
原创 旋转图像
给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。void swap(int *a,int *b){//交换 int temp=*a; *a=*b; *b=temp;}void rotate(int** matrix, int matrixSize, int* matrixColSize){ int i,j; for(i
2021-08-21 23:23:43
68
原创 全排列2(回溯去重)
给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。int cmp(const void*a,const void*b){ int*m=(int*)a; int*n=(int*)b; return *m-*n;}void DFS(int *nums, int numsSize, int depth, int *path, int *use, int **res,int*returnSize) { if (depth == numsSize) {
2021-08-21 19:58:17
155
原创 全排列(回溯)
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。思路:回溯int all;//排列总数void DFS(int *nums, int numsSize, int depth, int *path, int *use, int **res) { if (depth == numsSize) {//当前深度达到总深度 res[all] = (int *)malloc(sizeof(int) * numsSize);//申请数组
2021-08-21 16:46:48
130
原创 接雨水和每日温度
**接雨水**给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。int trap(int* height, int heightSize){ if(heightSize==0){ return 0; } int all=0;//总雨水 int stack[heightSize];//数组模拟栈 int num=0;//栈顶指针 int i; for(i=0;i<...
2021-08-18 16:56:56
127
原创 环形链表和寻找重复数
**环形链表**给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。struct ListNode *detectCycle(struct ListNode *head) { struct ListNode*fast=head;//定义快慢指针 struct ListNode*slow=head; while(fast){//快指针走两步,慢指针走一步 slow=slow->next; if(fast-...
2021-08-17 23:25:30
276
1
原创 删除排序链表中的重复元素
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。返回同样按升序排列的结果链表。思路:遍历链表,删除重复元素struct ListNode* deleteDuplicates(struct ListNode* head){ if(head==NULL){ return head; } struct ListNode*prev=malloc(sizeof(struct L
2021-08-17 18:40:45
80
原创 字符串的排序
给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。换句话说,s1 的排列之一是 s2 的 子串 。s1 和 s2 仅包含小写字母思路滑动窗口 双指针bool checkInclusion(char * s1, char * s2){ int len1=strlen(s1); int len2=strlen(s2); int cnt[26]={};//创建26个字母数组,记录出现个数 int i=0; for(i=0;i&
2021-08-16 22:45:05
65
原创 无重复字符的最长字串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。思路:双指针int lengthOfLongestSubstring(char * s){ int len =strlen(s); if(len<2){ return len; } int maxlen=1,left=0,right=0; bool hs[128]={false};//定义一个数组来记录字符是否重复出现 while(left<len&
2021-08-16 14:09:26
55
原创 爬楼梯(动态规划)
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。思路和算法动态规划用 f(x)表示爬到第 xx 级台阶的方案数,考虑最后一步可能跨了一级台阶,也可能跨了两级台阶,所以可以列出如下式子:f(x)=f(x-1)+f(x-2);f(0)表示0到0,方法为1,f(1)为0到1,方法为1,由此可推f(2)=1,f(3)=2…int climbStairs(int n) { int p = 0, q
2021-08-16 10:14:41
116
原创 linux——文件操作
文件描述符1、非负的整数。 2、表示一个打开的文件。 3、由系统调用(open)返回,被内核空间(后续系统调用)引用。 4、内核缺省为每个进程打开三个文件描述符:•stdin 0 - 标准输入•stdout 1 - 标准输出•stderr 2 - 标准出错 open/creat/closeint open ( const char* pathname, // 路径 int flags, // 模式 mode_t mode
2021-08-15 22:52:27
69
原创 高性能服务器编程——聊天室
提高服务器的性能I/O模型1. 阻塞I/O 程序阻塞于读写函数2. I/O复用 程序阻塞于I/O复用系统调用,可以同时监听多个I/O事件对I/O本身的读写操作是非阻塞3. SIGIO信号 信号触发读写就绪事件,用户程序执行读写操作。程序没有阻 塞阶段4. 异步I/O 内核执行读写操作并触发读写完成事件。程序没有阻塞阶段客户端#include <stdio.h>#include <stdlib.h>#inclu
2021-08-13 20:03:37
240
1
原创 Unix-linux环境高级C语言——开发环境
Unix操作系统美国AT&T公司贝尔实验室,1971年,肯.汤普逊、丹尼斯.里奇。 PDP-11,多用户、多任务、支持多种处理器架构,高安全性、高可靠性,高稳定性。 既可构建大型关键业务系统的商业服务器应用,也可构建面向移动终端、手持设备等的嵌入式应用。 Linux操作系统类Unix操作系统,免费开源,不同发行版本使用相同内核。 手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型计算机、超级计算机。 严格意义上的Linux仅指操作系统内核,隶属于GNU工程,发明人Linu
2021-08-10 19:30:38
228
原创 图论算法(队列 栈)
#ifndef _ADJ_GRAPH_H__#define _ADJ_GRAPH_H__#include <stdio.h>#include <string.h>#include <stdlib.h>#include <stdbool.h>#include "queue.h"typedef struct ArcNode{//弧结点 int adjvex; //弧头 边 邻接点所对应的下标位置 int w
2021-08-05 22:48:17
203
原创 删除链表的倒数第N个节点
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* removeNthFromEnd(struct ListNode* head, int n){ struct ListNode*fast=head; s
2021-08-03 20:17:24
69
原创 删除有序数组的重复项
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。思路:创建两个快慢指针,快指针表示遍历数组到达的下标位置,慢指针表示下一个不同元素要填入的下标位置,快指针遍历完后,返回慢指针的下标,两个都从1开始。int removeDuplicates(int* nums, int numsSize){ if(numsSize<1){
2021-07-30 15:09:13
111
原创 PAT 1023 组个最小数
给定数字 0-9 各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意 0 不能做首位)。例如:给定两个 0,两个 1,三个 5,一个 8,我们得到的最小的数就是 10015558。现给定数字,请编写程序输出能够组成的最小的数。输入格式:输入在一行中给出 10 个非负整数,顺序表示我们拥有数字 0、数字 1、……数字 9 的个数。整数间用一个空格分隔。10 个数字的总个数不超过 50,且至少拥有 1 个非 0 的数字。输出格式:在一行中输出能够组成的最小的数
2021-07-26 20:50:40
105
原创 PAT D进制的A+B
输入两个非负 10 进制整数 A 和 B (≤2^30−1),输出 A+B 的 D (1<D≤10)进制数。输入格式:输入在一行中依次给出 3 个整数 A、B 和 D。输出格式:输出 A+B 的 D 进制数。输入样例:123 456 8输出样例:1103#include<stdio.h>int main(){ int a,b,d,x[100]; scanf("%d %d %d",&a,&b,&d); int c=a+b; int cn
2021-07-26 20:28:28
80
原创 PAT1021 个位数统计
#include<stdio.h>int main(){ int a[10]={}; char n[1000]; scanf("%s",n); int i=0; while(n[i]!='\0'){ a[(n[i]-'0')]++; i++; } for(i=0;i<10;i++){ if(a[i]!=0){ printf("%d:%d\n",i,a[i]); } }}
2021-07-26 20:02:30
80
原创 PAT1020 月饼
月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有 3 种月饼,其库存量分别为 18、15、10 万吨,总售价分别为 75、72、45 亿元。如果市场的最大需求量只有 20 万吨,那么我们最大收益策略应该是卖出全部 15 万吨第 2 种月饼、以及 5 万吨第 3 种月饼,获得 72 + 45/2 = 94.5(亿元)。输入格式
2021-07-26 10:04:32
320
原创 平衡二叉树
#ifndef _AVL_TREE_H__#define _AVL_TREE_H__#include <stdio.h>#include <stdbool.h>#include <stdlib.h>typedef int ETYPE;typedef struct AVLNode{ ETYPE elem; struct AVLNode *lchild,*rchild; size_t hight; //结点所在高度 }AVLNode,*AVLTr
2021-07-22 22:35:43
52
原创 PAT1019 数字黑洞
给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的 6174,这个神奇的数字也叫 Kaprekar 常数。例如,我们从6767开始,将得到7766 - 6677 = 10899810 - 0189 = 96219621 - 1269 = 83528532 - 2358 = 61747641 - 1467 = 6174… …现给定任意 4
2021-07-21 19:54:15
95
原创 二叉排序树
#ifndef _AVL_TREE_H__#define _AVL_TREE_H__#include <stdio.h>#include <stdbool.h>#include <stdlib.h>typedef int ETYPE;typedef struct AVLNode{ ETYPE elem; int hight; struct AVLNode *lchild; struct AVLNode *rchild;}AVLNode,*AVLT
2021-07-20 23:00:56
98
1
原创 链表的逆序
1)prev指针指向已经反转好的链表的最后一个节点,最开始没有反转,所以指向null2)curr指针指向待反转链表的第一个节点,最开始第一个节点待反转,所以指向pHead3)next指针指向待反转链表的第二个节点,目的是保存链表,先指向null4)不断的进行保存指针,指针后移,最后prev为新的头结点/** * struct ListNode { * int val; * struct ListNode *next; * }; */ /** * * @param pHead L
2021-07-18 19:57:06
78
原创 判断链表是否有环
判断给定的链表中是否有环。如果有环则返回true,否则返回false。/** * struct ListNode { * int val; * struct ListNode *next; * }; *//** * * @param head ListNode类 * @return bool布尔型 */#include <stdbool.h>bool hasCycle(struct ListNode* head ) { if(head == NULL||
2021-07-18 19:45:38
42
原创 双向循环链表
#ifndef _DLINKED_LIST_H__#define _DLINKED_LIST_H__#include <stdio.h>#include <stdlib.h>#include <stdbool.h>typedef int ETYPE;typedef struct DNode{ ETYPE elem; struct DNode *prev; //prior struct DNode *next; }DNode,*DLinkedList
2021-07-16 22:58:00
106
1
原创 单项链表的功能实现
#ifndef _SINGLE_LINK_LIST_H#define _SINGLE_LINK_LIST_H#include <stdio.h>#include <stdlib.h>#include <stdbool.h>typedef int EYYPE;typedef struct Node{ EYYPE elem; //元素 struct Node*next; //下一个节点的位置 }*SLinketList;#defi
2021-07-14 22:41:53
63
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人