自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 资源 (1)
  • 收藏
  • 关注

原创 对称的二叉树

1、题目请实现一个函数,用来判断一棵二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。2、解题1递归解法/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution

2020-09-29 17:52:09 48

原创 滑动窗口的最大值

1、题目给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2,

2020-09-29 15:38:41 88

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

1、题目在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->52、解题1头节点和非头节点重复分别处理/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }}

2020-09-28 22:09:31 56

原创 二叉树中和为某一值的路径

1、题目输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。2、解题1递归解法/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {

2020-09-28 18:00:38 71

原创 和为S的连续正数序列

1、题目小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!2、解题1从1加到大于等于sum的位置,根据这个位置前后进行微调class Solution {public: vector<vecto

2020-09-28 14:40:19 58

原创 按之字形顺序打印二叉树

1、题目请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。2、解题使用两个栈(也可以使用一个队列,一个栈)/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NUL

2020-09-27 22:48:00 57

原创 树的子结构

1、题目输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)2、解题/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: bool HasSubtree(TreeNode* p

2020-09-27 19:19:17 48

原创 重建二叉树

1、题目输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。2、解题/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * Tr

2020-09-27 17:04:36 47

原创 二叉搜索树与双向链表

1、题目输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。2、解题1递归/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: TreeNode* C

2020-09-27 16:07:28 46

原创 二叉树的下一个节点

1、题目给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。2、解题分析二叉树的下一个节点,一共有以下情况:1.二叉树为空,则返回空;2.节点右孩子存在,则设置一个指针从该节点的右孩子出发,一直沿着指向左子结点的指针找到的叶子节点即为下一个节点;3.节点不是根节点。如果该节点是其父节点的左孩子,则返回父节点;否则继续向上遍历其父节点的父节点,重复之前的判断,返回结果。/*struct TreeLinkNode

2020-09-26 23:38:10 279

原创 二进制中1的个数

1、题目输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。2、解题1(1)正数右移,最高位补1(2)因为负数右移时,在最高位补得是1(3)int四个字节,每个字节8位class Solution {public: int NumberOf1(int n) { int count = 0; int num = 32; while(n != 0&&num>0){ i

2020-09-26 22:49:24 68

原创 平衡二叉树

1、题目输入一棵二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树2、解题1class Solution {public: bool IsBalanced_Solution(TreeNode* pRoot) { if(pRoot == NULL)return true; bool leftFlag = IsBalanced_Solution(pRoot->left); bool right

2020-09-26 18:40:33 70

原创 不用加减乘除做加法

1、题目写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。2、解题首先看十进制是如何做的: 5+7=12,三步走第一步:相加各位的值,不算进位,得到2。第二步:计算进位值,得到10. 如果这一步的进位值为0,那么第一步得到的值就是最终结果。第三步:重复上述两步,只是相加的值变成上述两步的得到的结果2和10,得到12。同样我们可以用三步走的方式计算二进制值相加: 5-101,7-111 第一步:相加各位的值,不算进位,得到010,二进制每位相加就相当于各位做异或操作,

2020-09-26 17:09:30 131

原创 跳台阶

1、题目一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。2、解题对于本题,前提只有 一次 1阶或者2阶的跳法。a.如果两种跳法,1阶或者2阶,那么假定第一次跳的是一阶,那么剩下的是n-1个台阶,跳法是f(n-1);b.假定第一次跳的是2阶,那么剩下的是n-2个台阶,跳法是f(n-2)c.由a\b假设可以得出总跳法为: f(n) = f(n-1) + f(n-2)d.然后通过实际的情况可以得出:只有一阶的时候 f(1) = 1

2020-09-26 16:55:10 64

原创 构建乘积数组

1、题目给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2];)对于A长度为1的情况,B无意义,故而无法构建,因此该情况不会存在。2、解题1两层循环class Solution {public: vector<int&

2020-09-26 16:29:57 49

原创 数组中的逆序对

1、题目在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%10000000072、解题这是一个归并排序的合并过程,主要是考虑合并两个有序序列时,计算逆序对数。对于两个升序序列,设置两个下标:两个有序序列的末尾。每次比较两个末尾值,如果前末尾大于后末尾值,则有”后序列当前长度“个逆序对;否则不构成逆序对。然后把较大值拷贝到辅助数组的末尾,即最终要将两个有序序列合并到辅助

2020-09-25 22:58:40 107

原创 包含min函数的栈

1、题目定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。2、解题利用栈实现class Solution {public: stack<int>st; stack<int>minSt; void push(int value) { st.push(value); if(minSt.empty()|| minSt.top()>value){

2020-09-25 16:53:30 47

原创 斐波那契数列

1、题目大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。n<=392、解题1递归解法class Solution {public: int Fibonacci(int n) { if (n<=0) return 0; if (n<=2) return 1; return Fibonacci(n-1)+Fibon

2020-09-25 14:20:22 199

原创 数据流中的中位数

1、题目如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。2、解题1时间复杂度O(n),数据流插入的时候保证有序class Solution {public: vector<int> stream; void Insert(int num)

2020-09-23 23:52:18 780

原创 字符流中第一个不重复的字符

1、题目请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。2、解题1字符作为数组的下标,该下标的计数加1class Solution{public: //Insert one char from stringstream queue<char> charQueue; int res[256] = {0};

2020-09-23 22:49:38 47

原创 数组中出现次数超过一半的数

1、题目数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。2、解题1:class Solution {public: int MoreThanHalfNum_Solution(vector<int> numbers) { if(numbers.size()==0)return 0; if(n

2020-09-23 22:22:17 157

原创 数字在升序数组中出现的次数

1、题目统计一个数字在升序数组中出现的次数。2、解题1时间复杂度O(n)class Solution {public: int GetNumberOfK(vector<int> data ,int k) { int len = data.size(); int count = 0; int i = 0; for(i = 0;i<len;i++){ if(data[i] == k){

2020-09-23 20:54:10 91

原创 丑数

1、题目把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。2、解题1,运行超时顺向思路class Solution {public: int GetUglyNumber_Solution(int index) { if(index <= 0)return 0; int flag = 0; int num =

2020-09-23 14:11:11 43

原创 数组中的重复的数字

1、题目在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。2、解题1时间复杂度O(n*n)class Solution {public: // Parameters: // numbers: an array of integers //

2020-09-22 21:20:07 53

原创 数组中只出现一次的数字

1、题目一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。2、解题1时间复杂度O(n*n)class Solution {public: void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) { int len = data.size(); int count = 0; bool flag = true;

2020-09-22 20:10:30 42

原创 第一个只出现一次的字符

1、题目在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)2、解题1时间复杂度O(n*n)class Solution {public: int FirstNotRepeatingChar(string str) { int count = 0; int len = str.size(); for(int i = 0

2020-09-22 19:25:37 61

原创 调整数组顺序使奇数位于偶数前面

1、题目输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。2、解题1空间复杂度为O(n)class Solution {public: void reOrderArray(vector<int> &array) { int len = array.size(); vector<int> tmp;

2020-09-22 16:42:36 51

原创 把数组排成最小的数

1、题目输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。2、解答class Solution {public: string PrintMinNumber(vector<int> numbers) { string result; int len = numbers.size(); if(len == 0)

2020-09-22 15:49:44 52

原创 翻转单词顺序列

1、题目例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?2、解题1:class Solution {public: string ReverseSentence(string str) { string result; string tmp; int i = str.size()-1;

2020-09-21 21:41:34 58

原创 整数中1的个数

1、题目求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)2、解题1:class Solution {public: int NumberOf1Between1AndN_Solution(int n) { int count = 0; for(int i = 1;i<=n;i++){ count += FindNum(i); } return count; }

2020-09-21 18:47:08 310

原创 ping 过程学习

1、简述一般我们用 ping查看网络情况,主要是检查两个指标:第一个是看看是不是超时第二个看看是不是延迟太高如果超时那么肯定是网络有问题(禁 ping情况除外);如果延迟太高,网络情况肯定也是很糟糕的。2、协议ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。ICMP 协议就是为了更高效的转发 IP数据报和提高交付成功的机会。ARP协议,在一个局域网中,计算机

2020-09-20 15:22:54 360

原创 复杂链表的复制

1、题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)2、题目实现方法一:(1)先实现部分拷贝,将链表进行拷贝,随机指针指向原链表节点(2)处理随机指针/*struct RandomListNode { int label; struct RandomListNode *next, *ra

2020-09-18 00:28:11 50

原创 全排列和全组合

1、全排列题目输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。分析1、把整个字符串视为第一个字符和后来的字符的组合2、每次确定一个元素,和后面的元素依次兑换https://zhuanlan.zhihu.com/p/34114529代码class Solution {public: vector<string> result; v

2020-09-16 10:14:09 1060 1

转载 Go协程调度

1、什么是协程?对于进程、线程,都是有内核进行调度,有CPU时间片的概念,进行抢占式调度。协程,又称微线程,纤程。英文名Coroutine。协程的调用有点类似子程序,如程序A调用了子程序B,子程序B调用了子程序C,当子程序C结束了返回子程序B继续执行之后的逻辑,当子程序B运行结束了返回程序A,直到程序A运行结束。但是和子程序相比,协程有挂起的概念,协程可以挂起跳转执行其他协程,合适的时机再跳转回来。2、线程调度原理N:1模型,多个用户空间线程在1个内核空间线程上运行。优势是上下文切换非常快,因为这些线

2020-09-14 21:04:08 922

原创 最长递增子序列

1、题目描述给定数组arr,设长度为n,输出arr的最长递增子序列。(如果有多个答案,请输出其中字典序最小的)2、解题思路代码可以分成两个部分:part1:确定最长子序列,并记录位置。part2:通过位置倒序,确定字典序最小的那组。注意:(1)在子序列中替换不影响子序列的排序且子序列最小的数(2)记录数字在子序列数组中的位置3、代码class Solution {public: /** * retrun the longest increasing subsequen

2020-09-13 23:01:45 447

转载 Go语言实现简单的TCP、UDP链接

1、Dial()函数:建立网络连接1) TCP 链接:conn, err := net.Dial("tcp", "192.168.0.10:2100")2) UDP 链接:conn, err := net.Dial("udp", "192.168.0.12:975")3) ICMP 链接(使用协议名称):conn, err := net.Dial("ip4:icmp", "www.baidu.com")4) ICMP 链接(使用协议编号):conn, err := net.Dial("

2020-09-13 12:35:28 729

原创 动态规划

1、动态规划动态规划求解问题的四个特征:①求一个问题的最优解;②整体的问题的最优解是依赖于各个子问题的最优解;③小问题之间还有相互重叠的更小的子问题;④从上往下分析问题,从下往上求解问题;2、练习...

2020-09-13 12:21:40 92

原创 go sort使用

1、sort介绍sort包提供了排序切片和用户自定义数据集以及相关功能的函数。sort包主要针对[]int、[]float64、[]string、以及其他自定义切片的排序。sort 包 在内部实现了四种基本的排序算法:插入排序(insertionSort)、归并排序(symMerge)、堆排序(heapSort)和快速排序(quickSort); sort 包会依据实际数据自动选择最优的排序算法。所以我们写代码时只需要考虑实现 sort.Interface 这个类型就可以了。接口type Inte

2020-09-12 13:04:53 7094

原创 go slice使用

1、slice和map并发不安全及解决方法切片并发不安全,解决办法加锁var s []intvar lock sync.Mutex //互斥锁func appendValue(i int) { lock.Lock() //加锁 s = append(s, i) lock.Unlock() //解锁}func main() { for i := 0; i < 10000; i++ { go appendValue(i) } //sort.Ints(s) //给切片排序,先排

2020-09-11 22:16:40 238

原创 go语言Map使用

1、map为什么是无序的查看资料后,我才发现在go 1之前,两次遍历是相同的,但是为什么官方要改掉呢?其实是为了安全性和稳定性,go开发组发现有些程序员已经开始依赖遍历顺序稳定(不是有序)这个特性来开发程序,这其实并不好,因为这个“稳定”因平台不同而不同,在 win 上可能是 1342,但是在linux上可能就是4312。这会导致程序不可移植,因此go要求开发者自己实现稳定有序的遍历。https://www.cnblogs.com/Jun10ng/p/12771077.html为什么 Go map

2020-09-11 12:44:53 155

空空如也

空空如也

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

TA关注的人

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