- 博客(16)
- 收藏
- 关注
原创 @Result注解的使用
又发现在存储时一个枚举类型被转成了String类型来存储,尝试使用*.name()*将另一个枚举类型也转换成String类型来比较,但是idea报错,错误信息提示不能将String类型与enum类型进行比较。起因是今天在debug时发现使用==来判断枚举类型是否相等时,程序并没有进入if判断中。使用@Result注解后问题解决,变量成功赋值为枚举类型。
2023-04-17 20:28:33
276
原创 删除链表的倒数第N个结点(双指针法)
题目链接:19. 删除链表的倒数第 N 个结点思路:本题为双指针的经典应用,如果要删除倒数第n个结点,则先让fast移动n步,然后同时移动fast和slow,直至fast指向链表的最后一个结点,此时slow->next指向的结点即为要删除的结点。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0)
2022-01-12 13:53:53
172
原创 长度最小的子数组(滑动窗口)
题目链接:209.长度最小的子数组思路:滑动窗口的关键就是如何确定窗口的左右边界以及移动边界的条件。窗口内的元素:数值总和大于等于target的长度最小的子数组。移动窗口的起始位置:如果当前窗口的值大于等于s,窗口向后移动。移动窗口的结束位置:for循环遍历的指针。class Solution {public: int minSubArrayLen(int target, vector<int>& nums) { //滑动窗口 in
2022-01-09 20:20:40
196
转载 搜索旋转排序数组
题目:33. 搜索旋转排序数组解题思路:数组经过旋转后,从中间分开,一定有一部分是有序的,如示例中从6分开后数组变成[4, 5, 6]和[7, 0, 1, 2, 3],此时左半部分是有序的。这启示我们可以在常规二分查找的时候查看当前 mid 为分割位置分割出来的两个部分 [l, mid] 和 [mid + 1, r] 哪个部分是有序的,并根据有序的那个部分确定我们该如何改变二分查找的上下界,因为我们能够根据有序的那部分判断出 target 在不在这个部分:如果 [l, mid - 1] 是有序数组
2021-12-13 23:39:02
89
原创 二分写法的边界问题
二分法的边界问题讨论题目链接:704. 二分查找二分法虽然逻辑比较简单,但涉及到边界条件,容易写错。处理思路:确定要二分的区间是[left, right]还是[left, right),然后在while循环中根据确定的区间来改变循环条件。##二分写法(一)定义区间target在区间[left, right]内,有如下两点:因为left与right相等的情况在[left, right]区间是有意义的,所以循环条件应该是while(left <= right)如果nums[mid]大于t
2021-12-12 22:37:13
291
原创 力扣53题:最大子序和
题目链接:最大子序和问题方法一:动态规划思路:比较nums[i]和f(i-1)+nums[i]的大小。列出动态规划转移方程f(i)=max{f(i−1)+nums[i],nums[i]}class Solution {public: int maxSubArray(vector<int>& nums) { int pre = 0, maxAns = nums[0]; for (const auto &x: nums) {
2021-09-09 22:46:04
187
原创 搜索(dfs)
DFS题目:输入一个数字n,输出1~n的全排列。输入:3输出:1 2 31 3 22 1 32 3 13 1 23 2 1代码:#include<iostream>#include<cstdio>#include<vector>#include<algorithm>using namespace std;int n;vector<int>ans;void show(){ for(int i=0;i<ans
2020-07-10 12:16:28
83
原创 单调栈
单调栈模板stack<int> s;for(int i = 1; i <= n; ++i){ while(s.size() && a[s.top()] >= a[i]) s.pop(); if(s.empty()) l[i] = 0; else l[i] = s.top(); s.push(i);}应用1.给定一组数,针对每个数,寻找它和它左边第一个比它小的数之间有多少个数。2.给定一序列,寻找某一子序列,使得子序列中的
2020-07-09 19:48:03
76
原创 The Doctor Meets Vader (Easy)(pair类的使用)
题目链接:-------------------------------------代码:#include <iostream>#include <algorithm>#include<utility>using namespace std;int main(){ int s,b,a[100010]; int i,j; cin>>s>>b; pair<int,int>base[b];//第一
2020-07-07 19:57:01
119
原创 New Year Ratings Change(贪心算法)
题目链接-------------------------------------------------题解:先对原数列按照从小到大的位置进行排序,并且记录下原来的位置,然后确保新的数列中对应位置上的数为原数列当前数字和未使用过的1-n这些数中最小数字的最大值代码:#include<iostream>#include<cstdio>#include<cmath>#include<cstdlib>#include <algorithm&g
2020-07-07 19:52:47
122
原创 Cinema (map/离散化)
题目链接---------------------------------------------翻译:有n个人去看电影,电影一共有m种,n个人会不同的语言,电影的字母和声音是不同的语言,人听到会说的语言或者看到能看懂的语言字母都会很高兴,选择一部电影,让高兴的人最多。第一种解法:代码:#include <bits/stdc++.h> using namespace std; const int MAXN = 200010;int a[MAXN],b[MAXN],c[MAXN]
2020-07-07 16:24:48
539
原创 Frog Jumps(对边界问题的处理)
题目链接------------------------------------题解:只要青蛙一直往右跳,就能成功跳出,为了数据处理的方便,在左右边界分别加上R,该题就变成了寻找字符‘R’的位置差的最大值。#include <cstdio>#include <cstring>#include <algorithm>using namespace std;char s[200010];int main(){ int t,n,i,mx,pre;//pre记录前
2020-07-07 16:04:04
334
原创 Misha and Changing Handles (map)
题目链接 ------------------------------------------题意:把(a,b)(b,c)保存为(a,c)代码#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<map>using namespace std;map<string ,string> m;int main(){
2020-07-07 15:56:44
104
原创 STL 水果 (map的嵌套当做二维数组)
题目**水果Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 11099 Accepted Submission(s): 4450Problem Description夏天来了好开心啊,呵呵,好多好多水果Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想要一份水果销售情况的明细表,这样Joe就可以很容易掌
2020-07-06 22:30:04
340
原创 数据结构 环形队列的实现
class MyQueue {public: MyQueue(int queueCapacity); //创建队列 virtual ~MyQueue(); //销毁队列 void ClearQueue(); //清空队列 bool QueueEmpty() const; //判断队列是否为空 bool QueueFull() const; //判断队列是否为满 int Queuelength() const; //队列长度 bool EnQueue(int element); //新元素入.
2020-07-05 17:42:20
183
原创 紫书例题5-2 木块问题(The Blocks Problem, UVa 101)
从左到右有n个木块(编号为0~n-1),要求模拟以下4种操作(下面的a和b都是木块编号)。 move a onto b:把a和b上方的木块全部归位,然后把a摞在b上面 move a over b:把a上方的木块全部归位,然后把a放在b所在木块堆的顶部 pile a onto b:把b上方的木块全部归位,然后把a及其上方的木块整体摞在b上面 pile a over b:把a及其上方的木块整体摞在b所在堆的顶部用quit命令退出并打印出最后木块堆的状态。题目分析:每个木块...
2020-07-03 23:11:01
291
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人