轻松学算法
恪愚
江湖人称“云小梦”。一个大前端路上还未“毕业”的“小学生”。爱好分享、执着探索、乐于开源;曾参与过中大型微信小程序项目前端开发,并主导过一些官网(原生)开发;着迷于vue、node、css以及原生js技术。热衷研究现有技术的成型创新应用。目前对前端可视化和webRTC、web安全有浓厚的兴趣。开源且目前维护的有:微信小程序扩展组件库—— https://github.com/1314mxc/yunUI ,欢迎star!
展开
-
算法不就那点事---杨辉三角解法
杨辉三角巴斯卡三角,又叫杨辉三角,又名贾宪三角。说来,这也算是大一新生算法入门的东西了,同样的还有什么打印菱形等,不过都差不多。兼有性质:左右对称,中间最大开头为1每一个数等于其上方两数之和(除前两行)第n行有n项,和为(2n-1)记得上高中时就开始研究杨辉三角,当时有一个公式:这个大家应该很熟知吧。好,我们再来看一张杨辉三角图这就是文章后面代码的运行结果图,简化一下...原创 2019-01-10 14:30:59 · 584 阅读 · 0 评论 -
懵逼树上懵逼果:探索二分法搜索
常见的线性结构有:数组,栈,队列,链表; 树是另外一种极其重要的数据结构。二分搜索树&&二分查找法二分查找法:在有序数组中查找某一特定元素的搜索算法。其过程从数组中间元素开始,若中间元素恰是要查找的元素,过程结束;反之,则在数组大于或小于中间元素的那一半中查找,重复第一步。若在某一步中数组为空,则代表找不到。每次取其一半,此算法诣在大幅减小运算量和内存,时间的消耗。...原创 2019-02-11 13:10:14 · 660 阅读 · 0 评论 -
链表与指针:专治“疑难杂症”
本文大概解决三个问题,实话说,链表这些问题真是刷新了以前我对链表的“偏见”。输出单链表倒数第 K 个节点题目:输入一个单链表,输出此链表中的倒数第 K 个节点。(去除头结点,节点计数从 1 开始)。两次遍历法/*计算链表长度*/int listLength(ListNode* pHead){ int count = 0; ListNode* pCur = pHead-&g...原创 2019-03-04 09:12:37 · 898 阅读 · 0 评论 -
这是一篇算法思维:斐波那契的黄金分割情怀
今天写网站时突然感觉到,算法思维好像要比算法过程重要的多。。。借此来谈谈某室友突然谈到的“黄金分割问题”斐波那契数列中的黄金分割斐波那契数列因古希腊建筑《伯特农神殿》上出现的“黄金分割”而闻名,其中有许多有趣的数学特性。斐波那契数列由两个 1 开端,其后的每一位数字都是前两位数字之和。譬如 1 和 1 的和为 2,1 和 2 的和为 3,2 和 3 的和为 5,3 和 5 的和为 8……一...原创 2019-03-15 13:30:28 · 499 阅读 · 0 评论 -
数据结构与算法:小叙链表
提起链表,就不得不提“顺序表”。作为顺序存储结构的“龙头老大”——链表的地位无可比拟:比如有一道算法题叫“大数相加”,如果不用链表的话,将会是非常繁琐和低效的。见下:大数相加单链表单链表是一种最简单的链式存储结构,可以看做是以“节点的序列”来表示线性表。其中,每个结点包括两个域:存放数据元素信息的域,称为数据域;指针域用来存储直接后即的域。而指针域中存储的信息称为指针。由于这种链表只含有...原创 2019-03-20 18:24:04 · 385 阅读 · 0 评论 -
数据结构与算法:栈的原理及操作实例--进制转换、括号匹配、递归的消除
顺序栈顺序栈的类型描述:利用顺序存储方式实现的栈称为顺序栈。 继承顺序表的特点,仍然用动态分配的一维数组来描述其顺序存储结构。#define STACK_INIT_SIZE 100 //存储空间的初始分配量#define STACKINCREMENT 10 //存储空间分配增量typedef int ElemType; //简化操作,让类型在此定义为int型 typedef...原创 2019-03-26 13:02:43 · 558 阅读 · 0 评论 -
三分钟搞懂一道算法题:杨辉三角的扩展问题
浅谈“杨辉三角”杨辉三角应该是大家很早就接触到的一个数学知识,它不仅是高中数学的难题,更是刚接触“递归”的人必做的一道算法题。它有很多有趣的性质:每个数字等于上一行的左右两个数字之和,即 C(n+1,i) = C(n,i) + C(n,i-1)每行数字左右对称,由 1 开始逐渐变大第 n 行的数字有 n 项第 n 行的第 m 个数和第 n - m + 1 个数相等 ,为组合数性质之一...原创 2019-05-09 13:57:30 · 1388 阅读 · 0 评论 -
巧解“博弈”型算法题:分糖果问题
问题导入【题目:】 给定一个偶数长度的数组,其中不同的数字代表着不同种类的糖果,每一个数字代表一个糖果。你需要把这些糖果平均分给一个弟弟和一个妹妹。返回妹妹可以获得的最大糖果的种类数。示例 1:输入: candies = [1,1,2,2,3,3]输出: 3解析: 一共有三种种类的糖果,每一种都有两个。最优分配方案:妹妹获得[1,2,3],弟弟也获得[1,2,3]。这样使妹妹获得糖果的...原创 2019-05-09 20:27:10 · 2364 阅读 · 0 评论 -
每日一算: 在时间复杂度O(1)下删除单链表中节点
背景今天做到一道题:设一个有序的单链表中有n个节点,现要求插入一个新节点后是的单链表仍保持有序,则该操作的时间为:。答案是:O(n)为什么?因为它是链表!链表的增删改功能,一定依托于其“low的一批”的“ 遍历 ”,这是链表的核心。插入一个数据,就要遍历一遍,有n个节点,时间复杂度就是O(n)。冰火两重天:时空复杂度O()这一部分我自认为没有能力讲解清楚,相比自己,我更想为大家推荐一...原创 2019-05-27 13:22:22 · 3348 阅读 · 0 评论 -
“面试中的算法”之“大整数相加”
题目给出两个很大的整数,如何求出他们的和?解读:题目很简单,但是内涵不太好说,很大,,,我们就直接考虑那种“连long类型都装不下的整数”的情况了。回想一下,我们读小学的时候,老师教我们加法运算,要“ 列竖式 ”:4 3 2 5 4 6 4 9 3 4 1 2 4————————5 2 5 9 5 8 8那么,我们为什么要列竖式呢?——对于这么大的数,显然我们无法一步...原创 2019-06-13 08:32:28 · 481 阅读 · 0 评论 -
算法面试题:如何判断链表有环
题目有一个单向链表,链中可能有“环”,如何用程序判断呢?方法1(最低效)最常想到的是:首先从头结点开始遍历整个链表,每遍历一个,就和之前遍历过的比较,,,这相当于每次遍历了两遍,无疑是扩大了链表“ 遍历 ”带来的劣势,其时间复杂度为O(n^2),由于没有额外的存储空间,故空间复杂度为O(1)。这也太低效了吧。方法2(次之)首先创建一个以节点ID为key的hashSet集合,用来存储曾...原创 2019-06-11 12:39:12 · 583 阅读 · 0 评论 -
深层次算法(面试)题——滑动窗口
科普·前言——什么是滑动窗口算法滑动问题包含一个滑动窗口,它是一个运行在一个大数组上的子列表,该数组是一个底层元素集合。假设有数组 [a b c d e f g h ],一个大小为 3 的 滑动窗口 在其上滑动,则有:[a b c][b c d][c d e][d e f][e f g][f g h]一般情况下就是使用这个窗口在数组的 合法区间 内进行滑动,同时 动态地 记录一些...原创 2019-06-23 09:03:49 · 1107 阅读 · 0 评论 -
几种常用算法思想
today,一起探讨下日常用到的几种算法思想。穷举算法思想这个。。。穷举,穷举,穷举。。。无话可说递推算法思想理性思维模式的代表,注重逐步推导。案例:斐波那契数列(又称:兔子产仔问题)此问题非常著名,在此不再多说代码如下:int Fibonacci(n){ int t1,t2; if(n==1||n==2) { return 1; } else { t1=...原创 2019-02-10 19:56:25 · 1759 阅读 · 1 评论 -
c/c++入门算法经典---蛇形填数
嘻嘻,坚持住,一起学下去。。。蛇形填数要点:不管位置,从数1开始,定义n x n的形状,遇n则转(n即边界)效果图:n=37 8 16 9 25 4 3代码原理:(n可变)#include<stdio.h>#include<string.h>#define maxn 20int a[maxn][maxn];int原创 2019-01-06 21:04:06 · 2573 阅读 · 0 评论 -
几种常用排序算法的比较
几种常用算法的比较与分析话不多说,直接上代码。。。1.选择法算法要求:(例)用选择法对10个整数按降序排序。算法分析:每趟选出一个最值和无序序列的第一个数交换,n个数共选n-1趟。第i趟假设i为最值下标,然后将最值和i+1至最后一个数比较,找出最值的下标,若最值下标不为初设值,则将最值元素和下标为i的元素交换。# include <stdio.h>main(){ in...原创 2019-01-06 21:14:38 · 1497 阅读 · 12 评论 -
菜鸟前路---c/c++小程序
计算器的实现本章运用多文件处理,适合c++类和对象的练习,新手只知其理即可。(本文写于codeblocks,应注明.cpp)哈哈,我加了一些花里胡哨的封面,在main.cpp里,不喜欢的可以去掉!main.cpp#include "Math.h" //*引用其他文件*#include <iostream>#include<math.h&a原创 2019-01-07 09:25:18 · 2232 阅读 · 2 评论 -
每日一算--大数相加
两数之和大家一定或多或少接触过一道题:大数相加,这道题我见过的大多数解法都是用数组,由于数组在空间上的缺陷性,造成了篇幅上的累赘,也让很多人望而却步。话说,没有绝对好的方法,就像没有绝对的第一一样,在这道题中,换用链表貌似是个不错的选择。(我收回数组才是万能的这句话。。。)下面直接上java中的代码,没学的同学可以先看看,想想思路,待以后学到时再拐回来看。思路:给定两个非空链表来表示两个...原创 2019-01-17 20:11:12 · 383 阅读 · 0 评论 -
c/c++小游戏
入门小游戏-提高思维陆续把以前无聊时写的小游戏发出来,供大家娱乐文章亮点主要在于随机数的使用以及算法思维的开拓大家可以自己改进#include<stdio.h>#include<time.h>#include<stdl原创 2019-01-08 14:34:07 · 10999 阅读 · 0 评论 -
算法详解---骑士走棋盘
骑士走棋盘问题与八皇后(同样献给寒假还在肝题的老哥们。。。)感觉这两道题在解释一件事,八皇后可以用dfs(深搜),也可以用广搜,而骑士走棋盘问题给我的感受就是在解释广搜算法的步骤。。。建议看完本篇所讲题目再去看看八皇后,可能会有所受益。骑士走棋盘问题中,骑士的走法为国际象棋的走法,类似中国象棋的马,骑士可以由任意一个位置出发,求如何不重复的走完所有位置。问题解法:骑士的走法,基本上可以...原创 2019-01-21 02:11:20 · 2069 阅读 · 0 评论 -
每日一算---对数组的操作
移动数组中的0今日重新拿起电脑,看到阔别已久的LC,不觉兴奋,拿其283号问题说一说吧。题目到简单:定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。思来想去,觉得这一题可以有至少两种写法,分享一下:这一题要想简单,就要用c++中的标准函数库(STL),其中有一个头文件叫algorithm,神奇!这个头文件下包含着诸如:nums.size(); ...原创 2019-01-25 21:47:04 · 379 阅读 · 0 评论 -
算法概论:鸡尾酒排序---冒泡排序的进化
鸡尾酒排序与冒泡排序冒泡排序,单次排序,从小到大或从大到小,一遍过,代码简洁,但并不效率鸡尾酒排序是冒泡排序的一种,又称为来回排序。它比冒泡排序要高级点,为何这么说呢冒泡排序是先找最大,然后找第二大,然后一直找完鸡尾酒排序是这样的,先找最大,再找最小,然后找第二大,再找第二小,依次类推,直至找不到了为止举例,有数组[6, 4, 5, 1, 8, 7, 2, 3]先从左到右两两比较并排序...原创 2019-02-21 14:39:15 · 439 阅读 · 0 评论