自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【数据结构刷题复习】

1、vector的insert函数用法2、set:插入元素:删除元素:判断某元素是否出现在set中,是则返回1,否则返回0:通过迭代器去访问set中的元素:3、 map: 查找关键字: 元素版本的遍历方法: 4、队列访问队首元素:q.front()访问队尾元素:q.back()5、优先队列输出从大到小,队首是top() 6、并查集初始化: 查找:合并:带权并查集初始化: 查找:注意带权并查集的路径压缩方式和普通并查集的路径压缩方式不一样!!

2022-06-20 23:42:02 286 1

原创 【C++语法】int类型与string类型之间的相互转换

int转成string:to_string()string转成int:stoi()

2022-06-18 22:16:18 280

原创 【剑指Offer 60. n个骰子的点数】动态规划+概率

下面代码是将次数换成概率计算,更方便。注意动态规划的思路!!class Solution {public: vector<double> dicesProbability(int n) { vector<double> ans; double dp[15][70]={0}; //dp[i][j]: i个骰子,点数和为j的概率 //判断投1个骰子的情况,点数为i的概率是1/6 f...

2022-05-06 17:10:54 210

原创 【1610. 可见点的最大数目】数学模拟+注意细节+滑动窗口

总结之前先夸夸自己,细节都想到了,就是最后没有使用滑动窗口导致超时!已经很棒啦,相比于大一时的C语言的C已经有很大的进步啦!注意的细节如下:1、atan2函数的用法:返回的范围是[-,],而不是[0, 2],千万注意,所以为了保证扫描的连续性,要把[-, 0]的部分加上2得到[,2];2、C++中表示的方法:3、注意当扫描到接近2时,要在2之后补上大小为angle的角度,以便扫描完整;补之前记得将之前加入angles数组中的角度值进行排序;4、注意角度和弧度表示方法的统...

2022-05-06 15:52:34 768

原创 C++中move函数的使用方法【2221. 数组的三角和】

另一种方法:总结规律做法class Solution {public: int triangularSum(vector<int>& nums) { int a[1005][1005]; int n=nums.size(); for(int i=1;i<=n;i++) { a[i][1]=1; a[i][i]=1; } ...

2022-05-06 11:09:10 646

原创 【剑指Offer 49. 丑数】动态规划(注意思路)

注意:若三个条件中有两个条件同时满足,这两个都要加一!代码如下:class Solution {public: int nthUglyNumber(int n) { int a=1,b=1,c=1; int dp[1700]; dp[1]=1; for(int i=2;i<=n;i++) { dp[i]=min(min(2*dp[a],3*dp[b]),5*dp[c]...

2022-05-06 10:41:10 61

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

思路是对的,但最开始没有做下去的勇气,哎,下次一定要努力尝试!解题思路见:力扣代码:class Solution {public: int findNthDigit(int n) { long long digit=1,start=1,count=9;//写成long long,否则会溢出 while(n>count) { n-=count; start*=10;

2022-05-06 10:08:07 168

原创 【剑指Offer 62. 圆圈中最后剩下的数字】循环队列/数学+递归

方法一:使用循环队列class Solution {public: int lastRemaining(int n, int m) { queue<int> q; for(int i=0;i<n;i++) { q.push(i); } while(q.size()!=1) { for(int j=1;j<=m;j++)...

2022-05-05 20:00:22 66

原创 【372.超级次方】二分快速幂降低时间复杂度【50.Pow(x, n)】

//会超时// class Solution {// public:// int superPow(int a, vector<int>& b) {// int len=b.size();// reverse(b.begin(),b.end());// long long pos=1,ans=1;// for(int i=0;i<len;i++)// {// ...

2022-05-05 11:38:16 122

原创 【470. 用Rand7()实现Rand10()】

具体思路见:力扣代码如下:// The rand7() API is already defined for you.// int rand7();// @return a random integer in the range 1 to 7class Solution {public: int rand10() { //调用一次rand7()得到7种可能1-7 //a //b>a b/a*a int x=..

2022-05-05 11:00:43 494

原创 【面试题 16.14. 最佳直线】计算几何

当两个向量的叉积为0时,两向量平行。class Solution {public: vector<int> bestLine(vector<vector<int>>& points) { int n=points.size(); int max_cnt=-1; vector<int> ans; for(int i=0;i<n;i++) { ...

2022-05-05 10:41:47 354

原创 【LCP 02. 分式化简】模拟,注意技巧

注意模拟思路!a+n/m=(m*a+n)/m,再取倒数之后,对应迭代方式为:m=m*a+n, n=m.class Solution {public: vector<int> fraction(vector<int>& cont) { reverse(cont.begin(),cont.end()); int len=cont.size(); int m=1,n=0; for(...

2022-05-05 10:18:38 123

原创 【233. 数字1的个数】模拟

题目要我们记录1~n里每个数字里出现的1的个数的加和。列出1~n中的每一个数字:1,2……n经过简单思考,我们可以算出1~n中每一位数字中1的数量的加和从个位数开始,固定住个位是1,假设 n = 21012, 有:0 111 112 11……2101 11可见个位数是1的数字一共有2102个,即0~2101的个数在考虑十位数是1的个数,把十位数固定成1,暂且把个位数固定成0有:010101101021010……2101010一共有21...

2022-05-05 09:52:07 191

原创 【342. 4的幂】位运算

方法:位运算(两种方法)class Solution {public: bool isPowerOfFour(int n) { return n>0&&(n&n-1)==0&&(n&0xaaaaaaaa)==0; }};class Solution {public: bool isPowerOfFour(int n) { //1(00)* //(n&am..

2022-05-04 21:54:02 155

原创 【239. 滑动窗口最大值】优先队列

代码如下:事实证明,q.push(pair(nums[i],i));是允许的!!!class Solution {public: vector<int> maxSlidingWindow(vector<int>& nums, int k) { priority_queue<pair<int,int>> q; //first存数字的值,second存数字的位置即下标 int len=n...

2022-04-11 22:49:41 77

原创 【884. 两句话中的不常见单词】字符串处理方法

参考链接:力扣class Solution {public: vector<string> uncommonFromSentences(string s1, string s2) { unordered_map<string, int> mp; vector<string> res; stringstream a, b; //创建流对象 string s; a <&

2022-04-11 19:42:05 204

原创 【236. 二叉树的最近公共祖先】DFS

与树相关的题大部分会用到dfs/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: void dfs(T...

2022-04-11 18:53:40 665

原创 【108. 将有序数组转换为二叉搜索树】

代码如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(n...

2022-04-11 18:49:24 69

原创 【44. 通配符匹配】动态规划 / 贪心

方法一: 动态规划class Solution {public: bool isMatch(string s, string p) { int len_s=s.size(); int len_p=p.size(); //没给s和p的长度,所以只能用vector vector<vector<bool>> dp(len_s+1,vector<bool>(len_p+1))...

2022-04-08 15:21:58 1189

原创 【2195. 向数组中追加K个整数】排序+贪心算法

方法一:排序+贪心+枚举到最大可能的边界,没有使用高斯求和,没有去重,是通过while循环判断的,会超时!!//会出现数组中有两个19的情况!!即数组中出现重复元素的情况//下面方法会超时!class Solution {public: long long minimalKSum(vector<int>& nums, int k) { sort(nums.begin(),nums.end()); int len=nums.si...

2022-04-08 12:11:07 1145

原创 【2202. K次操作后最大化顶端元素】贪心算法

注意分类讨论以及特殊情况!class Solution {public: int maximumTop(vector<int>& nums, int k) { int len=nums.size(); int max_top=-1e6; if(len==1&&k%2==1)//栈中只有一个元素,且k为奇数时返回-1 { return -1; ...

2022-04-07 21:50:56 232

原创 【剑指Offer 56 - I.数组中数字出现的次数】位运算(分组异或)

利用异或的性质:相同的数的异或为0。class Solution {public: vector<int> singleNumbers(vector<int>& nums) { int total=0; for(int num:nums) { total^=num; } int div=1; while((div&t...

2022-04-06 20:05:31 59

原创 【15. 三数之和】排序+vector中count函数 / 排序+双指针

方法1:排序+vector中count函数(会超时)vector的count()函数用法如下:(突然发现是男朋友的博客hhh,浅秀一波~)【C++STL】vector的count()和count_if()函数的用法_Joseph_L_的博客-CSDN博客_vector.count//会超时!class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) ...

2022-04-06 18:47:56 2784

原创 【剑指Offer 48. 最长不含重复字符的子字符串】哈希表+滑动窗口 / 哈希表+动态规划

思路解析:(反复看,重点看!!)class Solution {public: int lengthOfLongestSubstring(string s) { int len=s.length(); if(len==0) return 0; int left=-1; int max_count=0; unordered_map<char,int> map; ...

2022-04-06 16:43:19 221

原创 【238. 除自身以外数组的乘积】前缀积*后缀积

方法:维护前缀积数组和后缀积数组class Solution {public: vector<int> productExceptSelf(vector<int>& nums) { vector<int> ans; for(int i=0;i<nums.size();i++) { ans.push_back(1); } int s=1...

2022-04-05 08:46:49 265

原创 【347. 前K个高频元素】哈希表重新定义cmp / 哈希表+桶排序

方法一:直接使用哈希表,通过重新定义sort函数的cmp方式,注意sort函数只能对pair为元素的vector数组排序,不能直接对map排序!class Solution {public: static bool cmp(pair<int, int>& m, pair<int, int>& n) { return m.second > n.second; } vector<int> topKFr...

2022-04-04 11:47:24 290

原创 【148. 排序链表】归并排序+快慢指针找mid

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next.

2022-04-04 11:24:50 58

原创 【剑指Offer 56 - II. 数组中数字出现的次数】位运算

方法一:哈希表计数class Solution {public: int singleNumber(vector<int>& nums) { unordered_map<int,int> map; int len=nums.size(); int ans=0; for(int i=0;i<len;i++) { map[nums[i]]=0; ..

2022-04-03 23:42:50 99

原创 【338.比特位计数】位运算+递推

方法一:正常算位运算,时间复杂度为O(nlogn)//O(nlogn)class Solution {public: int bitcnt(int x) { int ret=0; while(x) { ret+=x&1; x>>=1; } return ret; } vector<int> countB...

2022-04-03 22:13:18 97

原创 【剑指Offer 65. 用加减乘除做加法】位运算

此题注意位运算的使用!很巧妙!!class Solution {public: int add(int a, int b) { if(a&b)//有进位的时候 return add(a^b,(unsigned int)(a&b)<<1); else//没有进位的时候就返回~ return a^b; }};...

2022-04-03 21:47:08 60

原创 【494. 目标和】01背包问题(注意实现思路)

解题思路://官方代码:class Solution {public: int findTargetSumWays(vector<int>& nums, int target) { int sum = 0; for (int& num : nums) { sum += num; } int diff = sum - target; if (di...

2022-04-03 12:21:02 342

原创 【面试题 16.18. 模式匹配】本质上是求ax+by=len方程组的解&&注意细节和时间复杂度

思路解析:代码如下:class Solution {public: bool patternMatching(string pattern, string value) { int pattern_len=pattern.length(); int value_len=value.length(); int count_a=0,count_b=0; for(int i=0;i<pattern...

2022-04-03 11:40:34 215

原创 【380. O(1) 时间插入、删除和获取随机元素】哈希表和数组结合使用

要求时间复杂度为O(1),说明不能使用以往的查找方式来实现这些操作。哈希表是一种很好用且时间复杂度很低的数据结构,这里使用哈希表存储不同数值在数组中的位置,便于查找,以及后续的删除。删除是将其与数组末尾的元素交换位置,再pop_back。删除时记得要改变哈希表中的对应关系,不然会造成混乱!hash.count(key)用于查找是否存在key为该值的pair。class RandomizedSet {public: unordered_map<int,int> ha..

2022-03-29 14:54:26 789

原创 【384. 打乱数组】暴力/蓄水池算法

方法1:暴力 所以要用list数据结构class Solution {public: Solution(vector<int>& nums) { this->nums = nums; this->original.resize(nums.size()); copy(nums.begin(), nums.end(), original.begin()); } vector&..

2022-03-29 14:13:42 455

原创 【382. 链表随机节点】数组法/蓄水池算法

方法1:数组法——将链表中所有节点的值存进数组,然后使用rand()%len随机选择。class Solution {public: vector<int> res; Solution(ListNode* head) { while(head) { res.push_back(head->val); head=head->next; } } int

2022-03-29 09:06:07 1115

原创 【54. 螺旋矩阵】遇0或左侧边界换方向/收缩边界

方法1:右侧和下侧填0,遇0换方向,走过的值变成0,相当于边界。但要注意左侧的情况,因为左边没填0,所以要单独列出第0列的情况,即j==-1时也要换方向。class Solution {public: vector<int> spiralOrder(vector<vector<int>>& matrix) { int xx[4]={0,1,0,-1}; int yy[4]={1,0,-1,0}; ..

2022-03-28 23:18:12 496

原创 【94. 二叉树的中序遍历】递归/迭代(栈)

方法1:递归class Solution {public: void inorder(TreeNode* root,vector<int> &res)//要修改函数形参的话记得加引号!! { if(!root) { return; } inorder(root->left,res); res.push_back(root->val);

2022-03-28 21:22:15 87

原创 【53. 最大子序和--最大子数组和】动态规划/分治算法

方法1:动态规划class Solution {public: int maxSubArray(vector<int>& nums) { int len=nums.size(); int dp[100010]={0}; dp[0]=nums[0]; int maxx=dp[0];//不要写-1e8,因为dp[0]比它大 for(int i=1;i<len;i++) {

2022-03-28 20:47:30 1051

原创 【LCP 28. 采购方案】二重循环(二分查找)/ 双指针

小力将 N 个零件的报价存于数组 nums。小力预算为 target,假定小力仅购买两个零件,要求购买零件的花费不超过预算,请问他有多少种采购方案。注意:答案需要以 1e9 + 7 (1000000007) 为底取模,如:计算初始结果为:1000000008,请返回 1。直接二重for循环会超时,即使第二层循环使用二分查找也超时!int solve(int left,int right,int x,vector<int> nums){ while(left<=

2022-03-28 20:14:30 341

空空如也

空空如也

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

TA关注的人

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