
算法练习
Kevin11Yao
这个作者很懒,什么都没留下…
展开
-
JS实现两数之和的3种方法
常规办法:两次遍历 var twoSum = function (nums, target) { let res = [] for (let i = 0; i < nums.length - 1; i++) { for (let j = i + 1; j < nums.length; j++) { if (nums[i] + nums[j] === target) {原创 2021-04-23 11:39:31 · 5137 阅读 · 0 评论 -
八皇后回溯算法原理剖析及其JS实现
八皇后回溯算法(JS实现)八皇后算法描述如下:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法!下面来分析一波,假设此时我们想要在黑色方块位置放置一个皇后:如果一列一列的放置皇后的话,图中黑色位置能放置一个皇后的合法性条件为:1、绿色线条经过的方格没有皇后 (不处于同一斜线)2、红色线条经过的方格没有皇后 (不处于同一行)3、紫色线条经过的方格没有皇后 (不处于同一斜线)也就是说如果以黑色方块位置为参照原点:(0,0原创 2021-03-28 11:56:36 · 489 阅读 · 0 评论 -
剑指 Offer 48. 最长不含重复字符的子字符串(JS实现)
剑指 Offer 48. 最长不含重复字符的子字符串(JS实现)思路:滑动窗口方法遍历所给字符串,用数组str来临时存储最长长度不重复字符串,maxLen来记录最大长度,一旦有与str中元素重复的字符,则将str清空。var lengthOfLongestSubstring = function (s) { //滑动窗口方法 let str = [], maxLen = 0;//str用来存储临时最长长度字符串 for (let原创 2021-03-27 15:32:55 · 184 阅读 · 0 评论 -
剑指 Offer 10- II. 青蛙跳台阶问题(动态规划思想)
剑指 Offer 10- II. 青蛙跳台阶问题(动态规划思想)题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。方法一、动态规划之自顶而下的备忘录法因为涉及到重复子问题的递归计算很耗费时间,所以新建一个数组用于保存计算过的递归式的值,下次再遇到的时候直接查询值而不是递归计算代码如下:var numWays = function (原创 2021-03-25 12:54:31 · 144 阅读 · 0 评论 -
剑指 Offer 09. 用两个栈实现队列
剑指 Offer 09. 用两个栈实现队列思路:利用栈的特点:先进后出;队列的特点,先进先出。一个入队栈A,一个出队栈B,先把元素放入入队栈中;若需要出队,则将入堆栈A中的元素全部重新倒序放入出队栈中,并弹出出队栈B中的栈顶元素;当又需要出队时,则直接将出队栈B的栈顶元素弹出,若 出队栈B 中没有元素,则将入队栈A中的元素重新倒序放入出堆栈中;若出堆栈的元素个数为0,则说明没有元素可以出队列。代码如下: var CQueue = function() { //stackA为入队栈,s原创 2021-03-25 12:49:13 · 106 阅读 · 0 评论 -
剑指 Offer 07. 重建二叉树
剑指 Offer 07. 重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]代码:/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left =原创 2021-03-25 12:40:51 · 115 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表
剑指 Offer 06. 从尾到头打印链表输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } *//** * @param {ListNode} head * @ret原创 2021-03-25 12:38:49 · 149 阅读 · 0 评论 -
剑指 Offer 05. 替换空格
剑指 Offer 05. 替换空格// 请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 /** * @param {string} s * @return {string} */var replaceSpace = function (s) { // 法1:先把字符串转换为数组,再统计其中所有的 let counter = 0; s = s.split(''); let oldLen = s.length; for (let i of s)原创 2021-03-25 10:51:21 · 108 阅读 · 0 评论 -
剑指 Offer 04. 二维数组中的查找
思路:由于这个二维数组的结构是左小右大,上小下大,因此可以从右上角开始比较,若目标值小于此值,说明目标值只会存在于该值的左边;若目标值大于此值,说明目标值只会存在于该值的下边;若遍历行列都没找到,则不存在。代码如下:<script> /** * @param {number[][]} matrix * @param {number} target * @return {boolean} */ .原创 2021-03-25 10:49:37 · 104 阅读 · 0 评论 -
JS实现防抖与节流(使用按钮触发事件)
JS实现防抖与节流(使用按钮触发事件)引言:什么是JS的防抖与节流?手写JS的防抖与节流<body> <button id="debounce">防抖</button> <button id="throttle">节流</button> <script> //防抖 在一定时间内第二次触发某个事件时,他会清空上一个该事件, //若在某固定时间内没有再次触发该事件,此事件函数原创 2021-03-12 08:42:12 · 3654 阅读 · 0 评论 -
JS实现找出数组中重复的数字的三种方法
var root =[1,2,4,6,6,6,2,3]; function getSameNum(Arr){ let result =[]; let arr = Arr.sort(function(a,b){ return a-b; }); let len = Arr.length; for(let i=0;i<len-1;i++){原创 2021-03-03 21:29:45 · 17202 阅读 · 3 评论 -
数组的两种去重方法
数组较好的两种去重方法对于整数,都能较好的去重1.利用对象的属性名的唯一性 // var Arr = [1,2,1,1,1,2,4,3,5,3,5,3]; var Arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN','NaN', 0, 0, 'a', 'a',{},{}]; // 1.利用对象的属性名的唯一性原创 2021-03-03 21:18:22 · 172 阅读 · 1 评论 -
给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
菜鸡自述这是学完数据结构后,时隔一年,再次碰算法题,这让我意识到自己的算法问题是相当的薄弱,以后要多练算法题,记此。题目描述这是力扣(LeetCode)的一道算法题,点击进入。给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。示例 1 :输入: 2736输出: 7236解释: 交换数字2和数字7。示例 2 :输入: 9973输出: 9973解释: 不需要交换。注意:给定数字的范围是 [0, 10*8]解题思路(非最佳)将数字从大到小排列,与原数字原创 2020-09-15 15:10:23 · 2337 阅读 · 0 评论