
C/C++
GOGP_nikto
这个作者很懒,什么都没留下…
展开
-
Leetcode144:二叉树前序遍历,morris遍历法
今天做了二叉树的前序遍历,题目要求是用迭代来做不用递归,因为迭代的效率比递归要高而且这也是很多公司面试题的一个要求。第一遍解题用的是栈来模仿递归代码:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nul原创 2020-10-27 16:25:23 · 348 阅读 · 0 评论 -
LeetCode:判断回文链表(空间O(1))
请判断一个链表是否为回文链表。进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?示例 1:输入:1->2输出:false示例 2:输入:1->2->2->1输出:true思路: 这题要做到空间O(1),时间O(n)的话只能先将链表从中间断开,再将后半部分的链表翻转与前面一个链表作比较.方法:找到中间节点可以用快慢指针,翻转的话用三个指针去改变指向就行.注意:为了不改变原来链表的结构,在判断完之后要把链表原创 2020-09-16 11:34:25 · 291 阅读 · 0 评论 -
C++中文文档下载
百度云链接:https://pan.baidu.com/s/1rtBmNxiRwm7LQXc5rRTiDQ提取码:2lnx原创 2020-09-12 10:59:53 · 659 阅读 · 1 评论 -
利用unique_ptr写一个链表(理解智能指针的自动释放功能)
#include<iostream>#include<string>#include<memory>using namespace std;//独有指针版的链表,带头结点template<typename T>struct Node{public: T data; //利用独有指针定义指向下一个节点的指针 unique_ptr<Node<T>>next; ~Node() { cout <<原创 2020-09-12 10:14:21 · 892 阅读 · 0 评论 -
C++浅谈深浅拷贝的区别
浅拷贝和深拷贝的区别在于浅拷贝只是将对象的值复制给另外一个对象,如果这时候他们有一个在堆区开辟空间的变量,那么这个堆区地址也会共享深拷贝是在赋值时是给变量重新开辟一个新的内存空间,这时候,对象之间的地址不共享核心在于堆区空间的开辟。虽然这个知识点看着很简单,但是还是建议大家画一下图和写一下代码,毕竟学习就像逆水行舟,你不进步,那就只能退不。刚开始复习这个考点,有不对的地方还希望大佬们斧正。浅拷贝:深拷贝:实验代码:#include<iostream>using namespa原创 2020-09-10 09:19:21 · 175 阅读 · 0 评论 -
TCP和多线程实现在线聊天室
github链接:https://github.com/jiezhilongchuan/-原创 2020-09-08 19:48:03 · 231 阅读 · 0 评论 -
动态规划:分割整数(leetcode343)
题目:给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。说明: 你可以假设 n 不小于 2 且不大于 58。递归思路:先是从子问题去看,如果我们从1开始,求出1的最大解,然后用1的最大解求2的最大解,循环下去就能求出n的最大解。例如分解3,从1开始,因原创 2020-08-23 20:55:08 · 261 阅读 · 0 评论 -
十个经典的排序算法与代码
一、算法分类二、算法复杂度分析原创 2020-08-19 09:34:26 · 245 阅读 · 1 评论 -
leetcode快乐刷题:汉诺塔问题
class Solution {public: void hanot(int n,vector<int>&A,vector<int>&B,vector<int>&C) { if(1==n) { C.push_back(A.back()); A.pop_back(); return; } hanot(n-1,A,C,B); C.push_back(A.back(原创 2020-08-19 08:51:06 · 188 阅读 · 0 评论 -
C语言版树结构复习
树结构简介:在将树结构之前我们要清楚了解数据结构的物理结构和逻辑结构这两个概念点,物理结构和存储结构。物理结构表示的形式是数据项或者数据元素在内存中的存储的形式。它分为两种:顺序存储和链式存储。这两种的区别在于顺序存储需要的是在内存中一块连续的内存空间让他使用。例如0x00000001->0x000000010;这区间必须是连续不断的。链式存储相反与顺序存储,它的每一个数据项也叫节点的地址在内存中可以连续也可以分散,他的地址分布是不可控的。例如第一个节点的地址是0x00000001,那么第二个原创 2020-08-16 21:54:56 · 404 阅读 · 1 评论 -
有序二叉树的实现(C语言版)
#include<stdio.h>#include<stdlib.h>#include<stdbool.h>//有序树的节点结构体//包含:数据域是节点自己的值,指针域:保存左孩子与右孩子的地址typedef struct TreeNode{ int data; struct TreeNode *left; struct TreeNode *right;}TreeNode;//为一个新的树的节点分配空间和初始化,返回一个结构体指针TreeNod原创 2020-08-16 21:53:30 · 374 阅读 · 0 评论 -
根据层序遍历和中序遍历构建二叉树(C++递归版)
题目描述给定二叉树T(树深度不超过H<=10,深度从1开始,节点个数N<1024,节点编号1~N)的层序和中序遍历,输出T从左向右叶子节点以及树先序和后序遍历序列输入描述:输入两行,分别代表层序和中序遍历结果,节点编号按单个空格分开输出描述:依次输出 从左向右叶子节点 ,先序, 后序 遍历 。 节点编号按空格分开示例1输入3 5 4 2 6 7 12 5 3 6 4 7 1输出2 6 13 5 2 4 6 7 12 5 6 1 7 4 3#include&l原创 2020-08-15 16:25:37 · 2499 阅读 · 0 评论 -
寻找下一个节点(中序遍历递归)
题目描述请设计一个算法,寻找二叉树中指定结点的下一个结点(即中序遍历的后继)。给定树的根结点指针TreeNode* root和结点的值int p,请返回值为p的结点的后继结点的值。保证结点的值大于等于零小于等于100000且没有重复值,若不存在后继返回-1。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : v原创 2020-08-15 14:47:41 · 287 阅读 · 0 评论 -
输出单层节点(双队列)
题目描述对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。给定二叉树的根结点指针TreeNode* root,以及链表上结点的深度,请返回一个链表ListNode,代表该深度上所有结点的值,请按树上从左往右的顺序链接,保证深度不超过树的高度,树上结点的值为非负整数且不超过100000。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(原创 2020-08-15 12:46:00 · 168 阅读 · 0 评论 -
二叉平衡树检查(思路清晰)
题目描述实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1。给定指向树根结点的指针TreeNode* root,请返回一个bool,代表这棵树是否平衡。思路总结:原本一开始我以为二叉平衡树作为有序树的进化版也要检查二叉树是否有序的,结果看了一眼别人写的发现都只判断左右子树的高度是否满足平衡就行了。后来才知道默认的都是有序的二叉树(0-0);/*struct TreeNode { int val; struct TreeNode *l原创 2020-08-14 20:19:34 · 182 阅读 · 0 评论 -
Leetcode快乐刷题:字符串相加
题目:给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。注意:num1 和num2 的长度都小于 5100.num1 和num2 都只包含数字 0-9.num1 和num2 都不包含任何前导零。你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/add-strings著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处原创 2020-08-03 16:52:36 · 141 阅读 · 0 评论 -
C实现strlen 、strcpy、 strcat、sttrcmp
size_t strlen(const char* src){assert(NULL != src);const char* tmp = src;while (*tmp)tmp++;return tmp - src;}char* strcpy (char* det, const char* src){assert(NULL != det && NULL != src);char* tmp = det;while (src)tmp++ = src++;return d原创 2020-07-28 09:03:22 · 171 阅读 · 0 评论 -
堆内存(二):定义二维数组
指针数组: 定义n*m的二维数组初始化:类型 *arr[n]for(int i=0;i<n;i++)arr[i]=(int *)malloc(sizeof(类型)*m);注意:每行的m的值可以不同,这样就是不规则的二维数组数组指针:类型 (*arr) [n]=(int( *)[n]) malloc(sizeof(类型)mn);注意:所谓的二维数组都是由一维数组模拟过来的...原创 2020-07-26 21:19:16 · 441 阅读 · 0 评论 -
牛客 密码截取
#include<iostream>#include<string>using namespace std;int fun(string str)//判断字符串是否是回文{ int len=str.size(); for(int i=0;i<len/2;i++) { if(str[i]!=str[len-i-1]) return 0; } return 1;}string get_原创 2020-07-25 20:14:18 · 187 阅读 · 0 评论 -
Linux基础(一):起源和相关目录
UNIX系统介绍1971年由于贝尔实验室的研究员 肯·汤普逊(发起人)和丹尼斯·里奇(研发) 合作开发,通用的操作系统,多用户、多任务、安全、稳定。主要应用各种大型服务器,如:电信、银行、各大公司的关键核心业务。苹果系统的MacOS、iOS都是以它作为内核,该系统收费,质量比较高。Linux系统介绍Linux的内核是仿照UNIX系统编写的,是林纳科斯.托马斯仿照UNIX系统写的期末作业,然后分享到FTP站点然后开源由全世界的程序共同努力开发出的一款操作系统,所以它的系统接口、命令都根UNIX通用原创 2020-07-20 21:46:41 · 127 阅读 · 0 评论 -
C 堆内存(一)
C编译器对内存的划分代码段(text):保存着程序的二进制指令和常量数据,该区的权限为只读,这部分区域的大小在程序运行前就已经确定,所以强行修改它会产生错误静态数据段(bss):保存没初始化过的全局变量和静态变量,程序每次运行前都会将该区域清零。数据段(data):存放初始化过的全局变量和静态变量栈:存放着局部变量和块变量。该区域是由系统管理开辟和释放,随着函数的调用分配内存,同时该区域大小有限,超出栈内存会产生栈溢出或者段错误的警告。堆:堆和栈是相反的概念。堆是由程序员自己申请自己管理原创 2020-07-20 21:26:39 · 245 阅读 · 0 评论 -
C/C++ 全排序理解
全排序的理解是对数列所有排列结果的运算,对于一个长度为n的数列来说,它的排列有n!种。我的理解是从数列的开头进行固定,每次向后固定元素,遍历到结尾的时候代表一种排列的可能,然后返回上一层,切换下一个数字继续深入排序例如: 1 2 3 4 ,固定 1 2 ,最后先以三开头,遍历到结尾打印,返回上一层,以4开头打印,再返回2所在的那一层,分别以 3 4开头进行遍历打印最后返回到1所在的那层 ,分别切换成2 3 4 开头进行上述遍历转换成图片就是:`在这里插入代码片``#include<std原创 2020-07-19 10:44:23 · 147 阅读 · 1 评论 -
递归实现C/C++快速排序
//从小到大排序//快排思路:选定一个基准值,将比基准值大的放在基准值右边,小的放在基准值左边。然后通过递归来讲序列的长度继续划分为左右两边,等到最后只剩两个元素的时候交换排序,不断递归到上一层进行排序。感觉和归并排序有点像,最后都是分为两个元素。时间复杂度大概是O(nlogn),空间复杂度:O(logn)稳定性:快速排序无法保证相等的元素的相对位置不变,因此它是不稳定的排序算法//二分查找:原理是对一个顺序的数列arr(lo,hi),从数列中间(mid)开始,中间元素arry[mid]与想要原创 2020-07-19 10:36:43 · 474 阅读 · 0 评论