牛客题霸
晚安何先生
开发练习生
展开
-
NC15 求二叉树的层序遍历
思路:1.创建一个队列,将树存入队列;2.遍历队列,一层一层取出元素,需要借助临时的树,然后当左右孩子不为空,更新队列,将这一层元素存入一维vector。3.遍历完一层,将上一层数据存入二维vecctor,重新计算队列的大小,获取新的一层数据。上代码:/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */class Solution {...原创 2021-08-16 15:23:28 · 116 阅读 · 0 评论 -
NC40 两个链表生成相加链表
链表1:9->3->7 链表2:6->3 新链表:1->0->0->0;简单来说就是数相加,得到的数,输出为链表形式;思路:1.首先翻转链表,翻转后:7->3->9,3->6;2.遍历:获取到链表的第一个数,7+3=10;进行进位处理,cnt=(7+3)/10,cnt为需要进位多少位。之后创建新的链表节点,将记录下sum%10 节点,插入新链表。如果两个链表都不为空,head=heda-&g...原创 2021-08-16 11:26:11 · 70 阅读 · 0 评论 -
NC19 子数组的最大累加和问题
思路:1.首先定义一个db数组 其中db[i]的值代表到第i位的时候,以arr[i]结尾的连续子数组的最大累加和;当i=0时,db[0]=arr[0];2.返回max(0,db[i-1])+arr[i];相当于,如果是负数,直接用零进行比较上代码:class Solution {public: /** * max sum of the subarray * @param arr int整型vector the array * @return ...原创 2021-08-16 10:44:43 · 146 阅读 · 0 评论 -
NC41 最长无重复子数组
首先:题意;无重复指的是值无重复,连续指的是下标连续。思路:1.首先是题意需要查重,去重,选用set。2.定义两个变量,一个变量控制左边界,一个控制右边界,遍历,数组元素在set中没有,就将数组元素加入set,右边界加一,如果set中已经有了这个元素,删除,左边界改变,左边界加一。遍历结束记录返回就可以。上代码:class Solution {public: /** * * @param arr int整型vector the array * ..原创 2021-08-16 10:24:56 · 285 阅读 · 0 评论 -
NC70 单链表的排序
思路:1.首先将链表中的元素,遍历插入vector中,2. 将vector升序处理;3.一边从尾到头遍历vecctor,一边将遍历的元素插入链表;疑问:已经升序完成了,为什么还要从尾到头插入链表,这里好像是因为链表创建节点是从后往前的。上代码:/** * struct ListNode { * int val; * struct ListNode *next; * }; */class Solution {public: /** * ..原创 2021-08-13 17:47:59 · 149 阅读 · 0 评论 -
NC156 数组中只出现一次的数(其它数出现k次)
思路:利用哈希表,遍历数组统计数字出现的次数,用哈希表存储;再次遍历输出只出现一次的数字:上代码:class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param arr intvector * @param k int * @return int */ int foundOnceNumber(vect...原创 2021-08-13 16:17:42 · 122 阅读 · 0 评论