算法总结
Hepburn Yang
匠心精神
展开
-
排序算法总结(一)
【前言】 前一阵子直在学习算法,通过不断的总结我也发现了算法的魅力。虽然只是简单的排序算法,但是每一次自己动手去画图,去排列对比,看一些相关小视频的时候,感触就会越来越深,从刚开始的只不过简简单单的排序到后来升华成算法的艺术,需要自己慢慢去体会这个过程。 排序主要分为内排序和外排序,如果待排序的记录比较少,整个过程的所有记录都可以存在内存中,这样的排序叫做“内排序”。...原创 2016-06-10 14:56:16 · 1812 阅读 · 20 评论 -
【数据结构与算法】-- 6.1 链表的5个经典操作--单链表反转
本文来分享关于链表的五种经典操作的实现:单链表反转链表中环的检测两个有序的链表合并删除链表倒数第n个结点求链表的中间结点1.单链表反转实现 // 单链表反转 public static Node reverse(Node list) { Node curr = list, pre = null; while (curr != null...原创 2019-04-28 19:30:58 · 482 阅读 · 3 评论 -
【数据结构与算法】-- 5. 如何实现一个队列(顺序队列和链式队列)
队列跟栈一样, 也是一种操作受限的线性表数据结构。它具有先进先出的特性, 支持在队尾插入元素, 在队头删除元素, 那究竟该如何实现一个队列呢?跟栈一样, 队列可以用数组来实现, 也可以用链表来实现。 用数组实现的栈叫作顺序栈, 用链表实现的栈叫作链式栈。 同样, 用数组实现的队列叫作顺序队列, 用链表实现的队列叫作链式队列。顺序队列package com.anomalous.array;...原创 2019-04-28 19:26:16 · 779 阅读 · 3 评论 -
【数据结构与算法】-- 4. 如何实现一个栈(顺序栈和链式栈)
栈的操作特性上来看, 栈是一种“操作受限”的线性表, 只允许在一端插入和删除数据。当某个数据集合只涉及在一端插入和删除数据, 并且满足后进先出、 先进后出的特性, 我们就应该首选“栈”这种数据结构。如何实现一个栈?实际上, 栈既可以用数组来实现, 也可以用链表来实现。 用数组实现的栈, 我们叫作顺序栈, 用链表实现的栈, 我们叫作链式栈。顺序栈package com.anomalous...原创 2019-04-28 19:20:07 · 707 阅读 · 2 评论 -
【初级算法】-- 8.验证回文字符串(利用双指针法)
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。(“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串)示例 1:输入: “A man, a plan, a canal: Panama”输出: true示例 2:输入: “race a car”输出: false/...原创 2019-04-24 09:15:37 · 402 阅读 · 4 评论 -
链表相关的算法题大汇总 (1)— 数据结构之链表奇思妙想
声明:转自http://hi.baidu.com/lanxuezaipiao/item/afc616caf8393a155050585b基本函数(具体代码实现见后面)1,构造节点//定义节点类型struct Node{ int value; Node*next;};2,分配节点//之所以要分配节点原因是需要在分配函数中进行初始化,并且也...转载 2017-09-28 10:21:52 · 666 阅读 · 23 评论 -
【数据结构与算法】--2.学习方法
思考:为什么要学?最大的感受是学习的过程可以锻炼自己的性能意识,写代码的时候会潜意思的考虑性能问题,所以写出低效代码的情况会越来越少。是什么?数据结构指的是“一组数据的存储结构”,算法指的是:“操作数据的一组方法”。数据结构是为算法服务的,算法是要作用在特定的数据结构上的。学什么?1.复杂度是算法与数据结构的精髓,是对效率和资源消耗量的一个衡量,学习算法与数据结构就要学会对其进行复杂...原创 2019-04-10 08:46:16 · 1345 阅读 · 2 评论 -
【数据结构与算法】--3.复杂度分析
一.为什么需要复杂度分析?代码跑一边做统计监控的数据虽然很准确,但是属于事后统计分析,局限性在于:依赖测试环境(硬件)受测试数据规模的影响很大二、什么是复杂度分析数据结构和算法是解决“如何让计算机执行时间更快,更生空间”的解决问题。所以要从执行时间和占用空间两个维度来评估算法的性能。于是用了时间复杂度和空间复杂度两个概念来描述性能问题,统称为复杂度;复杂度描述的是算法执行...原创 2019-04-12 11:29:29 · 616 阅读 · 0 评论 -
【数据结构与算法】-- 1.知识图谱
想扎实内功,想提高大脑的思考力,想提升看问题的深度,绕不开数据结构与算法,来一份数据结构和算法的知识图谱,每一个都需要一点一点的啃,学技术切忌浮躁,沉淀中。...原创 2019-04-05 09:05:15 · 1591 阅读 · 0 评论 -
【初级算法】-- 7.顺时针旋转二维数组90度
给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。不要使用另一个矩阵来旋转图像。示例 1:给定 matrix =[[1,2,3],[4,5,6],[7,8,9]],原地旋转输入矩阵,使其变为:[[7,4,1],[8,5,2],[9,6,3]]示例 2:给定 matrix =...原创 2019-03-24 21:37:58 · 2891 阅读 · 1 评论 -
【初级算法】-- 6.加一输出新数组
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123+1=124。示例 2:输入: [4,3,2,9]输出: [4,3,3,0]解释: 输入数组表示数字 4329+1=...原创 2019-03-17 21:34:39 · 384 阅读 · 1 评论 -
【初级算法】-- 5.只出现一次的数字(java中的异或操作)
题目:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。要求尽量不使用额外空间示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4/** * 只出现一次的数字 * @author 天赋吉运-杨晓慧 * @create 2019-03-09 21:28 */public class...原创 2019-03-10 16:21:28 · 438 阅读 · 1 评论 -
【初级算法】-- 4.数组元素位移
题目:给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。示例 1:输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]示例 2:输入: [-1,-100,3,99]...原创 2019-03-09 21:06:50 · 674 阅读 · 4 评论 -
【初级算法】-- 3.股票最大收益
方法二:峰谷法算法假设给定的数组为:[7, 1, 5, 3, 6, 4].如果我们在图表上绘制给定数组中的数字,我们将会得到:Profit Graph如果我们分析图表,那么我们的兴趣点是连续的峰和谷。用数学语言描述为:关键是我们需要考虑到紧跟谷的每一个峰值以最大化利润。如果我们试图跳过其中一个峰值来获取更多利润,那么我们最终将失去其中一笔交易中获得的利润,从而导致总利润的降低。...原创 2019-03-08 21:59:00 · 3132 阅读 · 3 评论 -
【初级算法】--2.两数相加
题目:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因: 2+5,4+6(需要往后进一位),3+...原创 2019-03-08 21:50:00 · 461 阅读 · 1 评论 -
【初级算法】--1.已知两数之和,返回数组下标
题目描述:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]下面提供三种写法,我只写出了第一种,学习后两种方法优秀的思维方式写高质量的代码。 /*...原创 2019-03-08 21:35:44 · 431 阅读 · 1 评论 -
链表相关的算法题大汇总(2) — 数据结构之链表奇思妙想
高级函数(具体代码实现见后面)1.单链表反转思路1:O(n^2). 我的做法是“狸猫换太子”,不进行改动链表结构,只首尾交换len/2次。但是在本函数中用到了定位函数,定位函数实际上是遍历了一遍整个链表,所以综合效率很低,达到O(n^2).void reverseList(Node*Head)思路2:O(n). 就最一般的情况转载 2017-09-28 10:36:03 · 855 阅读 · 30 评论 -
各种排序算法稳定性的总结!!!
原文链接:http://blog.csdn.net/johnny710vip/article/details/6895654这几天笔试了好几次了,连续碰到一个关于常见排序算法稳定性判别的问题 ,往往还是多选,对于我以及和我一样拿不准的同学可不是一个能轻易下结论的题目,当然如果你笔试之前已经记住了数据结构书上哪些是稳定的,哪些不是稳定的,做起来应该可以轻松搞定。本文是针对老是记不住这个或者想真正明白转载 2017-08-03 12:19:06 · 700 阅读 · 22 评论 -
【数据结构与算法】-- 6.2 链表的5个经典操作--单链表检测存在环和求环长
1.如何判断单链表里面是否有环?设定两个指针,一个慢指针,一个快指针,慢指针每次往前移动一步,快指针同时移动两步。如果链表中存在环,则快慢指针一定会相遇,否则快指针首先遇到null(尾指针);(1)为什么链表中存在环快慢指针就一定会相遇呢?举个简单的例子,小红和小明在操场上跑步,小明的速度是小红的两倍,假定他们同时从起点出发,那么小红跑完一圈的到达起点的时候小明一定会跑完两圈同时也到达起点,...原创 2019-04-30 17:42:46 · 359 阅读 · 2 评论