
算法学习
tyeerth
现在很菜 以后会更菜
展开
-
C++中string的基本用法
C++中string的基本用法一、初始化初始化的方式主要有两种,一是使用等号进行拷贝初始化,二是不使用等号直接初始化。 string str1; //生成空字符串 string str2("123456789"); //生成"1234456789"的复制品 string str3("12345", 0, 3);//结果为"123" string str4("0123456", 5); //结果为"01234" string原创 2020-11-21 19:28:57 · 782 阅读 · 0 评论 -
反转单词顺序
反转单词顺序1、方法一(利用stringBuffer的特性进行求解)class Solution { public String reverseWords(String s) { String[] s1 = s.replaceAll("\\s{1,}"," ").trim().split(" "); StringBuffer stringBuffer = new StringBuffer(); for (int i = s1.length原创 2020-11-09 20:12:12 · 205 阅读 · 0 评论 -
利用荷兰国旗问题改进经典快排和随机快排
利用荷兰国旗问题改进经典快排和随机快排1、经典快排思想每次取数组中最后一个值,依照这个值把数组分为两份,小于的在左边,大于的在右边。再依次按照这样的思想进行操作。2、荷兰国旗问题对快排进行改良ps:荷兰国旗问题可以看另一篇博客荷兰国旗问题把数组是分为三个部分的,小于、等于、大于这三个部分。按照这样的思想,等于部分就不需要进行再次进行排序,这样就能减少很大一部分的开销。3、代码实现/** * 改进之后的经典快排和随机快排。 * @author tyeerth * @date 2020原创 2020-10-26 20:05:55 · 183 阅读 · 0 评论 -
荷兰国旗问题详解
荷兰国旗问题1、问题描述2、解决方法当前数cur<number,则++less,cur++当前数cur>number,则cur,–more当前数cur=number,则cur++3、代码/** * 荷兰国旗问题 * @author tyeerth * @date 2020/10/26 - 19:19 */public class NetherLandsFlag { public static int[] partition(int[] arr ,int L原创 2020-10-26 19:38:44 · 322 阅读 · 0 评论 -
归并排序算法分析
归并排序算法分析1、算法思想 利用分治的思想,每一次把原数组分为两份,再进行对子数组进行排序,最后对排好序的数组进行合并,形成一个新的有序序列。1.1执行过程2、实现步骤2.1 mergeSort()方法public static void mergeSort(int[]arr){ if (arr == null || arr.length < 2){ return; } mergeSort(arr,0,arr原创 2020-10-25 10:36:39 · 279 阅读 · 0 评论 -
DP背包问题理解
DP分析1、背包问题(选择问题)输入样例4 51 22 43 44 5输出样例:82、要点分析特点:每个物品仅能使用一次重要变量&公式解释f[i][j]:表示所有选法集合中,只从前i个物品中选,并且总体积≤j的选法的集合,它的值是这个集合中每一个选法的最大值.(注意:这里的二维数组f可以把它看成是一个求最大值的函数,但是不用去实现。可看成函数两边左右抵消。便于理解可以直接把它当成最大值看待)状态转移方程:f[i][j] = max(f[i-1][j], f原创 2020-09-22 10:52:46 · 217 阅读 · 0 评论 -
从C快速过渡到C++(便于写算法)
文章目录一、前言二、C++标准输入输出2.1 输出2.2输入三、引用变量(&运算符)四、函数的默认形参和重载4.1形参4.2重载(和Java相同)五、函数模板(类似于Java的泛型)六、用户定义类型string和Vector6.1 string6.2Vector七、指针和动态内存分配7.1指针7.2 内存分配一、前言 因为自己平时是做JavaWeb方向的,在写一些算法的时候,Java运行的速度远低于C++,并且Java代码过于复杂,代码量也高。在一些算法网站上也是普遍采用C++,所以这里学原创 2020-09-14 21:00:24 · 560 阅读 · 0 评论 -
回溯算法思想与分析(八皇后问题)
回溯算法思想与分析(八皇后问题)文章目录回溯算法思想与分析(八皇后问题)1、思想2、八皇后问题2.1问题描述:2.2解决思路2.3求解思路2.4代码1、思想回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就**“回溯”**返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点原创 2020-08-19 16:20:34 · 998 阅读 · 0 评论 -
分治思想分析与举例
分治算法分析文章目录分治算法分析1、思想2、什么样的问题适合分治法3、分治思想的经典运用(归并排序)3.1归并排序代码3.2图解1、思想字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并2、什么样的问题适合分治法问题的规模缩小到一定的规模就可以较容易地解决。问题可以分解为若干个规模较小的模式相同的子问题,即该问题具有最优子结构性质。合并问题分解出的子问题的解可以得原创 2020-08-19 10:09:00 · 375 阅读 · 0 评论 -
字符串匹配算法-----RK算法(利用哈希)
RK算法分析与详解1、原理分析利用哈希对主串依次进行求哈希值,并与子串的哈希值进行比较,相同则说明相匹配但是要排除哈希冲突的可能性(通过匹配来验证)其实就是在主串中依次计算字串长度的哈希值并进行比较2、Java实现/** * BF算法的升级版,基于哈希算法 * @author tyeerth * @date 2020/8/12 - 10:12 */public class RK { /** * * @param string 模式串(字串)原创 2020-08-12 11:17:30 · 589 阅读 · 0 评论 -
字符串匹配算法------------BF(暴风)算法分析
BF(暴风)算法文章目录BF(暴风)算法1、原理2、补充3、算法思路4、Java实现1、原理 BF算法,朴素匹配算法。这一种字符串匹配方式比较暴力,但是相对来说比较的简单、易懂,但对的性能不高。2、补充Java中常用的字符串方法,indexOf(),startWith(),endWith()。BF,RK,BM,KMP算法。3、算法思路 在主串钟,检查起始位置分别是 0、1、2 …… n-m 且长度为m的n-m+1个子串,检查有没有跟模式串想匹配的。4、Java实现/**原创 2020-08-12 10:11:15 · 511 阅读 · 0 评论 -
对数器的概念与使用
对数器的使用文章目录对数器的使用1、介绍2、使用方法2.1 创建一个绝对正确的方法2.2 生成一个随机数组2.3 copy数组2.4 判断两数组是否相同2.5 大样本测试3、对插入排序进行测试3.1插入排序3.2测试结果1、介绍 在写出一个算法程序的时候,我们往往无法通过手动输入各种各样的测试数据来验证,在OJ平台上也无法找到对应的题目来进行验证。而且一些贪心算法是很难通过数学的方式来进行验证的,这时使用对数器来判断算法程序是否正确2、使用方法2.1 创建一个绝对正确的方法publi原创 2020-07-28 11:11:21 · 342 阅读 · 0 评论 -
在行列都排好序的矩阵中找数
在行列都排好序的矩阵中找数1、题目描述给定一个有N*M的整型矩阵matrix和一个整数K,matrix的每一行和每一 列都是排好序的。实现一个函数,判断K是否在matrix中。【要求】 时间复杂度为O(N+M),额外空间复杂度为O(1)。2、思路。这里从数据状况来思考。由于数据每一行和列都是排好序的。每一次先判断右上角的数a,如果是小于就说明a下面的数不可能。 ...原创 2020-04-11 09:34:46 · 210 阅读 · 0 评论