自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 山羊与跑车问题

1、问题描述:如果有三个门,其中两个门后面是羊,一个门后面是跑车。选到跑车的话,你就可以直接开走跑车。首先你先选一个门。然后主持人会打开一扇有山羊的门,问你换还是不换?2、解答:换为什么要换?数学的方法我不知道,但是不换的话,你第一次选到跑车的概率是1/3。所以你选到跑车的概率就是1/3.要是换的话,第一次选到山羊的概率是2/3,而主持人帮你打开了另一个山羊门,所以选到跑车的概率就是2/3。所以还是换,换的话就是2/3。不换的话就是1/3。...

2021-07-19 17:39:49 928

原创 找到数组中只出现一次的三个数

题目描述:在一个数组中,数字都是两两成对出现的,只有三个数组出现一次,请找到这三个数。解题思路:1、如果是只有两个数出现一次如果只有两个数字出现一次,首先将数组中的每一个数字进行异或,得到一个数字x,因为两个相同的数字进行异或结果是0,并且0异或任意一个数字等于原来那个数字。所以x也就表示那两个只出现一次的数字的异或。并且不等于0.因为两个数字不相等,所以必然x不等于0。根据x的比特位某一位是1,表示这两个数字该比特位不一样将数组进行分类,在依次求每个分类中的出现一次的数字即可(直接将这个数

2021-07-07 21:20:24 219

原创 内存分配方式

一、内存分配方式内存分配有三种方式:1、从静态存储区分配。这种方式是在程序编译的时候已经分配好,并且这块内存在程序的整个运行期间都存在。如全局变量,static变量。2、在栈上创建。在执行函数的时候,函数内局部变量的存储单元都可以在栈上创建,当函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。3、从堆上分配,或者叫做动态内存分配。程序运行的时候,使用new/malloc申请任意多少的内存,程序员负责在何时使用delete/free释放内存。

2021-03-26 15:59:13 5129 1

原创 148. 排序链表

题目描述:给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。进阶:你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?示例 1:输入:head = [4,2,1,3]输出:[1,2,3,4]解题思路:1、可以将链表的值保存在数组里面,再修改链表的值就可以了。不过效率不是很高,不提倡。class Solution {public: ListNode* sortList(ListNode* head) { vec

2021-03-18 11:26:29 108

原创 23. 合并K个升序链表

题目描述:给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[1->4->5,1->3->4,2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6解题思路:1、按照正常的思路,先定义一个合并

2021-03-13 15:59:48 85

原创 1004. 最大连续1的个数 III

前言:上次面试,人家面试官问了我这一道题,当时脑子作热想不出来怎么写。现在看看这道题发现滑动窗口就可以了,并不难。题目描述:给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 。返回仅包含 1 的最长(连续)子数组的长度。示例 1:输入:A = [1,1,1,0,0,0,1,1,1,1,0], K = 2输出:6解释:[1,1,1,0,0,1,1,1,1,1,1]粗体数字从 0 翻转到 1,最长的子数组长度为 6。解题思路:维护一个滑动窗口,滑动窗口里

2021-03-12 11:38:58 58

原创 金典:面试题 17.18. 最短超串

题目描述:假设你有两个数组,一个长一个短,短的元素均不相同。找到长数组中包含短数组所有的元素的最短子数组,其出现顺序无关紧要。返回最短子数组的左端点和右端点,如有多个满足条件的子数组,返回左端点最小的一个。若不存在,返回空数组。示例:输入:big = [7,5,9,0,2,1,3,5,7,9,1,1,5,8,8,9,7]small = [1,5,9]输出: [7,10]输入:big = [1,2,3]small = [4]输出: []解题思路:这道题就是滑动窗口的经典题目,我们首先

2021-02-18 21:15:47 171

原创 力扣hot100-739. 每日温度

题目描述:请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。解题思路:1、首先看到这一题最常想

2020-12-27 21:54:15 145 2

原创 力扣hot100 - 338. 比特位计数

题目描述:给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。示例 1:输入: 2输出: [0,1,1]示例 2:输入: 5输出: [0,1,1,2,1,2]进阶:给出时间复杂度为O(n*sizeof(integer))的解答非常容易。但你可以在线性时间O(n)内用一趟扫描做到吗?要求算法的空间复杂度为O(n)。你能进一步完善解法吗?要求在C++或任何其他语言中不使用任何内置函数(如 C++ 中的 __bu

2020-12-24 10:50:49 103

原创 力扣hot100-309. 最佳买卖股票时机含冷冻期

题目描述:给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。​设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。示例:输入: [1,2,3,0,2]输出: 3解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]解题思路:考虑每一天的状态,一天只有手里有股票和没有股票两种状态:dp[i

2020-12-23 11:09:02 75

原创 力扣hot100-239. 滑动窗口最大值

题目描述:给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7]解释:滑动窗口的位置 最大值[1 3 -1] -3 5 3 6 7 31 [3 -1 -3] 5 3 6 7

2020-12-17 11:53:37 89

原创 力扣hot00-279. 完全平方数

题目描述:给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例 1:输入: n = 12输出: 3解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9.解题思路:这道题一开始做的时候想的是能不能直接找到什么规律,常规方法解出来,但是找不到,写了一下代码也还是错的就去看题解去了。这题是一道动态规划问题,找到动态规划的思路:首先随便考虑一个数,12

2020-12-17 10:53:15 84

原创 快速排序

快速排序主要思想是每次操作选一个值使得数组左边的数小于等于这个数,右边的数大于这个数。首先选择一个基准,我的话比较喜欢选数组最左边的元素,然后利用两个指针一个从最左边开始,一个从最右边开始。当右边的指针小于等于基准,则停下。当左边的指针大于基准则停下。此时,右边的大于基准,左边的小于基准,交换两个的值。重复以上操作直到两个指针相遇。此时可以知道相遇位置的左边都小于等于基准,相遇位置的右边都大于基准。但是相遇的位置呢?可以这么考虑:因为我们是先移动右指针,只要i<j且它对应的值大于基准就会一直左移。

2020-12-14 10:55:25 100

原创 力扣hot100 - 124二叉树中的最大路径和

题目描述:解题思路:在做这一题的时候,前面做过了将二叉树转化为单向链表的题目,那一题是利用后序遍历将每一个叶子节点变成单向链表,用了后序遍历的方式。代码如下:class Solution {public://首先递归进入左子树,找到一个一个根节点并且,根节点的左节点保留,右节点也保留,设置一个p等于左节点,将p循环到左节点的最右节点,将p->right = root->right,在将根节点的右节点设置为左节点。在root->right = build(root->ri

2020-12-13 14:19:55 189

原创 二叉树的中序遍历

递归实现:中序遍历的顺序是:左中右。代码如下:class Solution {public: vector<int> ret; vector<int> inorderTraversal(TreeNode* root) { inorder(root); return ret; } void inorder(TreeNode* root){ if(root==nullptr)return;

2020-12-10 22:39:34 125

原创 hot100-39. 组合总和

题目描述:给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。示例 1:输入:candidates = [2,3,6,7], target = 7,所求解集为:[[7],[2,2,3]]示例 2:输入:candidates = [2,3,5], target =

2020-12-05 13:48:02 91

原创 top100-11. 盛最多水的容器

题目描述:给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。解题思路:拿到题目的时候我想的就是暴力解法,但是转念一想,暴力解法肯定超时。后来就想到能不能使用滑动窗口,也没有思路,就去看答案了。参考了一个大神的解法:同样的,j–也会一样的操作,覆盖当前一列。代码如下:class Solu

2020-12-02 19:25:27 52

原创 剑指 Offer 33. 二叉搜索树的后序遍历序列

题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。示例:参考以下这颗二叉搜索树:示例 1:输入: [1,6,3,2,5]输出: false示例 2:输入: [1,3,2,6,5]输出: true解题思路:本题采用递归的方式求解,考虑二叉搜索树的后序遍历,后序遍历的顺序为左右中,所以根节点必定是数组最后一个数。从左往后遍历数组,直到找到第一个比根节点大的数,此时左边的都是左子树(

2020-12-02 15:58:14 47

原创 剑指offer26-树的子结构

题目描述:输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。解题思路:考虑树B是不是树A的子结构,那么对于树B的根节点,树A找到一个节点值与树B相等,而且树A的该节点后面的值与树B都要相等。有了这个想法就可以考虑些代码。class Solution {public: bool isSubStructure(TreeNode* A, TreeNode* B) { bool ret = f

2020-11-30 21:05:21 56

原创 剑指offer07-重建二叉树

题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出:前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下二叉树:解题思路:首先考虑先序遍历,先序遍历的顺序是:中->左->右。因此中序数组的第一个数值肯定是二叉树的根节点。再考虑中序遍历,中序遍历的顺序是:左->中->右,因此查找先序遍历第一个数值在中序数组中的位置,如果是

2020-11-29 16:11:01 71

原创 剑指 Offer 36. 二叉搜索树与双向链表

题目描述:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。以下面的二叉搜索树为例:我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。解题思路:考虑对二叉搜索树变成双向链表,二叉搜索树的性质可知,对于每一个根节点其左子树的所有节点都小于根节点,右子树所有节点都大于根节点。而二叉树的中序遍历的结果就是从小到大排列。考虑

2020-11-16 17:08:59 41

原创 剑指 Offer 44. 数字序列中某一位的数字

题目描述:数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。示例1:输入:n = 3输出:3示例2:输入:n = 11输出:0解题思路:考虑输入的一个数字,以256为例,个位数字1-9占了9位,十位数字10-99共有90个数占了180位,百位数字100-999共有900个数占了900*3=2700位。因此对于一个输入的数字我们先考虑它最大位

2020-11-15 16:31:14 43

原创 剑指 Offer 47. 礼物的最大价值

题目描述:在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?示例:输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 12解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物解题思路:该题考虑动态规划,考虑每个位置的转移方程有:dp[i][j] = max(dp[i-1][j],

2020-11-14 18:22:08 39

原创 剑指offer48:最长不含重复的字符字串

剑指offer48:最长不含重复的字符字串题目:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。示例:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。解题思路:利用双指针加哈希map来求解。哈希map来记录字符及其下标unordered_map<char,int> m //字符,下标。遍历的时候判断当前字符是否是在m中存在,如果存在就让left指向重复字符的下一个字符。如果不存在right指

2020-11-12 11:32:37 41

原创 C++实现汉诺塔以及勒让德多项式

**C++实现汉诺塔以及勒让德多项式**1、汉诺塔的实现问题描述:有三根针A,B,C。A针上有n个盘子,盘子大小不等,大的在下,小的在上。要求把这n个盘子从A针移动到C针,在移动过程中可以借助B针,每次只允许移动一个盘子,且在移动过程中在三根针上都保持大盘在下,小盘在上。分析:假设A针上只有一个盘子,那么就直接移动到C针上就可以了。考虑A针有两个盘子,就需要先把上面的的小盘先移动到B针上,再将大盘移动到C针,最后把B针上的小盘移动到C针上。那么对于有n(n>2)个盘子思路还是一样,先把上面的

2020-07-11 15:21:59 855

空空如也

空空如也

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

TA关注的人

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