摘要:
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 必须在原数组上操作,不能拷贝额外的数组。 尽量减少操作次数。 一个指针指向最左侧的零,一个int记录已经遇到的0的长度;如果下一个是0,就直接把长度+1;如果不是,就交换最左侧的零和nums[i],然后l 阅读全文
摘要:
https://www.cnblogs.com/Braveliu/p/7372714.html 写的非常好 阅读全文
摘要:
段式回文 其实与 一般回文 类似,只不过是最小的单位是 一段字符 而不是 单个字母。 举个例子,对于一般回文 "abcba" 是回文,而 "volvo" 不是,但如果我们把 "volvo" 分为 "vo"、"l"、"vo" 三段,则可以认为 “(vo)(l)(vo)” 是段式回文(分为 3 段)。 阅读全文
摘要:
给定一个二叉树,检查它是否是镜像对称的。 先创建一个镜像的二叉树,即交换二叉树的左右子树,然后比较二叉树的异同即可。 注意判断异同的时候origin和new都可能单独为nullptr,不要漏掉情况 1 /** 2 * Definition for a binary tree node. 3 * st 阅读全文
摘要:
给定一个非空的整数数组,返回其中出现频率前 k 高的元素。 用最小堆解决。先用map记录每个元素的出现次数,然后循环往最小堆中压入,如果堆中节点数量大于k了就弹出堆顶。 1 class Solution { 2 public: 3 vector<int> topKFrequent(vector<in 阅读全文
摘要:
输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。 要求时间复杂度为O(n)。 很简单的一道题, 但是犯了不少错误,主要在于ret和curmax的初值。每一步都要和ret比较一下。 1 class Solution { 2 public: 3 阅读全文
摘要:
给定一个二叉树,确定它是否是一个完全二叉树。 百度百科中对完全二叉树的定义如下: 若设二叉树的深度为 h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。(注:第 h 层可能包含 1~ 2h 个节点。) 自己用的是本方法,先 阅读全文
摘要:
给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 示例: 给你这个链表:1->2->3->4->5 当 k = 2 时,应当返回: 2->1->4->3->5 当 k 阅读全文
摘要:
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。 说明: 叶子节点是指没有子节点的节点。 示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1 递归就可以,但还是要注意一个是不能地轨道 阅读全文
摘要:
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例: 输入: [1,2,3,null,5,null,4]输出: [1, 3, 4]解释: 1 < / \2 3 < \ \ 5 4 < 可以选择bfs或者dfs。这里用bfs,用queue实现 1 /** 阅读全文