刷题
你算哪块小饼饼干
进来看看?
展开
-
LeetCode84_柱状图中最大的矩阵
LeetCode84_柱状图中最大的矩阵题目描述这道题可以利用单调栈来解决,定义一个stack存储矩阵中连续增高的柱子,如果遇到不是增高的柱子,则开始计算入栈中的柱子的面积,不断更新ans记录其中面积最大的矩形,class Solution {public: int largestRectangleArea(vector<int>& heights) { //如果输入的数组只有一个元素,只需返回该数组这个元素即可 if(heights.原创 2021-10-02 14:07:24 · 210 阅读 · 0 评论 -
剑指offerⅡ86_分割回文子串
回溯法当处理到字符串的某个字符时,如果包含该字符在内的后面还有 n 个字符,那么当前面临 n 种选择,即分割出只包含该字符的长度为 1 的子字符串,分割出长度为 2 的子字符串,…,分割出长度为 n 的子字符串。因为题目要求分割出的子字符串为回文子字符串,所以这 n 个选择中为回文子串的选择都是符合要求的选择。例如分割字符串 “google”,先处理第一个字符 ‘g’,此时面临 6 个选择,分别为 “g”、“go”、“goo”、“goog”、“googl”、“google”,其中 “g” 和 “goog原创 2021-09-13 18:44:04 · 228 阅读 · 0 评论 -
剑指offer46_把数字翻译成字符串
剑指offer46_把数字翻译成字符串题目描述:如果对于两位数字的翻译不加上限制,我们可以发现翻译的方法数量增长很像青蛙跳台阶,用 i 标识数组中元素的下标,我们可以发现,字符串的第 i 位置:可以单独作为一位来翻译如果第 i - 1位和第 i 位组成的数字在 10 到 25 之间,可以把这两位连起来翻译所以可以得出动态规划转移方程代码如下:class Solution {public: int translateNum(int num) { string st原创 2021-08-23 12:29:55 · 129 阅读 · 0 评论 -
剑指offer47_礼物的最大价值
剑指offer47_礼物的最大价值问题描述:这道题最开始的我也是毫无头绪,我知道要用动态规划,却又不知从何下手,看了题解后才恍然大悟。我们可以再原grid上,对每一个元素所到达他的最大值 赋值给这个元素。利用转移方程从左上角开始遍历,每个元素位置的最大值,只能是和max(左边元素,上边元素)相加可得,所以可得下图列表所以右下角元素即为礼物的最大价值!代码如下:class Solution {public: int maxValue(vector<vector<in原创 2021-08-22 15:33:00 · 126 阅读 · 0 评论 -
剑指offer42_连续数组最大和
剑指offer42_连续数组最大和利用num数组记录子数组的起始下标和结束下标index记录子数组的"目前"起始下标dp记录目前子数组和ans记录目前子数组最大和#include <iostream>#include <vector>using namespace std;int maxSubArray(vector<int>& nums) { int num[2] = { 0 }; int res = -101, dp = -101,原创 2021-08-22 11:44:55 · 81 阅读 · 0 评论 -
剑指offer65_不用加减乘除做加法
剑指offer65_不用加减乘除做加法利用公式(a^b) ^ ((a&b)<<1)即:每次无进位求 + 每次得到的进位数--------我们需要不断重复这个过程,直到进位数为0为止;#include <iostream>using namespace std;int add(int a, int b) { while (b != 0) { int tmp = a ^ b; //特别注意c++中 负数”<<“会出错,所以要进行转化原创 2021-08-22 11:34:37 · 83 阅读 · 0 评论 -
剑指offer63_股票的最大受益问题
剑指offer63_股票的最大受益问题题目描述:这道题需要用到动态规划的知识,利用minPrices存储时间段内股票价值最小的那一天,利用maxMoney存储股票出售股票最大的收益,遍历prices容器,从前往后记录maxMoney最大的时候,即可得出股票的最大收益。class Solution {public: int maxProfit(vector<int>& prices) { //当输入prices为空的时候 if(prices.si原创 2021-08-21 17:07:58 · 122 阅读 · 0 评论 -
剑指offer26_树的子结构
剑指offer26_树的子结构基本思路是利用递归1.创建一个辅助函数判断两棵树是否相等2.递归遍历A树的每一个节点作为根结点和B树进行比较isSubStructure函数的返回值,若树 B 是树 A 的子结构,则必满足以下三种情况之一:以 节点 A 为根节点的子树 包含树 B ,对应 hasSubStructure(A, B);树 B 是 树 A 左子树 的子结构,对应 isSubStructure(A.left, B);树 B 是 树 A 右子树 的子结构,对应 isSubStructur原创 2021-08-21 13:10:38 · 123 阅读 · 0 评论 -
n进制转化为m进制
n进制转化为m进制最开始看到这个题的时候,我还在想有没有什么方法可以直接从n进制转化为m进制,但是我放弃了,所以还是使用了一步一步来的方法。首先将n进制转化为10进制,再将10进制转化为m进制。#include <iostream>using namespace std;//将n进制转化为10进制int NTOD(char *now_number,int now_base_system){ int sum = 0, weight = 1; int len = strlen(原创 2021-08-18 15:48:01 · 1743 阅读 · 0 评论 -
剑指offer53_0~n-1中缺失的数字
剑指offer53_0~n-1中缺失的数字这道题我感觉主要考察的二分查找算法,用L记录最左边元素下标,R记录最右边元素下标,mid记录L与R中间元素下标,对于下标mid来说,如果 nums[mid] == mid ,则说明L到mid之间的元素不存在缺失的数字,往右查找即可,反之往左查找。代码如下:class Solution {public: int missingNumber(vector<int>& nums) { if(nums.size() =原创 2021-08-17 17:58:49 · 97 阅读 · 0 评论 -
剑指offer58_反转单词顺序1
剑指offer58_反转单词顺序1我觉得这个题利用string的rfind()以及append()、erase()结合来使用比较方便且利于理解,当然这可能并不是最优解,输入:I have a phone输出:phone a have I这个题最开始做以为很简单,但后来我发现是我想多了,他需要适应的场景有很多,力扣上是这样描述的所以要做到消除掉字符串头、尾的空格,以及对于字符串中两单词间对于的空格也要给予删除,保留一个即可。代码如下:#include <iostream>#in原创 2021-08-17 12:56:07 · 197 阅读 · 0 评论 -
剑指offer39_数组中出现次数超过一半的数字(摩尔投票法)
题目描述:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 :输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2思路:摩尔投票法:核心理念为 票数正负抵消 ,一群人(数组的所有数字)被分成n组(相同的数字为一组),大家都是1换1,最后能剩下的win。那人数占绝对优势的那一组才能保证win,「绝对优势」指的是人数超过一半的那一组。等于一半,极限情况下,其他组的人都来和你1换1,那肯定被某个组捡。此方原创 2021-07-10 14:49:45 · 175 阅读 · 0 评论 -
剑指offer42_连续子数组的最大和
题目描述:输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。范围:1 <= arr.length <= 10^5-100 <= arr[i] <= 100思路:使用index变量,用来记录以第i个元素结尾的最大连续和的子数组的起始下标。 而原创 2021-07-10 16:03:25 · 143 阅读 · 0 评论 -
剑指offer22_链表中倒数第k个节点
题目描述:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.思路:Right和Lift俩指针都从头结点head开始while循环中Right先走k步然后while循环中Right原创 2021-07-10 14:25:07 · 135 阅读 · 0 评论 -
递归_8皇后问题
递归_8皇后问题问题描述:代码:运行结果:问题描述:八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。正确的结果应该是92种,代码:#include <iostream>using namespace std;//判断此位置是否有危险int notDanger(int row, int n, int (原创 2021-02-24 18:46:44 · 82 阅读 · 1 评论 -
剑指offer53_在排序数组中查找数字1
剑指offer53_在排序数组中查找数字1本题考察的主要为二分查找,但是和二分查找不同的是,本题** 要求返回等于该数字的个数** ,所以要做一个统计的作用代码如下:#include <iostream>#include <vector>using namespace std;int search(vector<int>& nums, int target) { //当nums只有一个元素的情况 if (nums.size() == 1) {原创 2021-08-17 12:34:17 · 125 阅读 · 0 评论