god-jiang / god-jiang.github.io Goto Github PK
View Code? Open in Web Editor NEW大学期间以hexo和Github page搭建的个人博客,记录学习路上的点点滴滴(以大学的算法为主)。因为大学资金有限,没有租用服务器,所以没有翻墙的话第一次访问会有点慢,后面就不会了。
Home Page: https://god-jiang.github.io
大学期间以hexo和Github page搭建的个人博客,记录学习路上的点点滴滴(以大学的算法为主)。因为大学资金有限,没有租用服务器,所以没有翻墙的话第一次访问会有点慢,后面就不会了。
Home Page: https://god-jiang.github.io
https://god-jiang.github.io/2019/04/20/%E9%93%BE%E8%A1%A8%E5%8F%8D%E8%BD%AC%E8%A7%A3%E6%B3%95/#more
背景 当初大二学习数据结构的时候,有许多数据结构我都学得有点懵,总感觉没有一个系统的概括和总结,导致我的链表学得一般。后来班上有个同学微信跟我说叫我关注”程序员小灰”这个公众号,说他讲得很生动形象,最后关注了一波,看了他里面一道经典的面试题——链表反转。接下来就来讲解链表反转的解法。
题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判断程序会直接返回空)
概念快速排序是一种原地排序,只需要一个很小的栈作为辅助空间,空间复杂度为O(logN),所以适合在数据集比较大且无序的时候使用。 时间复杂度 时间复杂度比较复杂,最好的情况是O(N),最差的时候是O(N^2),所以平时说的O(N*logN)为其平均时间复杂度。
https://god-jiang.github.io/2019/12/31/hexo%E5%8D%9A%E5%AE%A2%E6%90%AD%E5%BB%BAgittalk/#more
背景 2019年1月份的时候就开始搭建了我的第一个博客hexo,部署到了Github Page上,也陆陆续续更新了一些大学时期学习的数据结构和算法内容,然后加了阅读量和访问量,后面发现没有评论系统的博客有点low的感觉,看了很多的评论系统,这里就不一一列举了,最后使用的是Gittalk评论系统。接下来就来介绍hexo集成Gittalk评论系统的全部过程。
单调栈 博主是因为在刷LeetCode题的时候才知道有单调栈这个数据结构,说起来也是真的巧妙。一开始是在LeetCode739题(每日温度)接触到的,其实单调栈就是从数组中找到左右两边比你大的数或者比你小的数而且时间复杂度为O(N)。以下讲一些单调栈的特性和一些应用题
https://god-jiang.github.io/2019/12/15/%E7%A5%9E%E7%BA%A7%E9%81%8D%E5%8E%86-morris/
morris遍历介绍morris遍历是二叉树遍历算法的超强进阶算法,跟递归、非递归(栈实现)的空间复杂度,morris遍历可以将非递归遍历中的空间复杂度降为O(1)。从而实现时间复杂度为O(N),而空间复杂度为O(1)的精妙算法。 morris遍历利用的是树的叶节点左右孩子为空(树的大量空闲指针),实现空间开销的极限缩减。
LeetCode72编辑距离 给定两个单词word1和word2,计算出将word1转换成word2所使用的最少操作数。你可以对一个单词进行如下三个操作:1,插入一个字符 2,删除一个字符 3,替换一个字符
归并排序的介绍归并排序(英语:Merge sort,或Mergesort),是创建在归并操作上的一种有效的排序算法,效率为O(n log n)。1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。
单例模式(来自菜鸟教程) 单例模式(Singleton Pattern)是Java中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
题目描述 实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
动态规划(百度百科) 动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优化原理(principle of optimality),把多阶段过程转化
https://god-jiang.github.io/tags/
一名热爱编程和算法的在校大学生
堆排序的介绍 堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。
一、Hash(散列函数) Hash一般被翻译成散列、杂凑或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列出相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。(介绍来源于百度百科
背景 由于这两天在家大扫除贴对联准备过年,所以刷题的机会少了许多,我也就放松放松一下,不写题解了,哈哈。由于python语言越来越火热,虽然我是走Java后台开发,但是也被python给吸引住了。所以这几天我学习了一下python的爬虫入门,记录一下我学习python爬虫的经历吧。
题目描述 输入两个链表,找出它们的第一个公共结点。如果有公共结点,则输出它们的第一个公共结点;如果没有公共结点,则输出null即可。
二分查找 二分查找也称折半查找(Binary Search),它是一种效率较高得查找方法。一般都是要求线性表有序,然后二分查找的时间复杂度为O(logN)。
https://god-jiang.github.io/categories/
一名热爱编程和算法的在校大学生
题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。例如:1->2->3->3->4->4->5处理后为1->2->5
https://god-jiang.github.io/categories/index.html
一名热爱编程和算法的在校大学生
https://god-jiang.github.io/2019/03/02/%E5%85%A8%E6%8E%92%E5%88%97%E7%AE%97%E6%B3%95/
全排列算法详细解析全排列在笔试面试和ACM竞赛中很热门,因为它难度适中,既可以考察递归实现,又能进一步考察非递归的实现,便于区分出考生的水平。(自己的心得:回溯是**,深搜是本质,递归是实现)
题目描述 给你一个链表,每k个节点一组进行翻转,请你返回翻转后得链表。 k是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺寻。
前言 最近在家闲着无聊看爱情公寓5,看上瘾了发现两天没刷题了,不好,所以去leetcode看了一下,找到一道比较有意思的题目(寻找两个有序数组的中位数),尝试做了一下,暴力解法还是挺简单的,二分法也比较有意思。所以来试着讲解一下(哈哈哈)
前言 最近一直在家刷面经,因为疫情也出不去。所以没事就会在知乎回答别人提出的问题,还有就是刷题。最近leetcode授权了剑指offer的题,然后就当作我是复习吧。目前还在刷,今晚吃饱刷到这道归并排序的进阶题目——数组中的逆序对,所以写一篇关于它的题解吧。
题目描述 在本题中,单链表可能有环,也可能无环。给定两个单链表的头节点head1和head2,这两个链表可能相交,也可能不相交。请实现一个函数,如果两个链表相交,请返回相交的第一个节点;如果不相交,返回null即可。 要求:如果链表1的长度为N,链表2的长度为M,时间复杂度请达到O(N+M),额外空间复杂度请达到O(1)。
https://god-jiang.github.io/2020/01/01/%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3%E7%AE%97%E6%B3%95/
滑动窗口操作 使用左右指针L、R 当一个数进入窗口时,必须从尾部进入,R向右移动一位 当一个数出窗口时,必须从头部出去,L向右移动一位 L、R只能向右移动,且R>L 算法原题(滑动窗口的最大值)Problem 有一个整型数组arr和一个大小为w的窗口从数组的最左边滑到最右边,窗口每次向右边滑一个位置。例如,数组为[4, 3, 5, 4, 3, 3, 6, 7],窗口大小为3时:[4 3
背景介绍 越来越多的程序员关注数据结构和算法的知识,会在leetcode和牛客等各种网站刷题,但是遇到一些中等难度或者困难难度的题就束手无策,而我通过刷题来写一些关于中等或者困难的题目的题解,达到一个自己越来越熟悉,而且还可以帮助别人理解。接下来我会用两种策略来解决这道题——数据流中的中位数。 数据流中的中位数解法Problem 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中
荷兰国旗问题 给定一个数组arr和一个数num,请把小于num的数放在数组的左边,等于num的数放在数组的中间,大于num的数放在数组的右边。要求额外空间复杂度为O(1),时间复杂度为O(N)
https://god-jiang.github.io/2020/01/06/%E6%A0%88-Stack-%E4%B8%8E%E9%98%9F%E5%88%97-Queue/
定义 栈:后进先出(LIFO-last in first out):最后插入的元素最先出来。队列:先进先出(FIFO-first in first out):最先插入的元素最先出来。
题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找到所有和为S的连续正数序列?Good Luck!
题目描述 给定一个链表,若其中包含环,请找出该链表的环的入口节点,否则,输出null。
https://god-jiang.github.io/2020/01/25/2019-3-1IntelliJ-IDEA%E6%B0%B8%E4%B9%85%E7%A0%B4%E8%A7%A3/
背景 大二刚接触到Java这门课程的时候,都是在eclipse上使用。当时老师讲了IDE的作用什么的,然而当时的我根本就没有听,导致我大三花更多的时间自己自学Java和JavaWeb还有框架等等。然后就是大三自学的时候用的是Myeclipse破解版的,发现这个编译器真的卡,也可能是因为我的笔记本性能一般,所以一直在用eclipse。最后是在大三的期末实训接触到的IDEA编译器,对于我来说打开了另一
https://god-jiang.github.io/2020/03/06/%E8%AE%A1%E6%95%B0%E6%8E%92%E5%BA%8F/
计数排序(百度百科) 计数排序是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。 [1] 当然这是一种牺牲空间换取时间的做法,而且当O(k)>O(n*log(n))的时候其效率反而不如基于比较的排序(基于比较的排序的时间复杂度在理论上的下
https://god-jiang.github.io/2020/01/24/N%E6%95%B0%E4%B9%8B%E5%92%8C%E6%B1%82%E8%A7%A3/#more
背景 刷leetcode上的题发现有一些题型相似的题目可以单独拿出来一起练习,因为相似,所以可以用同一种解法优化一下就可以做,以达到巩固的效果,本文就把介绍两数之和(简单)和三数之和(中等)的解法,类似的四数之和等等都是类似的。
题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印每一个数字,例如,如果输入如下4*4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。
前言 昨天是大年初一,怎么说呢,因为在读大学, 没有出来工作,所以昨晚也是陆陆续续有收到一些红包。然后想起自己对算法感兴趣,以前也看过一些公众号有讲过抢红包算法,今天就更新一遍关于抢红包的算法,对学过数据结构或者对抢红包感兴趣的可以看一看。本文就讲两个抢红包算法。、
堆排序一直不会,你这个版本就看起来很简单,继续加油
https://god-jiang.github.io/2020/01/30/%E6%9C%80%E9%95%BF%E6%9C%89%E6%95%88%E6%8B%AC%E5%8F%B7/#more
前言 最近被新型冠状病毒搞得人心惶惶,大家都不太敢出门,我也不敢出门(哈哈哈),索性就在家里刷了一道leetcode的简单题——有效的括号(leetcode20题),说简单也不简单,说难也不难,刷完之后觉得意犹未尽。然后再刷了一道leetcode的困难题——最长有效括号(leetcode32题)。今天就来讲一下这两道相似题目的题解。
https://god-jiang.github.io/2019/12/20/%E6%9C%89%E8%B6%A3%E7%9A%84%E4%BD%8D%E8%BF%90%E7%AE%97/
位运算概述从现代计算机中所有的数据都以二进制的形式存储在设备中。即0、1两种状态,计算机对二进制进行的运算(+、-、*、/)都叫位运算。示例:
转载自阮一峰大佬的网络日志 前言 进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。接下来有一个很好的类比,可以把它们解释地清晰易懂。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.