自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 704二分查找、27原地删除元素(代码随想录训练营第一天)

代码随想录训练营第一天打卡 二分查找、删除元素

2023-07-14 00:40:07 201

转载 苹果放在盘子里(动态规划问题)

m个相同的苹果放在n个相同的盘子里,允许有空盘子m个相同的苹果放在n个相同的盘子里,不允许有空盘子m个相同的苹果放在n个不同的盘子里,允许有空盘子m个相同的苹果放在n个不同的盘子里,不允许有空盘子第一种情况设f(m,n) 为m个苹果,n个盘子的放法数目,则先对n作讨论,如果n>m,必定有n-m个盘子永远空着,去掉它们对摆放苹果方法数目不产生影响;即  if(n>m) f(m,n) = f(m,m)  当n<=m时,不同的放法可以分成两类:即有至少一个盘子空着或者所有盘子都.

2021-11-08 19:19:31 1544

转载 自适应辛普森算法的代码实现

#include <iostream>using namespace std;typedef long long ll;const int inf = 0x3f3f3f3f;const double eps = 1e-6;double a, b, c, d, l, r;// 要进行积分的原函数double f(double x) { return ;}//计算辛普森积分double sim(double l, double r) { return

2021-11-06 14:33:08 352

原创 求一个数的三次方根(浮点数二分,ACWing算法基础课)

## 题目描述给定一个浮点数n([-10000,10000]),求它的三次方根,保留6位小数。#include<iostream>using namespace std;int main(){ double n; cin>>n; int l=-10000,r=10000; while(r-l>1e-8) { double mid =(r+l)/2; if(mid*mid*mid>=x)r=mid; else l=

2021-11-04 21:46:32 300

原创 差分(ACWing算法基础)

一维差分知识已知a1、a2、…、an,构造数组b,使得ai=b1+b2+…+bi。a是b的前缀和,b是a的差分。b1=a1,b2=a2-a1;b3=a3-a2;bn=an-an-1。要使 [l,r]内a数组的全部值加c,只进行bl+c和br+1-c处理即可。题目描述输入:一个长度为n的整数序列m个操作,每个操作包含l,r,c三个数,将序列中[l,r]之间的每个数加c代码实现#include<iostream>using namespace std;cons

2021-11-03 21:36:18 270

原创 前缀和(ACWing算法基础)

一维前缀和数组:a1、a2、a3…an前缀和数组:si=a1+a2+…+ai如何求sis0=0s[i]=s[i-1]+ai(i>=0)** si的作用是什么**快速求出原数组中一段数的和预处理:得到si数组,时间复杂度是O(n),询问:[l,r]区间内的元素和为s[r]-s[l-1],时间复杂度是O(1)## 编程实现数组a[]一共有n个数,s[]保存前缀和m次查询m个左右边界内的前缀和#include<iostream>using namespace std;

2021-11-03 16:11:57 184

原创 大整数高精度(C++没有大整数类,ACWing算法基础)

高精度题目类型假定A和B为正数,大整数A、大整数B,A和B的位数大概是10^6。A-BA+BA*a(a为比较小的数)A/a解题思路1、大整数的存储使用一个数组存储大整数,最低位下标为02、 模拟加法运算每一位计算包含计算Ai+Bi+t(下一位的进位为0或者1),Ai或者Bi不存在就置0,最后如果有进位高位补1。代码实现1、大整数加法#include<iostream>#include<vector>//使用 vector表示大整数using na

2021-11-03 15:24:40 504

原创 浮点数二分(ACWing算法基础课)

求一个数的平方根#include<iostream>using namespace std;int main(){ double x; cin>>x; double l=0,r=x; while(r-l>1e-8)//区间长度大于一个足够小的数 *// 经验值,题目如果要求保留n为小数,区间长度为1e-(n+2)* // for(int i=0;i<100;i++)//迭代100次 { double mid = (1+r)/2;

2021-11-01 11:20:52 130

原创 整数二分(ACWing算法基础课)

二分的本质有单调性一定可以二分,可以二分的题目不一定是单调的。左半边一个性质,右半边另外一个性质,可以将整个范围分成两部分,每次选择答案所在的区间进行处理。两种整数二分步骤1、 找到中间值mid=(l+r+1)/2,判断中间值是否满足性质if(check(mid))。check(mid)假设是检验的是否满足左边的性质。check(mid)为true,边界是[mid,r],包含mid,更新方式是l=mid;check(mid)为false,边界是[l,mid-1],更新方式是r=mid-1;

2021-11-01 11:10:55 511

转载 主定理的证明

主定理可以用于快速得到时间复杂度为递归公式的上界解

2021-10-24 20:48:45 103

原创 利用归并排序求逆序对的数量

问题描述5 3 2 1 4逆序对为[5,3],[5,2],[5,1],[5,4],[3,2],[3,1],[2,1]逆序对数量是7归并排序解题思路逆序对分成三大类:两个数同时出现在Left,merge_sort(L,mid)两个数同时出现在Right,merge_sort(mid+1,R)一个数出现在Left一个数出现在Right,sj=mid-i+1(j从mid+1到r,i从l到mid)代码#include<iostream>using namespace std

2021-10-24 20:12:28 124

原创 利用快速排序求解求第k个数问题

问题描述求一个数组内第k小的数快速排序解题思路找到边界点之后,如果k<=Left的数量,递归处理Left如果k>Left的数量,递归处理Right(k-Right)代码#include<iostream>using namespace std;const int N= 100010;int n,k;int q[N];int quick_sort(int l,int r,int k){ if(l==r){ return q[l];} i

2021-10-24 19:39:49 180

转载 排序算法——归并排序(ACWing)

算法原理分治算法步骤确定分界点为中间位置,mid=(l+r)/2递归排序左右两边归并两个排好序的数组,合二为一(最难的部分),时间复杂度是O(n)双指针算法两个指针分别指向两个数组的开头,比较两个指针对应数值大小,小的放进新数组,该指针后移,直到一个指针到达数组末尾,将另外一个数组剩下的部分添加到新数组中。1 3 5 7 92 4 5 8 10i=0,j=0;p[i]=p[0]=1<q[j]=q[1]=2,s[0]=p[0]=1;i++;i=1,j=0;i=1,j=0;p[

2021-10-24 18:55:54 474

转载 排序算法——快速排序(ACWing)

原理基于分治算法步骤一个q数组,左边界的下标为l,右边界的下标为r确定分界点:x=q[l]或q[(l+r)/2]或q[r]或者一个随机数调整区间,所有小于x的数在左边,大于等于x的数在右边递归处理左右两个区间实现方法开辟两个新的数组a和b,分别存放小于x的数和大于等于x的数,然后将a、b两个数组合并。 int k=0,p=0; int a[N],b[N]; int q[N]; int quicksort(int l,int r) {

2021-10-21 20:35:09 339

转载 动态规划——树形DP之树的重心

问题描述树的重心是,当去掉该结点后,树的各个连通分量中,结点数最多的连通分量的结点数达到最小值。例如,有由1~7号结点组成的一棵树,如果选1号结点做重心,左边的连通分量有2、4、5共3个结点,右边的连通分量有3、6、7共3个结点,结点数最多的连通分量有3个结点;如果选2号结点做重心,那么存在三个连通分量,分别有4一个结点、5一个结点以及1、3、6、7四个结点,所以结点数最多的连通分量有4个结点;以此类推,可以得出应当将1号结点作为重心的结论,因为这种情况下各连通分量中结点数最多的连通分量含有3个节

2021-10-20 21:15:11 341

转载 动态规划——最长公共子序列(LCS)

暴力搜索枚举法枚举序列X里的每一个子序列xi检查子序列xi是否也是Y序列里的子序列;在每一步记录当前找到的子序列里面的最长的子序列。#include<iostream>#include<cstring>#include <math.h>#include<algorithm>using namespace std;int main(){string x,y; // 两个待比较的字符串string seq;//最长公共子序列string

2021-10-20 19:51:52 2415

转载 Leetcode 20合并两个有序链表

题目描述将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例2:输入:l1 = [], l2 = []输出:[]示例3:输入:l1 = [], l2 = [0]输出:[0]两个链表的节点数目范围是 [0, 50]-100 <= Node.val <= 100l1 和 l2 均按 非递减顺序 排列解法我的想

2021-09-24 21:37:59 77

转载 Leetcode 19删除链表的倒数第N个结点

问题描述给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?示例1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例2:输入:head = [1], n = 1输出:[]示例3:输入:head = [1,2], n = 1输出:[1]链表中结点的数目为 sz1 <= sz <= 300 <= Node.val <= 1001 <= n <= s

2021-09-24 21:02:54 83

原创 Leetcode 20 有效的括号

问题描述给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例1:输入:s = “()”输出:true示例2:输入:s = “()[]{}”输出:true示例3:输入:s = “(]”输出:false示例4:输入:s = “([)]”输出:false示例5:输入:s = “{[]}”输出:true1 <= s.l

2021-09-24 20:20:15 81

转载 Leetcode 18四数之和

问题描述给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] :0 <= a, b, c, d < na、b、c 和 d 互不相同nums[a] + nums[b] + nums[c] + nums[d] == target你可以按 任意顺序 返回答案 。示例1:输入:nums = [1,0,-1,0,-2,2], target = 0

2021-09-24 19:50:02 96

转载 Leetcode 16 最接近的三数之和

问题描述给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例:输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。3 <= nums.length <= 10^3-10^3<= nums[i] <=10^3-10^4&lt

2021-09-24 17:12:38 73

转载 Leetcode 15 三数之和

问题描述给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例2:输入:nums = []输出:[]示例3:输入:nums = [0]输出:[]0 <= nums.length <= 3000-10^

2021-09-23 21:41:40 42

原创 Leetcode 17

问题描述给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例1:输入:digits = “23”输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]示例2:输入:digits = “”输出:[]示例3:输入:digits = “2”输出:[“a”,“b”,“c”]0 <= digits.length &

2021-09-23 21:05:25 142

转载 Leetcode 14最长公共前缀

题目描述编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例1:输入:strs = [“flower”,“flow”,“flight”]输出:“fl”示例2:输入:strs = [“dog”,“racecar”,“car”]输出:""解释:输入不存在公共前缀。1 <= strs.length <= 2000 <= strs[i].length <= 200strs[i] 仅由小写英文字母组成解法同时连续比较

2021-09-23 20:16:10 78

转载 Leetcode 13罗马数字转整数

题目描述罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II

2021-09-23 19:25:50 51

转载 Leetcode 12 整数转罗马数字

问题描述罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II

2021-09-22 21:31:58 71

转载 Leetcode 11 盛最多的水

题目描述给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。示例1:输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。示例2:输入:h

2021-09-22 20:55:26 58

转载 Leetcode 10正则表达式匹配

问题描述给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。示例1:输入:s = “aa” p = “a”输出:false解释:“a” 无法匹配 “aa” 整个字符串。示例2:输入:s = “aa” p = “a*”输出:true解释:因为 ‘*’ 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 ‘

2021-09-22 20:21:18 163

转载 Leetcode 09回文数

题目描述给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。示例1:输入:x = 121输出:true示例2:输入:x = -121输出:false解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例3:输入:x = 10输出:false解释:从右向左读, 为 01 。因此它不是一个回文数。

2021-09-18 22:16:37 59

转载 Leetcode08字符串转换成整数

题目描述解法除去空格只能是数字形式这一点不知道如何判断。力扣上的优秀解法#include <iostream>#include <string>using namespace std;class Solution {public: int myAtoi(string str) { // 字符串长度 unsigned long len = str.length(); // 去除前导空格 获取到起始地址

2021-09-18 21:53:33 108

转载 Leetcode 07整数反转

题目描述给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例1:输入:x = 123输出:321示例2:输入:x = -123输出:-321示例3:输入:x = 120输出:21示例4:输入:x = 0输出:0-2^31<= x <= 2^31 - 1解法主要是

2021-09-18 20:47:01 95

转载 Leetcode 06 Z 字形变换

题目描述将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。示例 1:输入:s = “PAYPALISHIRING”, numRows = 3输出:“PAHNAPLSIIGYIR”示例2:输入:s = “PAYPALISHIRING”, numRows = 4输出:“PINALSIGYAHRPI”解释:P I NA L S I GY A H RP I示例3

2021-09-18 19:53:31 67

转载 Leetcode 05 最长回文子串

题目描述给你一个字符串 s,找到 s 中最长的回文子串。示例1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。示例2:输入:s = “cbbd”输出:“bb”示例3:输入:s = “a”输出:“a”示例4:输入:s = “ac”输出:“a”1 <= s.length <= 1000s 仅由数字和英文字母(大写和/或小写)组成**我的解法**找子串时间超限。class Solution {publ

2021-09-17 21:38:23 49

转载 Leetcode 04两个正序数组的中位数

题目描述给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。示例1:输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2示例2:输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5示例3:输入:nums1 = [0,0

2021-09-17 19:59:35 49

转载 Leetcode 03 无重复字符的最长子串

问题描述给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。示例1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例2:输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke”

2021-09-16 19:58:16 53

转载 Leetcode 02 两数相加

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例 2:输入:l1 = [0], l2 = [0]输出:[0]示例 3:输入:l1 = [9,9,9,9,9,9,9], l2 =

2021-09-16 17:01:46 63

转载 2021-09-16

leetcode 01 两数之和简单解法 双重遍历,暴力求解,时间复杂度O(n^2)优化解法使用map,建立元素和下标的对应关系。class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { // vector初始化方法 vector<int> b(2,-1);//存放结果。容量为2的数组,初始值都为-1

2021-09-16 15:57:48 70

原创 微信小程序二维码

“滴水穿词”英语学习微信小程序二维码中国石油大学(华东)Little Dingdong18届山东省大学生软件设计大赛

2020-09-14 23:22:14 206

空空如也

空空如也

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

TA关注的人

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