算法
丢丢的大神
心中有沟壑,下笔如有神,天道酬勤。
展开
-
单链表反转两种方法
最近同学介绍了一个lettcode(力扣)OJ给我,个人认为这个网站比母校的oj,杭电oj界面友好很多,题库充足,且支持多种主流语言,很适合闲时刷刷提高算法能力,算法的练习如同内功的修炼,碰到算法问题,经常有一种无力感,只能慢慢总结了。 链表是一种重要的数据结构,因为有递归性质,所以总是难以理解,涉及链表的复杂操作总是感觉一头雾水,看别人的实现代码总是似懂非懂,看完就忘,实际上就是没有理解透彻,特意花了一天时间重新学习了单链表的常见操作-单链表反转,理解和总结两种...转载 2021-08-31 09:20:39 · 6848 阅读 · 2 评论 -
判断字符串是否为回文
描述给定一个字符串,请编写一个函数判断该字符串是否回文。如果回文请返回true,否则返回false。解法一这是一个偷懒的解法function judge( str ) { return str == str.split('').reverse().join('');}解法二利用数组下标function judge( str ) { // write code here var len = str.length; var headIndex原创 2021-08-29 23:01:12 · 848 阅读 · 0 评论 -
EventEmitter 简单实现
class EventEmitter { constructor(){ this.events = new Map(); } on(key, fn){ if (this.events.has(key)) { this.events.get(key).push(fn) }else { this.events.set(key, [fn]) } } emit(key, ...args) { if (this.event原创 2021-08-19 09:17:06 · 132 阅读 · 0 评论 -
二分之快排
// 二分排序算法var quickSort = function(nums) { if (nums.length <= 1) { return nums; } var divideIndex = Math.floor(nums.length / 2); var divide = nums.splice(divide, 1)[0] var left = [], right = []; for(var i=0; i<nums.原创 2021-08-17 09:33:14 · 74 阅读 · 0 评论 -
回溯算法之全排列
// 回溯算法var permute = function(nums) { var track = []; trackBack(nums, track) }var result = []function trackBack(nums, track) { // 递归跳出条件 if (track.length === nums.length) { result.push([...track]) return; } for(var i=0; i<原创 2021-08-16 13:34:12 · 252 阅读 · 0 评论 -
二叉树相关的算法题思想
二叉树是面试经常会考到的一个知识点,关于二叉树延伸的应用也很广泛。二叉树的核心是递归,但我们在遇到二叉树相关的问题时,如果纠结于递归这个点,很可能陷进去,毕竟人的大脑装不下那么多调用栈。因此,解决二叉树相关的问题核心点是将重点放在一个根节点上,下面是一些二叉树相关问题解题总结:写出结束条件不要把树复杂化,就当做树是三个节点,根节点,左子节点,右子节点只考虑当前做什么,不用考虑下次应该做什么每次调用应该返回什么下面是一些具体的列子,未完待续。。。...原创 2021-08-11 09:41:43 · 196 阅读 · 0 评论 -
Javascript 深拷贝
Javascript 深拷贝是一个面试经常遇到的问题。深拷贝主要考察两点:1、JavaScript的数据类型2、递归算法话不多说,我们直接看代码// js 内置的特殊对象类型const specialTypes = { '[object Date]': val => new Date(val), '[object Function]': val => val, '[object RegExp]': val => new RegExp(val)}functio原创 2021-08-04 23:17:29 · 111 阅读 · 0 评论 -
JavaScript 实现全排序
全排序作为一个经典的问题,经常在面试中遇到过,下面记录一下,并且详细介绍下这种题的求解思路问题:给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。示例 1:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2:输入:nums = [0,1]输出:[[0,1],[1,0]]示例 3:输入:nums = [1]输出:[[1]]实现过程输原创 2021-07-26 15:05:23 · 234 阅读 · 0 评论 -
排序详解之 —— 冒泡排序
以前觉得排序很难,后来发现是没有系统的学习过排序的定义,没有理解排序究竟要做什么,排序的核心在于 比较 和 交换位置。我们先看一下排序的一般范式:// 我们定义个排序的模板类class SortTemplate { // lessThan 用来比较两个数据的大小 lessThan(arr, i, j) { return arr[i] < arr[j]; } // exch 用来交换比较之后的元素位置 exch(arr, i, j) { cons原创 2021-07-19 18:50:03 · 60 阅读 · 0 评论 -
经典算法 - 求两个大数之和
之间在某次面试过程中遇到的,现在做一下记录// 两个大树相加function towBigSum(str1, str1) { // 求两个字符串最大的长度 const maxLen = Math.max(str1.length, str2.length); // 在字符串头部用0补齐到最大长度 num1_str = str1.padStart(maxLen, '0'); num2_str = str1.padStart(maxLen, '0'); // 存储进位值的哈希原创 2021-07-19 09:34:30 · 338 阅读 · 0 评论