自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 leetcode 11-20

leetcode 11-2011.盛最多水的容器解题思路单调栈+二分首先可以想到一个贪心的思路:对于每个候选的右边界j,它应该匹配的左边界i是最靠左的且满足h[i]>=h[j]的那个位置(当然还有另外一种情况,左侧边界i充当最小值,这个只要把数组反一下再做一次上面的算法,更新答案就好了。)。两种情况:固定左端点,找右端点的最大值;固定右端点,找左端点的最大值,最后取max代码const int N = 3e4 + 10;class Solution {public: int

2021-08-08 22:34:11 108

原创 leetcode 1-10

leetcode 1-101. 两数之和解题思路从左往右依次遍历一遍,若target-nums[i]能在hash表中找到,就返回下标;若没找到,就将当前下标加入到hash表中代码class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int, int> umap; for(int i = 0

2021-08-06 22:04:31 93

原创 用栈求表达式值

用栈求表达式值中缀表达式求值原题链接规则:(1)遇到数字,则用第二个指针将该数字读取出来,然后push到nums中(2)遇到(,直接push到ops中(3)遇到),则从ops中逐一弹出操作符直到遇到(,每弹出一个操作符,就通过count函数计算一遍该操作符计算出的值,再将该值压入栈(4)遇到+、-、*、/,那么就通过while循环检查是否ops栈顶优先级大于等于当前操作符,若满足,则弹出栈顶操作符,计算值;最后将当前操作符压入ops#include <bits/stdc++.h>

2021-08-02 21:09:35 387

原创 状态压缩DP

状态压缩DP蒙特里安的梦想放弃,参考大佬博客吧,#include<bits/stdc++.h>using namespace std;const int N = 12, M = 1 << N;long long f[N][M]; // 第一维表示列, 第二维表示所有可能的状态/*f[i][j]:表示第i列中,横着摆放占据的位置状态为j的摆放总数*/bool st[M]; // st[i] == true:表示状态i是合法的状态, 存储每种状态是否有奇数个连续的

2021-08-02 12:44:38 87

原创 2021-08-02

数位统计DP参照大佬的博客.,自己写出的代码(比较复杂, 大佬的博客非常简洁)核心思想:可以不用vector存每一位,直接计算某位的左边和右边的整数是多少。可以不用讨论那么多细枝末节,只需要知道,当i为0时其左边整数不能为0,就够了。思路:求一个数字第i位上x出现的次数, 遍历所有位, 就可以计算出整个数num上, x出现的总次数考虑情况: abc x def (其中abc泛指 x 的左边的高位数字, def 泛指 x 的右边的低位数字)那么, p 代表 pow(10, i), 即x所在位

2021-08-02 10:59:58 70

原创 石子的合并

区间DP石子的合并思路:核心:最后一次合并一定是左边连续的一部分和右边连续的一部分进行合并状态表示:f[i][j]表示将i到j合并成一堆的方案的集合,属性为Min状态计算:(1)i<j时,f[i][j]=mini≤k<j(f[i][j],f[i][k]+f[k+1][j])+s[j]−s[i−1]f[i][j] = \underset {i\leq k < j}{min}(f[i][j], f[i][k] + f[k + 1][j]) + s[j] - s[i - 1]f[i]

2021-08-01 20:26:41 82

原创 鸡蛋的硬度

鸡蛋的硬度先想一个简单问题:只有两个鸡蛋的问题两个软硬一样但未知的鸡蛋。有座100层的建筑,要你⽤用这两个鸡蛋确定 哪一层是鸡蛋可以安全落下的最⾼高位置。可以摔碎两个鸡蛋。这是典型的动态规划问题。假设f[n]表示从n层楼找到摔鸡蛋不碎安全位置的最少判断次数。假设第⼀个鸡蛋第一次从第i层扔下,如果碎了了,就剩⼀个鸡蛋,为确定下⾯面楼层中的安全位置,必须从第⼀层挨着试,还需 要i−1次;如果不碎的话,上面还有n−i层,剩下两个鸡蛋,还需要f[n−i]次 (子问题,n层楼的上n-i层需要的最少判断次

2021-07-31 16:54:14 147

原创 数值的整数次方

剑指 Offer 16. 数值的整数次方思路:快速幂当n小于0的时候,将x取倒数,n取反,这里注意要将n设置为long longclass Solution {public: double myPow(double x, int n) { long long k = n; if(n == 0) return 1.0; else if(k < 0){ x = 1 / x; k = -k;

2021-07-31 10:42:36 57

原创 2021-07-31

快速幂核心思路:反复平方法要求akmodma^k\quad mod \quad makmodm的结果,我们要先预计算出:a20modma21modma23modm...a2log2kmodma^{2^0}\quad mod \quad m\\a^{2^1}\quad mod \quad m\\a^{2^3}\quad mod \quad m\\...\\a^{2^{log_2k}}\quad mod \quad ma20modma21modma23modm...a2log2​kmo

2021-07-31 10:16:13 70

空空如也

空空如也

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

TA关注的人

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