自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(67)
  • 资源 (11)
  • 收藏
  • 关注

原创 回溯问题——子集、组合、全排列

给自己挖个坑~

2022-01-06 16:46:04 215

原创 Leetcode——第66题数组表示数加一

用数组表示数加一,从后往前遍历,找到非9的数,加一,后面的数全为0.如果全部遍历都是9,重新创建数组,第一位为1,后面为0class Solution {public: vector<int> plusOne(vector<int>& digits) { int len=digits.size(); for(int i=len-1;i>=0;i--){//从后往前一个个查值 if(digits[i]=

2022-01-05 15:42:33 2111

原创 Leetcode——第67题二进制求和

这个里面找到进位数,从后往前搜索进位即可class Solution {public: string addBinary(string a, string b) { int alen=a.size(),blen=b.size(); while(alen<blen){ a='0'+a; alen++; } while(alen>blen){ b='0'

2022-01-05 15:40:20 2027

原创 Leetcode——第367题完全平均数

也使用二分法class Solution {public: bool isPerfectSquare(int num) { int l=0,r=num; while(l<=r){ int mid=l+(r-l)/2; if((long long)mid*mid==num) return true; if((long long)mid*mid<num){

2022-01-05 15:39:03 2297

原创 Leetcode——第69题求平方根

这个题目用二分法class Solution {public: int mySqrt(int x) { int l=0,r=x,res=0; while(l<=r){ int mid=l+(r-l)/2; if((long long)mid*mid==x) return mid; if((long long)mid*mid<x){ res=mid;

2022-01-05 15:38:22 2729

原创 Leetcode——第70题爬楼梯

这个题目是动态规划,简单class Solution {public: int climbStairs(int n) { int a = 0, b = 0, c = 1; for (int i = 1; i <= n; ++i) { a = b; //动态规划 b = c; c = a + b; } return c; }};...

2022-01-05 15:37:34 60

原创 Leetcode——第57题插入区间

和上一题一样,定义左右指针class Solution {public: vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) { int len=intervals.size(); if(len==0) return {newInterval}; vecto

2021-12-27 16:05:03 378

原创 Leetcode——第59题螺旋矩阵II

定义上下左右可以实现螺旋class Solution {public: vector<vector<int>> generateMatrix(int n) { vector<vector<int>> matrix(n, vector<int>(n)); int l=0,r=n-1, u=0,d=n-1,a=1; while(true){ for(int i=l;i&

2021-12-27 16:04:03 147

原创 Leetcode——第62题不同路径I

同样是使用动态规划,初始化全为1class Solution {public: int uniquePaths(int m, int n) { int a[m][n]; // memset(a,1,sizeof(a)); for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ a[i][j]=1; } }

2021-12-27 16:03:07 128

原创 Leetcode——第63题不同路径

和最短路径差不多,更新第一行第一列然后从第(1,1)遍历class Solution {public: int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { int m = obstacleGrid.size(), n = obstacleGrid.at(0).size(); vector<vector<int>> f(m,vec

2021-12-27 15:48:36 515

原创 Leetcode——第64题最短路径

这个题目利用动态规划,更新第一行第一列的值,然后从第(1,1)遍历,选取右边或上边的最小值,直至全部更新class Solution {public: int minPathSum(vector<vector<int>>& grid) { int m=grid.size(),n=grid[0].size(); for(int i=1;i<m;i++){ grid[i][0]=grid[i][0]+gri

2021-12-27 15:46:38 575

原创 Leetcode——第56题合并区间

这个思想简单,需要重新定义一个数组,作记录,学到了几个新的知识点,推入数组,找上一个值的方法class Solution {public: vector<vector<int>> merge(vector<vector<int>>& intervals) { if (intervals.size() == 0) { return {}; } int len = int

2021-12-17 17:24:29 240

原创 Leetcode——第54题螺旋输出

可以采用一直更新上下左右边界的方法,输出值class Solution {public: vector<int> spiralOrder(vector<vector<int>>& matrix) { vector <int> ans; if(matrix.size()==0) return ans; //若数组为空,直接返回答案 int u = 0; //赋值上下左右边界 in

2021-12-17 16:52:15 115

原创 Leetcode——第53题最大子数组和

这个题重在思想,从头到尾遍历,如果前面一个数大于0,就将前一个数加到后一个数中这样生成的新的数组里面就有最大数组和class Solution {public: int maxSubArray(vector<int>& nums) { int res = nums[0]; for (int i=1;i<nums.size();i++) { if(nums[i-1]>0){ n

2021-12-17 16:29:06 116

原创 Leetcode——第50题 Pow(x,n)

这里学到一个,进位为1的所有权重之积class Solution {public: double myPow(double x, long long n) { if(x==0||n==1) return x; if(n<0){ n=-n; x=1/x; } double res=1; while(n!=0){ if((n&1)==1

2021-12-16 14:33:35 1599

原创 Leetcode——第48题矩阵旋转

最主要的就是找到规律,目的就是把i行j列,变成j行n-1-i列class Solution {public: void rotate(vector<vector<int>>& matrix) { //首先上下翻转,然后对角线翻转 目的都是从[i][j]变成[j][n-1-i] for(int i=0;i<matrix.size()/2;i++){ for(int j=0;j<matrix.si

2021-12-16 13:49:03 150

原创 Leetcode——第47题全排列II

这个题目和上一个题目差不多,但是不能出现重复项其实很简单,先把原数组排序,然后(i>0&&nums[i]==nums[i-1]&&visited[i-1]==0)跳过class Solution {public: vector<vector<int>> permuteUnique(vector<int>& nums) { //使用深度遍历的方法,给结点做标记,用过的标记为1 int

2021-12-16 13:23:03 213

原创 Leetcode——第46题全排列

这个题目和组合求和差不多,也使用的深度优先遍历(回溯算法),回溯的意思就是,每次往深处遍历以后,再次返回到上一层。在这个题目里,需要有一个visited数组作记录,记录下来被访问的结点,被访问后就不能再访问了class Solution {public: vector<vector<int>> permute(vector<int>& nums) { //使用深度遍历的方法,给结点做标记,用过的标记为1 int len

2021-12-16 13:21:00 98

原创 Leetcode——第55题跳跃游戏

比二稍微简单一些,主体还是使用确定边界、更新边界的方案,但是不用纪录次数,而是遍历结束后看最后更新的边界是否大于或等于数组最后一个位置class Solution {public: bool canJump(vector<int>& nums) { int res=0; int maxpos=0,end=0; if(nums.size()==1) return true;//如果是一个元素,一定是真 for(i

2021-12-15 16:47:57 3747

原创 Leetcode——第45题跳跃游戏II

这个题目是找跳跃最小次数,思想从第一个数开始,记录第一个数能到的最大边界(加1),找到在到最大值范围内的这些数能到的最大值当i到这个最大边界后,更新最大边界,判断最大边界如果大于数组长度,breakclass Solution {public: int jump(vector<int>& nums) { int res=0,end=0,maxpos=0; for(int i=0;i<nums.size()-1;i++){

2021-12-15 16:45:26 3711

原创 Leetcode——第704题二分查找

找到了就return mid找不到return -1class Solution {public: int search(vector<int>& nums, int target) { int n=nums.size(); if(n==0){ return -1; } int l=0,r=n-1; while(l<=r){ int mid=

2021-12-15 14:41:06 235

原创 Leecode——第42题接雨水

这个题目和上面盛水最多的容器一样,那个题目是用双指针,左右比较,如果左边小就移动左边,如果右边小就移动右边大暴力法:这个题目是接雨水,可以从第一个到最后一个遍历,对于每个数。分别往左往右找到最大的值,然后取最大值的最小值减去该值就是这个位置的水量class Solution {public: int trap(vector<int>& height) { int ans=0; for(int i=0;i<height.size()-

2021-12-15 14:31:32 246

原创 Leetcode——第41题缺失的第一个正数

这个题目最主要的点是要求常数级的额外空间,如果不考虑这个完全可以使用哈希表的方法:这个数组中的最小正整数一定在1-N+1之间,所以首先遍历让所有非正数变为不在范围内的正数,然后再遍历一遍,将数值放入对应的位置变为相反数,第三次遍历出来的第一个正数位置加一就是目标值 for(int i=0;i<nums.size();i++){ if(nums[i]<=0){ nums[i]=nums.size()+10;

2021-12-15 13:24:33 293

原创 Leetcode——第40题组合总和

这个题目和上一题异曲同工。只不过需要加入一个判断,如果有重复值,那么就跳过在dfs里,从i+1开始遍历,这样子就不会重复自身的数值了这里可以回想一下,两数、三数、四数之和class Solution {public: vector<vector<int>> combinationSum2(vector<int>& candidates, int target) { vector<int> path; ve

2021-12-14 16:41:22 122

原创 Leetcode——第39题组合总数

这个使用了回溯算法,一般就是要画数形图,然后通过深度优先遍历,找到所有可能的列表,并判断是否满足题目结果在本题目中,第一次学会使用该方法,先排序(这一目的是为了做剪枝优化,然后每次的开始是从本值开始的,这样为了除去重复值class Solution {public: vector<vector<int>> combinationSum(vector<int>& candidates, int target) { vector<v

2021-12-14 15:35:09 190

原创 Leetcode——第36题判断有效数组

这里运用到的是遍历二维数组、三位数组二维数组的第一维留下行数,第二维留下需要遍历的数字,保存的是记录该数字的次数三维数字前两维保存的是方块所在位置,第三位记录数字,保存的是记录该数字的次数class Solution {public: bool isValidSudoku(vector<vector<char>>& board) { int rows[9][9]={0};//记录每一行每个数字出现的个数 int columns[

2021-12-14 13:55:08 410

原创 第三天总结

今天做的都是查找——O(log n),遇到这种要求,一般不能用遍历了,最常用的就是二分法查找比如旋转排序数组查找target的位置,就是二分法,切一半并且判断是否是有序的如果中值等于目标,直接返回首先判断左边值小于中间值,那就说明左边是有序的,然后判断如果目标值在左值和中间值之间,右边编程中值减一,否则左边等于中值加一否则,右边有序,判断是否在右边,否则左边查找target的开始和结束位置,用二分法查找从左往右,逼出来最左边的值,判断这个值是否是target,如果是,记录左值,不是直接返回{-1

2021-12-09 15:02:26 41

原创 Leetcode——第34题 在排序数组找到目标值位置

给目标值,在一个数组中找到他的位置使用二分查找法,通过移动左边,找到最左边的值移动右边,找到最右边的值class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { if(nums.empty()) return {-1,-1}; int l = 0, r = nums.size() - 1; while

2021-12-09 13:41:03 523

原创 Leetcode 第35题搜索插入位置

这个题目不难,也是应用二分法查找。但是细节的地方还是需要注意尤其最后返回的是L,或者r+1,因为在r<l的时候跳出了循环,而此时l所占的位置就是目标位置class Solution {public: int searchInsert(vector<int>& nums, int target) { int l=0;int r=nums.size()-1; while(l<=r){ int mid = (l+

2021-12-09 12:56:50 258

原创 Leetcode——第33题搜索旋转排序数组

这个题目是搜索旋转排序数组,要求时间复杂度为 log n,这样就不能全部便利了,用二分法,但是又因为旋转排序,所以这组数组在整个范围内不是顺序的,故需要加一个判断,如果最前面的值小于中间值,说明前面是升序的,折半;反之,后面的就是升序的,折半class Solution {public: int search(vector<int>& nums, int target) { if(nums.size()==0) return -1; if(n

2021-12-09 10:50:38 170

原创 第二天总结

今天主要学了最接近三数之和(用双指针一左一右)四数之和(先排序,两个循环后面用双指针,一左一右)删除有序数组重复项(用双指针,一快一慢,快覆盖慢)移除元素(用双指针,一快一慢,不等于val的覆盖)或者用左右指针,左边等于val就用右边的覆盖下一个排列 从后到前找第一个小于前面的数学,记录下来,再从后往前找第一个大于这个值的数字,互换位置,然后第一个数字后面的所有值升序排列...

2021-12-07 20:58:01 693

原创 Leetcode——第31题下一个数排列

这是一个必备的算法题class Solution {public: void nextPermutation(vector<int>& nums) { int i = nums.size() - 2; while (i >= 0 && nums[i] >= nums[i + 1]) {//从右往左找第一个小的数 i--; } if (i >= 0) {//

2021-12-07 17:18:32 49

原创 Leetcode——第27题移除元素

这个题要求移除相同元素,还是用双指针(一前一后)的方法,不等于value的值,就将他保留下来,数组序号加一class Solution {public: int removeElement(vector<int>& nums, int val) { int a = 0; for (int i = 0; i < nums.size(); i++) { if (nums[i] != val) {

2021-12-07 16:34:06 746

原创 Leetcode——第26题删除有序数组重复项

准备快慢指针,快的往前移动,找不同,一旦找到不同,就将慢指针加一,赋上这个值,返回前面慢指针即可class Solution {public: int removeDuplicates(vector<int>& nums) { if(nums.size()==0)return 0; int a=0;//慢指针 for(int i=1;i<nums.size();i++){//快指针 if(nums[

2021-12-07 15:46:51 165

原创 Leetcode——第18题四数之和

返回互不相同的数组。这里面也是采用双指针的方法,两层循环,后面两个分别加以指针class Solution {public: vector<vector<int>> fourSum(vector<int>& nums, int target) { sort(nums.begin(),nums.end()); vector<vector<int>> res; if(nums.siz

2021-12-07 15:24:50 176

原创 Leetcode——第16题最接近三数之和

用暴力法是三层循环,在这里我使用的是两层循环,在第二层循环中使用双指针的方法,这样可以降低时间复杂度下面这段程序写的是第三个数字右边减少的情况,明天写一个用一个循环,左右以此缩进的情况class Solution {public: int threeSumClosest(vector<int>& nums, int target) { sort(nums.begin(),nums.end()); int ans=abs(nums[0]+num

2021-12-06 16:36:13 327

原创 Leetcode——第一天总结

双指针真的是个好东西,这个作题的时候要能够经常想到比如第1题、第15题两数求和,三数求和,暴力算法分别是需要两个循环和三个循环,当使用双指针后就可以减少一个循环;再比如第11题,也使用双指针,每次缩进较小的板子,得到的每次面积和上次面积取最大值,得到最终结果整数反转乘十的时候要判断是否溢出,分别与INT_MAX/10,INT_MIN/10比较 if(res>INT_MAX/10||res<INT_MIN/10){ return 0;

2021-12-06 15:55:05 183

原创 Leetcode——第15题三数之和

给定一个数组,返回不重复三元组和为0故此,我们不能使用三重循环,因为最差的情况是一个数组里面的元素都一样class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { int len=nums.size(); sort(nums.begin(),nums.end());//数组升序排列 vector<vector&

2021-12-06 15:37:18 1054

原创 Leetcode——第7题整数反转

这个要求是不存在储存64为整数class Solution {public: int reverse(int x) { int res=0; while(x){ if(res>INT_MAX/10||res<INT_MIN/10){ return 0; } int a=x%10; res=res*10+a;

2021-12-06 14:38:41 382

原创 Leetcode——第11题盛水最多的容器

这个题目是给一个数组,每个的值是记录该位置的高度,求能盛水的最大面积。这个题目可以用暴力法做:class Solution {public: int maxArea(vector<int>& height) { int a=height.size()*(height.size()+1)/2; int area=0; for(int i=0;i<height.size();i++){ for(int

2021-12-06 14:18:30 89

PyOpenGL_accelerate-3.1.5-cp38-cp38-win_amd64.whl

PyOpenGL_accelerate-3.1.5-cp38-cp38-win_amd64.whl

2021-04-22

SIFT算法,实现两张图片的特征提取与特征匹配

img1中的特征点个数: img2中的特征点个数: SIFT算法用时是:1秒 img1的特征描述矩阵大小[]特征向量个数: 特征向量的维数: 128 img2的特征描述矩阵大小[]特征向量个数: 特征向量的维数: 128 匹配的个数: 最大距离: 最小距离: goodMatch个数: 匹配率:

2021-04-22

LDATest.py

利用Pycharm自带的红酒数据,对红酒数据进行分类,分别输出图片分类

2021-04-22

Qlearning算法训练智能体走迷宫

这是一个22*22的迷宫,通过QLearning算法训练智能体走迷宫。包括迷宫文件、QLearning算法文件、主程序调用文件,无需调试,打开就能跑

2021-04-22

SIFT算法的Python实现

实现两张图的特征匹配

2021-04-22

VTK-9.0.1-cp38-cp38-win_amd64.whl

VTK-9.0.1-cp38-cp38-win_amd64.whl

2021-04-22

PyOpenGL-3.1.5-cp38-cp38-win_amd64.whl

PyOpenGL-3.1.5-cp38-cp38-win_amd64.whl

2021-04-22

opencv_python-4.5.2-cp38-cp38-win_amd64.whl

opencv_python-4.5.2-cp38-cp38-win_amd64.whl

2021-04-22

mayavi-4.7.2-cp38-cp38-win_amd64.whl

mayavi-4.7.2-cp38-cp38-win_amd64.whl

2021-04-22

PyOpenGL+python3.8+64位系统

python下安装OpenGL,不能直接用pip install PyOpenGL PyOpenGL_accelerate,应下载PyOpenGL_accelerate-3.1.5-cp38-cp38-win_amd64.whl PyOpenGL-3.1.5-cp38-cp38-win_amd64.whl两个文件,用pip install XXX.whl 安装(必须定位到.whl所在文件夹)

2021-03-24

liblto_plugin-0.dll

在MinGW编译时报错缺少的一个文件,下载该文件后将其放在D:\MinGW\libexec\gcc\mingw32\9.2.0\目录下即可(该目录就是最初安装MinGW的目录

2021-03-24

空空如也

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

TA关注的人

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