剑指
我不是宸哥
要为真理而斗争
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
JZ32 从上往下打印二叉树
不分行从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如输入{8,6,10,#,#,2,1},如以下图中的示例二叉树,则依次打印8,6,10,2,1(空节点不打印,跳过),请你将打印的结果存放到一个数组里面,返回方法一:层序遍历二叉树,以前也写过,用一个队列queue来辅助存储节点class Solution {public: vector<int> PrintFromTopToBottom(TreeNode* root) { if(!root){ ...原创 2022-03-30 16:32:55 · 627 阅读 · 0 评论 -
JZ31 栈的压入、弹出序列
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。1. 0<=pushV.length == popV.length <=10002. -1000<=pushV[i]<=10003. pushV 的所有数字均不相同方法一:使用一个辅助栈,根据入栈的顺序入原创 2022-03-30 16:13:25 · 914 阅读 · 0 评论 -
JZ30 包含min函数的栈
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的 min 函数,输入操作时保证 pop、top 和 min 函数操作时,栈中一定有元素。此栈包含的方法有:push(value):将value压入栈中pop():弹出栈顶元素top():获取栈顶元素min():获取栈中最小元素方法一:要求找到栈中最小元素的时间复杂度是1,但是遍历一遍的时间复杂度是n,所以需要用空间换时间,再构造一个辅助栈,当新加入的val小于辅助栈栈顶元素时辅助栈push(val),当新加入元素大于辅助原创 2022-03-30 13:47:52 · 186 阅读 · 0 评论 -
顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。方法一:以左上点和右下点确定一个矩阵,一圈一圈的打印class Solution {public: vector<int> printMatrix(vector<vector<int> > matrix) { if(matrix.size() ==0 || matrix[0].size()==0){ return {}; } ...原创 2022-03-29 16:36:43 · 356 阅读 · 0 评论 -
JZ28 对称的二叉树
给定一棵二叉树,判断其是否是自身的镜像(即:是否对称)方法一:递归class Solution {public: bool isduicheng (TreeNode* root1,TreeNode* root2){ if(!root1 && !root2) return true; if(!root1 || !root2) return false; return (root1->val == root2->val)...原创 2022-03-29 15:54:13 · 837 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面(一)
输入一个长度为 n 整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前面部分,所有的偶数位于数组的后面部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。数据范围:0 \le n \le 50000≤n≤5000,数组中每个数的值 0 \le val \le 100000≤val≤10000要求:时间复杂度 O(n)O(n),空间复杂度 O(n)O(n)进阶:时间复杂度 O(n^2)O(n2),空间复杂度 O(1)O(1)方法一:使用两个数组一个储存奇数,一个储存偶原创 2022-03-24 18:20:47 · 608 阅读 · 0 评论 -
JZ18 删除链表的节点
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。1.此题对比原题有改动2.题目保证链表中节点的值互不相同3.该题只会输出返回的链表和结果做对比,所以若使用 C 或 C++ 语言,你不需要 free 或 delete 被删除的节点数据范围:0<=链表节点值<=100000<=链表长度<=10000方法一:简单哈,先哑节点不多说了class Solution {public: ListNode* de..原创 2022-03-23 21:12:34 · 105 阅读 · 0 评论 -
JZ16 数值的整数次方
实现函数 double Power(double base, int exponent),求base的exponent次方。注意:1.保证base和exponent不同时为0。2.不得使用库函数,同时不需要考虑大数问题3.有特殊判题,不用考虑小数点后面0的位数。方法一:老传统,先暴力来一波(可惜时间太长class Solution {public: double Power(double b, int n) { if (n < 0) { ...原创 2022-03-23 20:43:08 · 3025 阅读 · 0 评论 -
JZ15 二进制中1的个数
输入一个整数 n ,输出该数32位二进制表示中1的个数。其中负数用补码表示。数据范围:- 2^{31} <= n <= 2^{31}-1−231<=n<=231−1即范围为:-2147483648<= n <= 2147483647−2147483648<=n<=2147483647方法一:使用&运算符,每次将1右移一位(<<。class Solution {public: int NumberOf1(int ...原创 2022-03-23 17:08:53 · 265 阅读 · 0 评论 -
JZ13 机器人的运动范围
地上有一个 rows 行和 cols 列的方格。坐标从 [0,0] 到 [rows-1,cols-1] 。一个机器人从坐标 [0,0] 的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于 threshold 的格子。 例如,当threshold为 18 时,机器人能够进入方格 [35,37] ,因为 3+5+3+7 = 18。但是,它不能进入方格 [35,38] ,因为 3+5+3+8 = 19 。请问该机器人能够达到多少个格子?方法一:深度搜索...原创 2022-03-22 16:41:36 · 119 阅读 · 0 评论 -
JZ12 矩阵中的路径
描述请设计一个函数,用来判断在一个n乘m的矩阵中是否存在一条包含某长度为len的字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。数据范围:0 \le n,m \le 20\0≤n,m≤20,1\le len \le 25\1≤len≤25方法一:深度搜索,递归class Solution {public: bool hasPath(vector<ve...原创 2022-03-22 15:28:16 · 613 阅读 · 0 评论 -
JZ9 用两个栈实现队列
描述用两个栈来实现一个队列,使用n个元素来完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。数据范围:n\le1000n≤1000要求:存储n个元素的空间复杂度为O(n)O(n),插入与删除的时间复杂度都是O(1)O(1)方法一:写过很多次了,经典老题,闭着眼睛写class Solution{public: void push(int node) { ...原创 2022-03-22 09:22:37 · 153 阅读 · 0 评论 -
JZ3 数组中重复的数字
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。存在不合法的输入的话输出-1数据范围:0\le n \le 10000 \0≤n≤10000进阶:时间复杂度O(n)\O(n) ,空间复杂度O(n)\O(n)方法一:这种题散哈希还是非常合适的class Solution {public:原创 2022-03-21 15:32:53 · 292 阅读 · 0 评论 -
JZ6 从尾到头打印链表
输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。如输入{1,2,3}的链表如下图:返回一个数组为[3,2,1]0 <= 链表长度 <= 10000方法一:正序遍历一遍链表用栈stack储存,利用栈的FILO性质class Solution {public:vector<int> printListFromTailToHead(ListNode* head) {vector<int&g...原创 2022-03-21 15:30:34 · 666 阅读 · 0 评论
分享