
简单算法题
简单算法题
小丁冲鸭!
你若盛开,鲜花自来。
展开
-
sort对数组排序问题的顺序问题
前言:由于自己学习不深入,之前以为sort能够直接对数组进行排序,最起码纯数值的应该是可以的,但是后来在实操时发现,结果并不正确,例如:let arr = [4,1,5,3,6,8,1,99,23];// 我的想象中是酱紫的// [ 1, 1, 3, 4, 5, 6, 8, 23, 99 ]// 但是实际上是酱紫的console.log(arr.sort()); // [ 1, 1, 23, 3, 4, 5, 6, 8, 99 ]这就是我自己的一个误区,所以在这总结一下,希望大家.原创 2020-07-24 18:44:55 · 935 阅读 · 0 评论 -
js实现数组转树形数据
题目要求:将如下数组转化成树形结构:const nodes = [ { id: 3, name: '节点C', parentId: 1 }, { id: 6, name: '节点F', parentId: 3 }, { id: 0, name: 'root', parentId: null }, { id: 1, name: '节点A', parentId: 0 }, { id: 8, name: '节点H', parentId: 4 }, { id: 4, name: '原创 2021-05-13 17:42:17 · 8902 阅读 · 4 评论 -
Object.assign()的简单实现
一、Object.assign()介绍1.定义:Object.assign()方法用于将所有可枚举属性的值从一个或多个源对象分配到目标对象。它将返回目标对象。 ——MDN2.语法Object.assign(target, ...sources)target:目标对象sources:源对象,可以任意多个返回值:一定是对象二、原理及实现1.分析特点:(1)第一个参数不能是null或undefined(不太清楚为什么)(2)返回值一定是对象,所以不管...原创 2021-05-12 16:13:26 · 362 阅读 · 0 评论 -
判断回文链表之leetcode234题
法一:转数组后遍历将链表转化成数组后遍历判断,此时遍历只需要遍历数组的前半部分,或者使用双指针法,代码如下:时间复杂度:O(n),空间复杂度O(n)/** * Definition for singly-linked list. * function ListNode(val, next) { * this.val = (val===undefined ? 0 : val) * this.next = (next===undefined ? null : next)..原创 2021-04-19 11:43:43 · 235 阅读 · 0 评论 -
五种常用排序算法总结
常用的排序算法有如下六种:一、冒泡排序1、原理每次从前往后遍历整个数组,每一项与其后一项进行对比,若符合要求(从大到小或从小到大),就交换位置。一遍循环结束后,最大(小)的值就会被排在数组结尾,即每次循环能排好一位,所以要遍历n遍,才能把整个数组排好。2、特点实现简单,效率低,排序是稳定的。3、算法复杂度时间复杂度O(n^2),时间复杂度O(1)4、代码实现function bubbleSort (array) { for (let i = 0; i .原创 2021-04-13 15:42:09 · 4554 阅读 · 0 评论 -
leetcode160题:相交链表
题目描述:法一:双循环暴力法思路:直接嵌套循环,找到相同的节点即返回,效率低复杂度:时间复杂度O(n^2),空间复杂度O(1)代码实现:/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } *//** * @param {ListNode} headA * @param {ListN原创 2021-04-13 12:11:08 · 203 阅读 · 0 评论 -
链表操作中的值传递和地址传递
今天刷题时,遇到一个问题,链表不都是地址传递,当赋值不是节点时,是值传递,验证如下:1、地址传递function ListNode(val) { this.val = val; this.next = null;}let a = new ListNode(1);let b = a; // 引用赋值console.log(a,b);b.next = new ListNode(2);b = b.next; //节点,引用赋值console.log(a,b);原创 2021-02-24 11:58:49 · 1587 阅读 · 0 评论 -
判断链表是否有环的问题总结
一、快慢指针法快慢指针法就是有两个指针:fast与slow,两个指针都从头结点head开始 fast指针每次向前走2步(fast=fast.next.next),slow指针每次向前走1步(slow=slow.next),比较两者的值是否相等 如果两者值相等,则说明有环,否则继续步骤2补充说明:为什么说有环的时候,快慢指针一定能相遇?若有环,由于fast指针比slow指针移动的快,所以fast指针一定先进入环,slow后进入环。当两者都进入环时起,由于fast每次都比slow快1步.原创 2021-02-22 12:50:46 · 284 阅读 · 0 评论 -
滑动窗口算法简单总结
滑动窗口原创 2021-02-20 17:34:10 · 2963 阅读 · 0 评论 -
LeetCode第136题:只出现一次的数字
题目描述:方法一:双层循环时间复杂度:O(n2),空间复杂度:O(1)var singleNumber = function(nums) { for (let i = 0; i < nums.length; i++) { let flag = true; for (let j = i + 1; j < nums.length; j++) { if (nums[i] === nums[j]) {原创 2021-02-04 11:20:05 · 272 阅读 · 0 评论 -
LeetCode第28题:实现 strStr()
题目描述:解法一:indexOf/** * @param {string} haystack * @param {string} needle * @return {number} */var strStr = function(haystack, needle) { return haystack.indexOf(needle)};解法二:substring/** * @param {string} haystack * @param {string}...原创 2021-02-03 10:29:34 · 205 阅读 · 0 评论 -
LeetCode第13题:罗马数字转整数
题目描述:思路: 1、将罗马数据与对应的值放在一个对象里,方便取值; 2、遍历字符串,若左边的值小于右边的值,则减,反之则加 注:遍历循环里的 if 判断,一定要加 i < s.length - 1,因为最后一个字符是不需要判断的,直接加即可。/** * @param {string} s * @return {number} */var romanToInt = function(s) { let romanSignMap = { '...原创 2021-01-21 20:17:01 · 231 阅读 · 0 评论 -
LeetCode第9题:回文数
解法一:字符串反转法var isPalindrome = function(x) { return x === Number(x.toString().split('').reverse().join(''));};解法二:二分对比法var isPalindrome = function(x) { var strX = x.toString(); var xLength = strX.length; for (let i = 0; i < Math..原创 2021-01-19 13:36:30 · 249 阅读 · 0 评论 -
LeetCode第7题:整数反转
题目描述:自己写的算法:/** * @param {number} x * @return {number} */var reverse = function(x) { x += ''; let reverseStr = ''; // 判断符号 if (x.charAt(0) === '-' || x.charAt(0) === '+') { reverseStr += x[0]; x = x.substr(1); .原创 2021-01-18 11:20:43 · 224 阅读 · 0 评论 -
无重复字符的最长子串
题目描述:给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。一、解题思路法二的思路比较简单,维护一个数组arr,对原字符串...原创 2020-02-19 19:53:13 · 613 阅读 · 0 评论 -
HTTP协议
一、简介HTTP协议(超文本传输协议HyperText Transfer Protocol),它是基于TCP协议的应用层传输协议,简单来说就是客户端和服务端进行数据传输的一种规则,客户端与服务器的角色不固定,取决于请求的发起端。HTTP是一种无状态协议,HTTP协议本身对于事务处理没有记忆能力。这样做的目的是为了保持HTTP协议的简单性,从而能够快速处理大量的事务,提高效率。坏处就是,如...原创 2020-02-14 21:10:45 · 748 阅读 · 0 评论 -
查找数组中只出现一次的数(leetcode 136)
题目描述:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。要求:1、算法具有线性时间复杂度O(n)2、不使用额外空间示例 :输入: [4,1,2,1,2]输出: 4方法一:异或(推荐)解题思路:对数组遍历一次,对每个数字相异或,由于异或支持交换律和结合律,相同的数字异或得0,0和任何数异或得任何数,所以...原创 2020-01-15 18:05:58 · 1129 阅读 · 0 评论 -
求二叉树的最大or最小深度
一、求二叉树的最大深度问题描述:给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。示例:给定二叉树[3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回它的最大深度 3.解题思路:通过递归,依次查找左、右子节点的最大深度,并返回给根节点一个最大...原创 2020-01-15 17:04:37 · 706 阅读 · 0 评论 -
记一道简单的面试算法题
前言:面试某互联网公司时,上次就出了一道题,但是其实思路很简单,然后就让我在电脑上写,由于忘记了random的用法,问的面试官,然后写的时候循环判断相等的时候写错了,把判断写在了循环里边,还是面试官检查出来的!!其实仔细想想也不是不会,就是当时可能脑袋不太好用吧。。。。问题:实现一个抽奖算法,在1-100中随机抽取10个数字不重复思路:使用Math.random()即可以...原创 2019-12-13 11:55:17 · 631 阅读 · 0 评论 -
删除排序数组中的重复项 II
一、题目描述:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array-ii...原创 2019-12-11 12:19:28 · 648 阅读 · 0 评论 -
有效括号之javascript
一、判断括号字符串是否有效题目描述:给定一个只包括'(',')'字符串,判断字符串是否有效。示例:1.输入: "()" 输出: true2.输入: "())" 输出:false解题思路:一看到这个题就想到用栈来解决,遍历字符串,遇到‘(’就入栈,遇到')'就判断下边有没有匹配的‘(’,如果有则出栈,否则无效。但是这样的话,时间复杂度和空间复杂度...原创 2019-11-29 22:19:36 · 1505 阅读 · 0 评论 -
LeetCode第一题:两数之和之javascript
题目描述:给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以结果返回 [0, 1]...原创 2019-11-29 09:11:11 · 700 阅读 · 0 评论 -
前端面试题:驼峰命名法和短横线命名法的相互转换(map方法)
一、驼峰命名法 →短横线命名法myApp → my-appfunction getKebabCase(str) { //将字符串分割成字符串数组 var arr = str.split(''); str = arr.map((item) => { //toUpperCase()将item转换成大写,不...原创 2019-09-27 15:26:17 · 1572 阅读 · 0 评论 -
JavaScript中数组去重总结
实现效果方法一:不改变原数组,定义一个新数组来放不重复的数字,采用双层循环的方法,内层循环判断重复值的个数。时间复杂度:O(n*n)空间复杂度:O(n)function unique(arr){ var res = []; for(var i = 0; i < arr.length; i++){ for(var j = i+1; j < ...原创 2019-10-28 16:37:51 · 426 阅读 · 0 评论