![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
牛客刷题
浅浅雨墨
这个作者很懒,什么都没留下…
展开
-
排序:最小的k个数
(1)题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。(2)思路利用堆排序,基本思路是使用数组的前k个元素构建一个大顶堆(自底向上),堆的根结点是较大的值,然后依次将后面的元素与根结点比较,如果数组元素小于根结点,则用该元素替换根结点,自顶向下调整。如果该元素大于根结点,则继续比较数组后面的元素,直到比较完整个数组。(3)代码class Solution {public: vector<int>原创 2021-01-30 20:24:27 · 115 阅读 · 0 评论 -
数组:重建二叉树
(1)题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。(2)思路:(2)-(a):介绍前序遍历、中序遍历、后序遍历(2)-(a)-(1):前序遍历:先访问根结点,然后前序遍历左子树,再前序遍历右子树。例如:前序遍历的结果为:ABDGHCEIF(2)-(a)-(2):中序遍历:从根结点开始,先中序遍原创 2021-01-23 18:35:44 · 247 阅读 · 0 评论 -
链表:判断一个链表是否为回文结构
(1)题目描述:给定一个链表,请判断该链表是否为回文结构。(2)思路:对于单链表而言,判断一个链表是否为回文结构,可以先找出链表的中间结点,然后将链表的后半部分反转;从链表两端开始逐一比较,如果不相等则返回false。(2)-(a):如何寻找链表的中间位置,使用双指针设置一个快指针(pFast),一个慢指针(pSlow),快指针一次移动两个位置,慢指针一次移动一个位置,当快指针移到链表末端时,慢指针正好移动到链表的中间位置。如上图,对于如果链表结点个数为偶数,当慢指针移到中间结点时,pFast-原创 2021-01-21 00:51:56 · 1032 阅读 · 1 评论 -
链表:反转链表
1、题目描述:输入一个链表,反转链表后,输出新链表的表头。2、解题思路以v为当前结点,更改v->next指向u后,v->next不再指向w,所以在此之前要用一个结点pNext来保存w;同时也需要一个结点来保存当前结点的前一个结点,记为pPrev;反转链表后需要一个头结点来返回,记为pReverseHead,如果当前结点的下一个结点为NULL,则当前结点就是反转链表的头结点。3、代码/*struct ListNode { int val; struct ListNode *next原创 2021-01-20 22:46:34 · 82 阅读 · 0 评论