算法编程
Day-yong
做好每一步,坚持到最后!!!
展开
-
【算法编程】排序算法详解
一、排序算法复杂度比较二、冒泡排序经过上图一轮后,最大的数就到了最后位置,接下来我们对剩下的1,2,3,6,4进行同样的方式,最终可以将数值从小到大排序Java代码:package day01;/** * 冒泡排序 * @author Danycym * */public class Code01_BubbleSort { public static void bub...原创 2019-11-11 18:14:16 · 307 阅读 · 0 评论 -
【算法编程】KMP、Manacher和BFPRT算法
一、KMP算法1、算法背景 KMP 算法原本是用来解决包含问题的,具体问题如下:给定一个主串 str1 和模式串 str2 ,要求找出 str2 在 str1 中出现的位置,此即串的模式匹配问题。例如:str1:aaaaaabstr2:aaab暴力解决方法: str1 从0的位置依次往下匹配 str2KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的...原创 2019-09-15 14:14:44 · 398 阅读 · 0 评论 -
【算法编程】二叉树经典题(基础篇)
二叉树的遍历 二叉树遍历分为三种:前序、中序和后序,为什么这么命名呢?其实是根据节点顺序命名的。如图为满节点,1为根节点、2为做节点、3为右节点,主要是看根结点1的位置,在前面就是前序遍历、在中间就是中序遍历、在后面就是后续遍历。下面我们通过例子,来看看:1、前序遍历在遍历节点的左节点的时候,可能左边节点还有左节点和右节点,要一直遍历到叶子节点,才能遍历其右节点例如在遍...原创 2019-09-08 22:04:12 · 921 阅读 · 0 评论 -
【算法编程】单链表公共部分、回文、划分、复制、相交、环相关问题
一、打印两个有序链表的公共部分1、题目描述 给定两个有序链表的头指针 head1 和 head2 ,打印两个链表的公共部分2、图解3、Java代码package day02;/** * 打印两个有序链表的公共部分 * @author Danycym * */public class Code11_PrintCommonPart { public static clas...原创 2019-09-04 23:30:37 · 231 阅读 · 0 评论 -
【算法编程】矩阵打印、旋转和查找
一、转圈打印1、题目描述给定一个整型矩阵 matrix,请按照转圈的方式打印它。例如:[12345678910111213141516] \left[ \begin{matrix} 1 & 2 & 3 & 4 \\ 5 & 6 & 7 & 8 \\ 9 &am...原创 2019-09-03 17:06:06 · 305 阅读 · 0 评论 -
【算法编程】数组、栈和队列间的实现
一、用数组结构实现大小固定的栈栈:先进后出二、用数组结构实现大小固定的队列三、仅用队列结构实现栈结构四、仅用栈结构实现队列结构五、练习1、猫狗队列宠物、狗和猫的类如下:public class Pet { private String type; public Pet(String type) { this.type = type; } public Strin...原创 2019-09-02 16:31:59 · 267 阅读 · 0 评论 -
【LeetCode】0013——罗马数字转整数
题目描述解题思路本题只是上一个题目【整数转罗马数字】逆过程,需要注意的是,在遇到I、X、C时我们要继续判断它的下一个字符是什么1、Java代码class Solution { public int romanToInt(String s) { int result = 0; //存储结果 char[] lm = s.toCharArray();...原创 2019-08-13 17:15:41 · 179 阅读 · 0 评论 -
【LeetCode】0012——整数转罗马数字
题目描述解题思路1、暴力解 遍历整数的每一位数,逐一判断即可,题目要求输入范围在1到3999之间Java代码:class Solution { public String intToRoman(int num) { //用于存储结果 StringBuilder result = new StringBuilder(); //如...原创 2019-08-13 15:24:32 · 177 阅读 · 0 评论 -
【LeetCode】0011——盛最多水的容器
题目描述解题思路1、暴力解 本题可以看作是一个组合的问题,就是组合数组中的两个数计算一个值,该值为:(大下标-小下标)*小数值,那我们就直接通过两个for循环,把所有组合找出来,然后求值,取最大的值即可。直接上代码:Java代码:public class Solution { public int maxArea(int[] height) { int area = 0; ...原创 2019-08-13 12:06:37 · 229 阅读 · 0 评论 -
【LeetCode】0010——正则表达式匹配
题目描述解题思路 通过提供的例子,感觉只要分情况考虑就OK,但是开始动手写代码的时候,果然,被标位困难还是有道理的,算了,还是老老实实从头再来吧,开始从例子分析题目:经过归纳总结我们可以发现,匹配模式中无非就三种情况:'.':该模式可以匹配单个任意字符,只要匹配任意单个字符就可以跳到下一步'*':该模式必须和其他两种情况搭配使用,表示0个或多个前面的那个字符其他字符:主要判断...原创 2019-08-12 23:51:52 · 259 阅读 · 0 评论 -
【LeetCode】0009——回文数
题目描述解题思路解法一,将整个整数反转,然后与原整数比较解法二,根据回文的特点,只需要比较右边一半反转后是否与左边一半相等,关键在如何判断反转数字已经达到原始数字位数的一半解法三,双指针,指针 i 和 j 分别从整数的第一位,和最后一位,依次 i++ 和 j-- 比较每个数字是否相同,关键在于如何获取一前一后的数字需要注意的是负数不作为回文数考虑,可以直接返回false反转...原创 2019-08-12 01:30:51 · 196 阅读 · 0 评论 -
【LeetCode】0461——汉明距离
题目描述解题思路原创 2019-08-12 00:12:59 · 183 阅读 · 0 评论 -
【LeetCode】0617——合并二叉树
题目描述解题思路 先处理根结点,1和2,处理完后,t1.left 与 t2.left 又是两个二叉树,t1.right 与 t2.right也是两个二叉树,对左子树和右子树又要做同样的事,很容易想到递归的方法。Java代码class Solution { public TreeNode mergeTrees(TreeNode t1, TreeNode t2) { ...原创 2019-08-09 18:46:12 · 200 阅读 · 0 评论 -
【LeetCode】0007——整数反转
题目描述解题思路 本题定义为简单,那么应该用不到什么高大上的数据结构,其实就是考大家对 % 和 / 的使用,以及对整数边界的判别。%:取余,例如:11 % 10 = 1,取尾/:除以并取整,例如:11 / 10 = 10,去尾两个搭配使用,就可以达到将一个数,从后往前依次取出每个数字,正好用于本题因为整数的最大值为:2147483647,最小值为:-2147483648如果一个...原创 2019-08-07 16:00:50 · 200 阅读 · 0 评论 -
【LeetCode】0004——寻找两个有序数组的中位数
题目描述解题思路中位数需要根据两个数组长度和的奇偶决定:假设nums1.length = m,nums2.length = n若(m + n) % 2 == 0,表示两数组长度之和为偶数,中位数则是中间两个数否则为奇数,中位数是中间的数但是我们可以不同通过分别考虑来计算最终值,只需要通过第(m + n + 1) / 2个数 + 第(m + n + 2) / 2个数除以2就可以得...原创 2019-08-07 15:58:47 · 256 阅读 · 0 评论 -
【LeetCode】0002——两数相加
题目描述解题思路Java代码class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode res = null; //结果链表,不可移动,一旦移动就会丢失值 ListNode cur = null; //结果链表的游标,可移动,为了往结果链表中...原创 2019-08-05 11:29:34 · 235 阅读 · 0 评论 -
【LeetCode】0001——两数之和
题目描述解题思路Java代码class Solution { public int[] twoSum(int[] nums, int target) { if(nums == null || nums.length < 2) { return new int[] {-1, -1}; } int[] res = new int[] {-1,...原创 2019-08-04 22:06:47 · 142 阅读 · 0 评论 -
【LeetCode】008——字符串转换整数(atoi)
题目描述请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些...原创 2019-08-04 21:39:47 · 213 阅读 · 0 评论 -
【LeetCode】006——Z字形变换
题目描述将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 "LEETCODEISHIRING"行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。请你实现这个将字符串进行指定行数变换的...原创 2019-07-24 21:51:41 · 205 阅读 · 0 评论 -
【LeetCode】005——最长回文子串(详解)
题目描述给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”解题思路1、暴力解 最容易想到的就是暴力解,求出原字符串s的每一个子串,然后再判断是不是回文,找到最长的那个即可。class Sol...原创 2019-07-24 18:12:40 · 289 阅读 · 0 评论 -
【LeetCode】003——无重复字符的最长子串
题目描述给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子...原创 2019-06-13 20:34:05 · 257 阅读 · 0 评论 -
【剑指offer】12——数值的整数次方
题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。一、解题思路 本题在求base的exponent次方,很多人可能会通过一个for循环将base连乘,但是这样就忽略了exponent的正负和0的情况,以及当exponent为负数的时候,我们知道得到结果是正数的倒数,那么如果结果是0,我们再取倒数就会导致程序出错,因此我们需...原创 2019-06-13 16:09:33 · 296 阅读 · 0 评论 -
【剑指offer】11——二进制中1的个数
题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。原创 2019-05-14 17:51:09 · 181 阅读 · 0 评论 -
【剑指offer】10——矩形覆盖
题目描述 我们可以用 2∗12*12∗1 的小矩形横着或者竖着去覆盖更大的矩形。请问用 nnn 个 2∗12*12∗1 的小矩形无重叠地覆盖一个 2∗n2*n2∗n 的大矩形,总共有多少种方法?一、解题思路以 8∗28*28∗2 为例:我们可以看出,这是个斐波那锲数列,f(1)=1,f(2)=2f(1) = 1,f(2) = 2f(1)=1,f(2)=2参考:【剑指offer】...原创 2019-05-12 23:06:38 · 157 阅读 · 0 评论 -
【剑指offer】09——变态跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。一、解题思路数学推导: 跳上 n−1n-1n−1 级台阶,可以从 n−2n-2n−2级跳1级上去,也可以从 n−3n-3n−3 级跳2级上去,也可以从 n−4n-4n−4级跳3级上去,依次类推。如果是从 n−2n-2n−2级跳1级上去,已知从开始跳到 n−2n-2...原创 2019-05-11 18:57:01 · 144 阅读 · 0 评论 -
【剑指offer】08——跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。一、解题思路 遇到这一类型的题目,上来只是想肯定解不了,我们可以进行归纳总结:如果只有1级台阶,那么显然只有一种跳法f(1)=1f(1) = 1f(1)=1如果有2级台阶,那么就有两种跳法:一种是分两次跳,每次跳1级;另外一种是一次跳2级f(...原创 2019-05-09 16:18:31 · 136 阅读 · 0 评论 -
【剑指offer】07——斐波那契数列
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39指的是这样一个数列:1、1、2、3、5、8、13、21、34、……1、1、2、3、5、8、13、21、34、……1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1,F(n)=F(n−1)...原创 2019-05-08 09:40:33 · 215 阅读 · 0 评论 -
【剑指offer】06——旋转数组的最小数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组 {3,4,5,1,2} 为 {1,2,3,4,5} 的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。一、二分查找...原创 2019-05-05 20:02:41 · 172 阅读 · 0 评论 -
【剑指offer】05——用两个栈实现队列
题目描述 用两个栈来实现一个队列,完成队列的 push 和 pop 操作。 队列中的元素为 int 类型。一、解题思路原创 2019-05-02 22:01:33 · 155 阅读 · 0 评论 -
【剑指offer】04——重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。一、二叉树的遍历 二叉树遍历分为三种:前序、中序和后序,为什么这么命名呢?其实是根据节点顺序命名的。如图为满节点,1为根节点、2为做节点、...原创 2019-04-26 19:34:30 · 173 阅读 · 0 评论 -
【剑指offer】03——从尾到头打印链表
题目描述 输入一个链表,按链表值从尾到头的顺序返回一个 ArrayList 。一、解题思路原创 2019-04-25 19:30:33 · 147 阅读 · 0 评论 -
【剑指offer】02——替换空格
题目描述 请实现一个函数,将一个字符串中的每个空格替换成 “%20”。例如,当字符串为 We Are Happy. 则经过替换之后的字符串为 We%20Are%20Happy。一、解题思路 首先将原字符串转为字符数组,遍历原字符数组,计算出替换之后字符串的长度(因为空格为一个字符,%20为三个字符,所以遇到一个空格就加2个字符),创建新的相同长度字符数组;然后从后往前遍历原字符数组,遇到...原创 2019-04-17 22:26:43 · 155 阅读 · 0 评论 -
【剑指offer】01——二维数组中的查找
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。例如:输入一个二维数组: [ [2,4,7], [3,6,12], [5,10,15] ]输入一个整数:5,返回 true输入一个整数:8,返回 false一、解题思...原创 2019-04-17 13:41:28 · 882 阅读 · 0 评论