算法学习之路
water好好敲代码
这个作者很懒,什么都没留下…
展开
-
算法归纳系列-滑动窗口
例如找数组内大于s的最短连续子序列的长度。可以使用滑动窗口int minSubArrayLen(int s, vector<int>& nums) { int len=nums.size(); int start=0; int end=0; int cur=0; int res=INT_MAX; while(end<len){ cur+=nums[end];原创 2020-09-19 17:13:36 · 68 阅读 · 0 评论 -
算法归纳系列-判断质数
传统的判断素数的方法就是使用当前数字去对小于它的数进行依次整除尝试如下:bool isprim(int n){ for(int i=2;i*i<=n;i++){ if(n%i==0){ return false; } } return true;}上述方法每次只能判断一个数是否为素数,而且计算量较大,这里提出一种素数筛法,可以快速的找出某个范围内的素数数量素数筛法用此方法可以快速统计小于等于n的数中素.原创 2020-09-19 13:46:05 · 114 阅读 · 0 评论 -
算法归纳系列-并查集
并查集并查集主要用于判断图的联通性以及判环等问题的解决。并查集的定义父数组,保存当前下标对应的父节点编号。find(查找祖先节点)操作 寻找父节点,(在此过程中将并查集树压平)union (合并操作 联通两个点所在的集合)例题 岛屿数量给你一个由'1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:[..原创 2020-09-19 13:18:58 · 296 阅读 · 0 评论 -
算法归纳系列-字符串处理算法
经典问题1(KMP) 给出一个字符串str,问字符串s是否包含str。常见思路是在s中遍历寻找str,算法复杂度为O(len(str)*len(s)),kmp算法能将复杂度降低到O(len(s))级别,kmp算法的思想主要是通过求匹配字符串每个位置的最长重复前缀,每次匹配失败之后就直接用next数组中的最长匹配前缀那一部分去匹配,而不用重新匹配。vector<int> getNext(string str){ int len=str.length(); vector<int&原创 2020-09-16 17:05:05 · 404 阅读 · 0 评论 -
归纳算法系列-单调栈
单调栈单调栈分为递增栈和递减栈。主要是为了解决从某个元素的左边有多少个小于该元素的数字,或者是解决某个元素左边有多少个大于该元素的数字。经典问题1 从长度为n的数组中挑出k个数字,使得k个数字按序组成的自然数最小。void getMin(vector<int>& arr,int k){ vector<int> st;// 用的是vector去代替栈,但是思路并没有变 int len=arr.size(); int popTime=len-k;//剩余可以原创 2020-09-15 17:27:45 · 219 阅读 · 0 评论 -
归纳算法系列-排序算法
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言最近几个月学习的一些算法记录,这里主要记录排序算法,记录一下冒泡排序,快速排序,归并排序以及堆排序。一、冒泡排序冒泡排序主要通过每一趟的比较来使得大数上浮,每一轮确定一个最大的数的位置,最终直至所有的数的位置确定。void bubbleSort(vector<int>& ...原创 2020-09-14 11:27:03 · 197 阅读 · 0 评论