复习算法及数据结构
M_zhangzhimiao
这个作者很懒,什么都没留下…
展开
-
快速排序-js
基本思想:分治法,先在数组中将第一个数设置为key,然后用**两个指针从两边(low,high) **遍历数组,要求low小于high,low指向值大于等于key则暂停,high指向值小于key则暂停,当两个指针都停下时,如果low指向值小于high指向值,则它们指向的数换位,然后继续遍历,否则比较key与high指向的值,当key小于high指向的值并且high大于key所在的下标的值,那么指针...原创 2019-03-19 20:12:02 · 157 阅读 · 0 评论 -
求最长回文字符串
最长回文串算法思路:将字符串变为数组,再将数组长度通过填充undefined变为奇数长(在字符中间以及两头插入字符串),从左往右遍历数组,每个字符都用朴素计算法,即判断与字符距离相同的两个字符是否相同,相同则计数器加一,往两侧遍历,直到数组边界或者两侧的符号不同位置。最后遍历存半径长度的数组,找到半径长度最长的字符的位置以及半径长度,通过计算找到源字符串的最长回文串。var longestPa...原创 2019-03-31 10:44:52 · 125 阅读 · 0 评论 -
寻找两个有序数组的中位数
思路:将两个数组排序,然后判断数组长度,长度为单数,则取二分之一处的数,否则取二分之一处和二分之一减一处的数之和除以2.var findMedianSortedArrays = function(nums1, nums2) { var arr = merge(nums1,nums2); if(arr.length == 1){ return arr[0]; ...原创 2019-03-23 09:42:17 · 159 阅读 · 0 评论 -
二叉树找是否存在路径,此路径上数的和等于给定值
问题描述:给定一棵二叉树以及一个key,要求在二叉树上找一条路径,这条路径必须从根节点出发,并且路径上所有数的和等于key的值解题思路:深度优点遍历二叉树,减治法,题目并不要求返回路径以及必须到达叶节点,所以考虑比较key与每个节点的值,如果该节点的值大于key,那么这个节点往下的路径不存在符合要求的路径;如果该节点值等于key,那么返回true;如果小于key,那么将key赋值为key减去...原创 2019-03-18 21:08:19 · 1369 阅读 · 0 评论 -
插入排序
基本思想:插入排序的思想就是往排好序的数组中插入数字,遍历数组的时候可以认为已经遍历过的部分是有序的,未遍历的部分是待插入的,这样,遍历到的每个元素就是要插入的元素,该元素与其前一个元素比较,符合排序规则则继续判断下一个,否则换位,判断再前一个元素与其是否符合规则,知道找到符合规则的位置,然后插入其原来位置下一个元素,方法跟之前的一样从第一个数开始,前面没有数,那么它就是排好序的,到第二个数的时...原创 2019-03-18 13:41:45 · 119 阅读 · 0 评论 -
归并排序
思想:分治法,将数组不断从中间分开。归并操作的工作原理如下:第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置第三步:比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置重复步骤3直到某一指针超出序列尾将另一序列剩下的所有元素直接复制到合并序列尾为了保证归并的两个数组为排...原创 2019-03-21 07:40:49 · 107 阅读 · 0 评论 -
选择排序
基本思想:遍历数组,每次遍历完可以找到数组剩下范围的最大(或最小)数,将其放到自己对应的位置,n次遍历以后,所有数都找到自己的位置(n指数组长度)function insertSort(arr){ let length = arr.length; for(let i = 0; i < length; i++){ let max = arr[0]; //最大数的值 let in...原创 2019-03-17 09:35:17 · 123 阅读 · 0 评论 -
冒泡排序
改进过的冒泡排序,如果一次遍历之后没有变换位置,则说明该数组已经是排好序的,直接返回,否则,继续遍历数组var arr1 = [1,2,3,4,5,6,7,8]; var arr2 = [5,3,6,8,2,2,6,9,1,0]; function bubbleSort(arr){ let tag = true;//标记判断一次遍历是否有数进行换位 for(let i = 0...原创 2019-03-17 09:05:56 · 113 阅读 · 0 评论 -
字符串转整数
请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被...原创 2019-03-19 21:38:52 · 112 阅读 · 0 评论 -
指定一个数,打印从0到这个数指定位数最大值中间的所有数
题目的具体描述:输入数字n,按顺序打印出从0到最大的n位十进制数。比如输入3,则打印出0、1、2一直到最大的3位数999。题目思路:首先,最后一位是从0到9一直循环,知道前面所有位的数都变成9;其次,各个位从右到左都是从0增加到9。...原创 2019-05-21 09:39:13 · 202 阅读 · 0 评论