![](https://img-blog.csdnimg.cn/20200217151740439.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
我打算这通过算法来锻炼我的逻辑思维,此专栏记录我的算法题目和解法以及详解分析!
何学长在奔跑
持续努力,变平凡为不凡:
梦想与现实之间的巨大落差常令人烦躁不安。然而,人生就是”今天”的不断积累,就是“现在”这一刻的不断延续,如此而已。
然而,不错过今天,认真工作就能看清明天,明天再认真工作就能看清后面的一周,一周认真工作,就能看清后面的一月...就是说,即使不去探索遥远的未来,只要全身贯注于眼前的每一个瞬间,以前看不清楚的未来的景象就会自然地呈现在你眼前。
与其莫名其妙为明天而烦恼,与其苦思冥想去制定长远的计划,还不如全力过好今天这一天。这才是实现理想最切实的办法。
----稻盛和夫《活着》
展开
-
【专栏必读】算法这么难,到底该怎么学习算法呢?(心得体会、建议、线路)
此文章是我初入算法,看过一位贵人为我推荐的一些算法文献资料,让我找到了学习算法的方向和学习算法的意义。【算法大盘点】算法这么难?到底该怎么学习算法呢?你们都是怎么学的呢?那什么是算法?什么是数据结构呢?数据结构是一组数据的存储结构,而算法就是操作数据的方法。数据结构和算法是相辅相成的,数据结构是为算法服务的,而算法要作用在特定的数据结构之上。那么学习算法和数据结构解决的是如何更省、更快...原创 2020-02-15 13:35:34 · 2849 阅读 · 0 评论 -
算法目录(各种算法题目和详解)
一篇记录所有算法文章的文章!原创 2020-03-14 11:11:01 · 643 阅读 · 0 评论 -
老鼠试毒算法详解
题目1:有 1000 个一模一样的瓶子,其中有 999 瓶是普通的水,有一瓶是毒药。任何喝下一滴毒药的生物都会在一星期之后死亡。现在我们用小白鼠来做实验试毒,你只有一个星期的时间,如何检验出哪个瓶子里有毒药?最少用多少只小白鼠?答案: 10只(2 ^ 10 = 1024 > 1000)看似挺有趣的算法题目,其实也是颇有神韵!思路: 把1000个瓶子编号,编号为1~1000即...原创 2020-03-29 17:53:11 · 8679 阅读 · 1 评论 -
初谈算法的复杂度分析的必要性
算法的复杂度分析复杂度分析的前置知识:对数log什么是复杂度分析?数据结构和算法解决是“如何让计算机更快时间、更省空间的解决问题”因此需从执行时间和占用空间两个维度来评估数据结构和算法的性能分别用时间复杂度和空间复杂度两个概念来描述性能问题,二者统称为复杂度复杂度描述的是算法执行时间(或占用空间)与数据规模的增长关系为什么要进行复杂度分析?测试结果非常依赖测试环境测试结...原创 2020-02-16 15:28:09 · 1883 阅读 · 0 评论 -
学算法时间空间复杂度分析,要普及的对数知识logN
我们在学习算法的时候,是肯定需要分析时空和空间的复杂度的,这里我们必须要知道了解的一个知识就是对数——log。时间复杂度和空间复杂度分析,为什么要分析复杂度?你可能不记得什么是对数了,但是一定知道什么是幂吧。log10100相当于问“将多少个10相乘的结果为100”。答案就是两个。因此,log10100=2。对数运算就是幂运算的逆运算。举例:102 = 100——log10100 ...原创 2020-03-01 16:38:45 · 1228 阅读 · 0 评论 -
链表真的是最复杂的数据结构吗?什么是链表?
一、什么是链表?和数组一样,链表也是一种线性表从内存结构来看,链表的内存结构是不连续的内存空间,是将一组零散的内存块串联起来,从而进行数据存储的数据结构链表中的每一个内存块被称为节点Node。节点除了存储数据外,还需记录链下上一个节点的地址,即后续指针next二、为什么使用链表?即链表的特点插入、删除数据效率高O(1)级别(只需要更改指针即可),随机访问效率低O(n)级别(需要从...原创 2020-02-19 19:59:05 · 616 阅读 · 0 评论 -
链表、指针、链表、“哨兵”简化编程
一、理解指针或引用的含义含义:将某个变量(对象)赋值给指针(引用),实际上就是讲这个变量的地址赋值给指针示例:1)p->next = q;表示p节点的后继指针存储了q节点的内存地址2)p->next = p->next->next;表示p节点的后继指存储了p节点的下下个节点的内存地址二、警惕指针丢失和内存泄漏(单链表)插入节点1)在节点a和节...原创 2020-02-19 21:21:14 · 587 阅读 · 0 评论 -
Java桶排序,即集合作为桶的详细分析
一、简介桶排序也是时间复杂度仅为 O(n) 的一种排序方法,它假设输入数据服从均匀分布,我们将数据分别放入到 n 个桶内,先对桶内数据进行排序,然后遍历桶依次取出桶中的元素即可完成排序。...转载 2020-03-07 11:25:56 · 453 阅读 · 0 评论 -
怎样轻松找出4位数的所有“吸血鬼”数字,多种高效算法详解
关于吸血鬼数字算法问题,我也是读《java编程思想》中遇到的,觉得很有意思。于是,就去做了做。但因为我的粗心,读题的时候忽略了点问题,所以导致我的思路出现了岔口!(当时的思路就是想着把一个4位数拆分成两个2位数,存在数组的形式找出吸血鬼数字,也就是官方答案的那种解法)虽然我没有解出来,但是我对吸血鬼数字的算法问题做了总结、整理,也搜集了很多解法,并给他们编写了大量的注释,为让你们看的更明白。注...原创 2020-03-09 14:29:14 · 2341 阅读 · 2 评论 -
旅行商问题,又称TSP问题(Traveling Salesman Problem)
在大O的时间复杂度上,还记得那个O(n!)复杂度吗?这是一种计算时间极长的算法,而这个算法要解决的就是计算机科学领域非常著名的旅行商问题,其计算时间增加得非常快,而有些非常聪明的人都认为没有改进空间。有一位旅行商。他需要前往5个城市。这位旅行商要前往这5个城市,同时要确保旅程最短。因此,可考虑前往这些城市的各种顺序可能。圆圈代表地点,箭头代表去向,而下面标的公里数即是路程了,在这里我只是展...原创 2020-03-01 19:45:01 · 5976 阅读 · 0 评论 -
Java二分查找(普通方法和递归方法)
最近也我闲下来的时候看一些算法书籍,去解决一些算法问题。我会将常见的算法以记录的方式放在这里,以供我后续查找,也以这种方式分享给大家!我将把参透的代码做大量注释,尽可能做到每一行代码都简单易懂!二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。要求:必须采用顺序存储结构。必须按关键...原创 2020-03-01 17:33:39 · 333 阅读 · 0 评论 -
Java快速排序(简单版)
以下是通俗易懂的快速排序!摘自《啊哈!算法》,我将书中的C语言写成了Java语言。因为我觉得它真的很容易明白,所以我并将把他记录了下来,并分享给大家!假设我们现在对“6 1 2 7 9 3 4 5 1 0 8”这10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,这就是一个用来参照的数,待会儿你就知道它用来做啥了)。为了方便,就让第一个数6作为基准数吧。接下来,需要...原创 2020-03-01 11:52:34 · 4651 阅读 · 1 评论 -
Java八皇后问题(递归)
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。规则:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。思路:构建二维数组,模拟棋盘chess[r][c]=0表示:r行c列没有皇后,chess[r][c]=1表示:r行c列位置有一个皇后。从第一行第一列开始逐行摆放皇后依题意每行只能有一个皇后,遂逐...原创 2020-02-24 09:23:42 · 3427 阅读 · 1 评论 -
十五只猴子围成一圈选大王,依次1~7循环报数,报到7的猴子被淘汰,直到最后一只猴子称为大王,问,哪只猴子最后能称为大王?(约瑟夫环问题详解)
十五只猴子围成一圈选大王,依次1~7循环报数,报到7的猴子被淘汰,直到最后一只猴子称为大王,问,哪只猴子最后能称为大王?(多种方案解决)用boolean数组解决方案(后面有用int数组解决的方案)/** * @author Ziph* @date 2020年2月23日* @Email mylifes1110@163.com*/public class ChooseKing { p...原创 2020-02-23 20:01:09 · 2849 阅读 · 0 评论 -
筛选法求质数:输入一个整数n,求小于这个整数的所有质数(定义一个长度为n的boolean数组,true表示是质数,false表示不是质数)
质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。import java.util.Scanner;/** * @author Ziph* @date 2020年2月23日* @Email mylifes1110@163.com* * 筛选法求质数:输入一个整数n,求小于这个整数的所有质数* 算法:定义一个长度为n的boolean数组,true表示是质数,f...原创 2020-02-23 15:07:44 · 1352 阅读 · 0 评论 -
Java单链表反转的详细过程
(一)单链表的结点结构: data域:存储数据元素信息的域称为数据域; next域:存储直接后继位置的域称为指针域,它是存放结点的直接后继的地址(位置)的指针域(链域)。 data域 + next域:组成数据ai的存储映射,称为结点; ...转载 2020-02-19 22:13:13 · 302 阅读 · 0 评论 -
Java选择排序法、冒泡排序法、JDK排序法
选择排序法:选择排序法是一种不稳定的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。//选择排序法public class ArrayChooseSort { public static void main(String...原创 2020-02-12 13:39:58 · 728 阅读 · 0 评论 -
Java利用函数递归对“斐波那契数列”的实现
“斐波那契数列”什么是“斐波那契数列”呢?斐波那契数列又称黄金分割列数,指的是这样一个数列“ 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368…”这个数列从第3项开始,每一项都等于前两项之和。利用函数实现“斐波那契数列”(递归)...原创 2020-02-11 17:22:15 · 613 阅读 · 1 评论 -
Java利用for循环解决经典算法题--“百钱买百鸡”
经典算法题–“百钱买百鸡”三文钱可以买一只公鸡,两文钱可以买一只母鸡,一文钱可以买三只小鸡。问:用100文钱买100只鸡,公鸡、母鸡、小鸡的只数各有多少只?题目中有三个未知数,用传统算法是不好计算的,但是计算机的运行机制很简单的可以计算出各种鸡的只数。/**Author--Ziph * 百钱买百鸡--经典算法题 * 鸡翁一,值钱三,鸡母一,值钱二,鸡雏三,值钱一,百钱买百鸡,问翁、...原创 2020-02-08 20:01:27 · 6642 阅读 · 1 评论 -
Java桶排序算法并添加了桶排序去重(简单版)
桶排序算法注意:这不是真正的桶算法,这是一个简单版的桶算法,因为比较容易让人理解,所以这是简化版,真正的桶算法要比这个复杂的多的多!请大家不要误会!只是为了考虑到大家让大家明白!OK!用算法锻炼运算逻辑思维是一个好的想法,所以我初入算法,打算来锻炼我的运算逻辑思维!以后的日子也会研究一些简单的算法,给大家通俗易懂的解决办法!(争取让大家都能明白,小白也易懂)最起码我都能懂,比我聪明的你们研...原创 2020-02-15 00:00:28 · 451 阅读 · 0 评论