数据结构与算法
aleave
这个作者很懒,什么都没留下…
展开
-
HTML实体编码
HTML实体编码首先通过一个例子来说明一下HTML实体编码的重要性// 前端<!DOCTYPE html><html lang="en"><meta charset="utf8" /><head> <title>测试</title> <style></style原创 2021-08-22 15:54:32 · 8456 阅读 · 3 评论 -
两数之和(js版本,双指针法和哈希表法)
双指针法var twoSum = function(numbers, target) { // 双指针法决定l,r,但是不能二分查找,也就是需要一个个遍历。(使用m会错过) var l=0,r=numbers.length-1; // 下标从1开始 while(l<r){ if(l!=r&&numbers[l]+numbers[r]==target) return [++l,++r] if(numbers[l]+nu.原创 2020-07-09 23:18:20 · 2626 阅读 · 0 评论 -
深度优先遍历——岛屿数量(js版本)
给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。输入:11110110101100000000输出: 1输入:11000110000010000011输出: 3解释: 每座岛屿只能由水平和/或竖直方向上相邻的陆地连接而成。var numIslands = function(grid) { var num=0;原创 2020-06-12 21:21:58 · 2798 阅读 · 0 评论 -
力扣leetcode——滑动窗口最大值
给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。关键在于时间复杂度。输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7]解释:滑动窗口的位置 最大值[1 3 -1] -3 5 3 6 7 31 [3 -1 -3] 5 3 6 7原创 2020-06-12 19:24:51 · 357 阅读 · 0 评论 -
leetcode力扣中等难度 每日温度 739题
根据每日 气温 列表,请重新生成一个列表,对应位置的输出是需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。使用数据结构为{val:index_arr},键值为数组原创 2020-06-11 11:56:43 · 275 阅读 · 0 评论 -
leetcode 905题 按奇偶排序数组
给定一个非负整数数组 A,返回一个数组,在该数组中, A 的所有偶数元素之后跟着所有奇数元素。你可以返回满足此条件的任何数组作为答案。输入:[3,1,2,4]输出:[2,4,3,1]输出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也会被接受。数组法,时间复杂度高 var sortArrayByParity = function(A) { var a=[],b=[] A.forEach((item)=>{ if(item%2==原创 2020-06-09 11:34:53 · 2545 阅读 · 0 评论 -
leetcode力扣299——猜数字游戏
你正在和你的朋友玩 猜数字(Bulls and Cows)游戏:你写下一个数字让你的朋友猜。每次他猜测后,你给他一个提示,告诉他有多少位数字和确切位置都猜对了(称为“Bulls”, 公牛),有多少位数字猜对了但是位置不对(称为“Cows”, 奶牛)。你的朋友将会根据提示继续猜,直到猜出秘密数字。请写出一个根据秘密数字和朋友的猜测数返回提示的函数,用 A 表示公牛,用 B 表示奶牛。请注意秘密数字和朋友的猜测数都可能含有重复数字。输入: secret = “1807”, guess = “7810”输原创 2020-06-04 19:17:55 · 199 阅读 · 0 评论 -
LeetCode力扣567题——字符串的排序
给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。换句话说,第一个字符串的排列之一是第二个字符串的子串。输入: s1 = “ab” s2 = “eidbaooo”输出: True解释: s2 包含 s1 的排列之一 (“ba”).输入: s1= “ab” s2 = “eidboaoo”输出: False第一种解法:滑动窗口暴力解法!var checkInclusion = function(s1, s2) { if(s1.length==0||s2.le原创 2020-06-01 11:19:43 · 508 阅读 · 0 评论 -
leetcode力扣415题(js语言)——字符串相加
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。num1 和num2 的长度都小于 5100.num1 和num2 都只包含数字 0-9.num1 和num2 都不包含任何前导零。你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。// 一,暴力解法 var addStrings = function(num1, num2) { // 不能使用BigInteger,那么就遍历吧 var tem=0;原创 2020-05-25 19:05:47 · 402 阅读 · 0 评论 -
前端算法(中等难度)——三数之和
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/3sum思路:先选定第一个数,然后原创 2020-05-15 19:15:01 · 302 阅读 · 0 评论 -
前端算法——数组移动
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。var rotate = function(nums, k) { // 传递的是数组的引用,需要改变引用的数组而不是返回新数组 // 并且需要注意k大于长度的时候依旧需要变换! k=k%nums.length if(nums.length>1){ nums.splice(0...原创 2020-04-21 11:14:28 · 277 阅读 · 0 评论 -
数学——不用额外变量交换两个整数的值
var line=readline().split(' ').map(Number)var a=line[0]var b=line[1]// 使用a保存a和b的差a=b-a;//3-2=1// b=b-两数之差b=b-a;//3-1=2// a=两数之差+原来的aa=a+b;//1+2=3console.log(a,b)...原创 2020-04-17 21:35:45 · 211 阅读 · 0 评论 -
数据结构——两个栈构建一个队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。// 按照题意,那么应该要创建两个数组// 然后push是添加到一个数组的末尾// 然后pop的话,需要借助另一个数组,把之前的队列清空,然后才能弹出末尾元素var inStack = [],outStack = [];function push(node) { // write code her...原创 2020-04-16 19:22:30 · 235 阅读 · 0 评论 -
前端基础笔记——构建乘积数组
给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * ... * A[n-1],B[n-1] = A[0] * A[1] * ... * A[n-2];)* 直接遍历也是可以的,但是时间复杂度为O...原创 2020-04-15 21:07:20 · 161 阅读 · 0 评论 -
前端——二叉树编程题两道
1. 操作给定的二叉树,将其变换为源二叉树的镜像。function Mirror(root){ // write code here if(!root) return null; var left,right; if(root.right){ left=Mirror(root.right); } if(root.left){ ...原创 2020-04-15 18:33:10 · 302 阅读 · 0 评论 -
前端基础笔记——求整数之和(多种方法)
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。function Add(num1, num2){ // 第一种方式,也使用了加号,但是在eval函数内 // return eval(`num1+num2`) // 第二种方式,通过把数字转换为二进制,然后切割成数组,把数组遍历进行计算 // 但是第二种方式遇到负数就抓瞎了。。 ...原创 2020-04-14 23:14:17 · 560 阅读 · 0 评论 -
前端基础笔记——字符串压缩
对字符串进行RLE压缩,将相邻的相同字符,用计数值和字符值来代替。例如:aaabccccccddeee,则可用3a1b6c2d3e来代替。// 由于压缩条件是相邻,所以要遍历一遍var str=readline();var mystr='';var tem=str[0];var num=0for(var i=0;i<str.length;i++){ if(str...原创 2020-04-07 18:03:53 · 723 阅读 · 0 评论 -
前端基础笔记——字符串最小变换次数(使用递归)
给定两个字符串,已知可以使用三种方式进行变换1. 插入一个字符2. 删除一个字符3. 更改一个字符请设计一个算法,找到两个字符串之间的经历几次最小变换,可以字符串1转换成字符串2// 假定变换规则是 1. 串1长度大于串2的时候,删除字符// 2. 串1长度小于串2的时候,添加字符// 3. 串1长度等于串2的时候,替换字符// 如果仅仅是这种思路,那么只能通过50%。。。va...原创 2020-04-07 16:56:29 · 654 阅读 · 0 评论 -
前端基础笔记——短字符串
给定任意一个较短的子串,和另一个较长的字符串,判断短的字符串是否能够由长字符串中的字符构建出来,且长串中的每个字符只能用一次。// 思路很简单,关键在于,不要多次使用indexOf,那么每次都是n的时间复杂度// 所以会通过率很低,解决办法就是使用字典存储来代替长长的字符串,这样就可以不去使用indexOfvar line=readline().split(' ')var small=...原创 2020-04-06 23:25:25 · 228 阅读 · 0 评论 -
前端基础笔记——英文字符串排序(包含非字母)
编写一个程序,将输入字符串中的字符按如下规则排序。规则 1 :英文字母从 A 到 Z 排列,不区分大小写。如,输入: Type 输出: epTy规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。如,输入: BabA 输出: aABb规则 3 :非英文字母的其它字符保持原来的位置。如,输入: By?e 输出: Be?y// 思路,一个数组存储字母(排序后的)// 一个...原创 2020-04-03 13:22:57 · 1133 阅读 · 0 评论 -
前端基础笔记——斐切那波数列(复杂度O(n))
// 如果使用之前那种调用函数的方式是不行的。。一直return func(m-1)+func(m-2),复杂度不止O(n),因为很多计算重复了,例如func(1)会用到两次var num=parseInt(readline())var m=[1,1];for(var i=2;i<=num;i++){ var tem=m[0]+m[1]; m.shift(); ...原创 2020-04-02 20:30:22 · 678 阅读 · 0 评论 -
前端基础笔记——数组变换
给定一个数组arr,请将数组调整为依次相邻的数字,总是先<=、再>=的关系,并交替下去。比如数组中有五个数字,调整成[a,b,c,d,e],使之满足a<=b>=c<=d>=e。61 2 3 4 5 61 3 2 5 4 6// 思路:观察规律就是,如果是有序的数组,那么只要每隔两个数进行交换,那就可以了// 如果数组长度<=2,那么就不改变f...原创 2020-04-01 23:37:45 · 489 阅读 · 0 评论 -
前端基础笔记——子串的最大累加和(时间复杂度为O(n))
给定一个数组arr,返回子数组的最大累加和例如,arr = [1, -2, 3, 5, -2, 6, -1],所有子数组中,[3, 5, -2, 6]可以累加出最大的和12,所以返回12.[要求]时间复杂度为O(n)O(n),空间复杂度为O(1)O(1)// 注意:字符串和为负数时就看下一个索引!var len=parseInt(readline());var arr=readline...原创 2020-04-01 21:15:26 · 360 阅读 · 0 评论 -
前端数学——求阶乘的最低位为1的索引
* 给定一个非负整数N,如果用二进制数表达N!的结果,返回最低位的1在哪个位置上,认为最右的位置为位置0* `首先使用一种笨方法。。通过率低 50%`// 首先使用笨方法求阶乘var num=parseInt(readline());function mynum(num){ if(num==1){ return 1; }else{ retur...原创 2020-04-01 18:58:17 · 239 阅读 · 0 评论 -
前端基础笔记——求连续子数组的最大和(简单递归)
一个非空整数数组,选择其中的两个位置,使得两个位置之间的数和最大。如果最大的和为正数,则输出这个数;如果最大的和为负数或0,则输出0var arr=readline().split(',').map(Number);var len=arr.length;var max=0;// 第一层是窗口大小,第二层是起始索引for(var i=1;i<=len;i++){ for(v...原创 2020-04-01 00:05:10 · 311 阅读 · 0 评论 -
前端基础笔记——中缀表达式转后缀(简易版无括号,校招真题)
将中缀表达式转为后缀表达式,输入 a+b*c/d-a+f/b 输出 abc*d/+a-fb/+要求:语言不限;输入输出均为单个字符串;操作数用单个小写字母表示,操作符只需支持 +-*/,按照四则运算顺序确定优先级,不包含括号* 输入 a+b*c/d-a+f/b* 输出 abc*d/+a-fb/+var arr=readline().split('');// 设置权重对象var obj=...原创 2020-03-31 22:52:01 · 266 阅读 · 0 评论 -
前端基础笔记——判断一年第几天
输入年、月、日,计算该天是本年的第几天。 输入: 包括三个整数年(1<=Y<=3000)、月(1<=M<=12)、日(1<=D<=31)。 输出: 输入可能有多组测试数据,对于每一组测试数据, 输出一个整数,代表Input中的年、月、日对应本年的第几天。2000 5 1 => 122// 闰年的话,二月有29天,否则2月28天// 闰年...原创 2020-03-30 20:31:45 · 258 阅读 · 0 评论 -
前端基础笔记——添加运算符 dfs(额,不知道算不算,反正做出来了)
给出一个数字N,对于数字序列 1,2,3 ... N。现在在其中插入“+”, "-", " ",使得表达式的和为M。" "的含义是把相邻的两个数字组成一个数。例如:1 + 2 3 - 4,含义是:1 + 23 - 4 = 20。给出N和M,求出所有合法的序列的个数。两个整数N,M ( 1 <= N <= 7, -100 <= M <= 100)因为n<=7,所以...原创 2020-03-30 20:14:12 · 270 阅读 · 0 评论 -
前端算法——等差数列(快速排序)
* 如果一个数列S满足对于所有的合法的i,都有S[i + 1] = S[i] + d, 这里的d也可以是负数和零,我们就称数列S为等差数列。* 输入包括两行,第一行包含整数n(2 ≤ n ≤ 50),即数列的长度。* 第二行n个元素x[i](0 ≤ x[i] ≤ 1000),即数列中的每个整数。// 思路:其实很简单,首先进行快速排序,然后如果存在重复的元素则不行// 计算第一个和第二个元...原创 2020-03-28 11:01:00 · 488 阅读 · 0 评论 -
前端基础笔记——去重后依旧字典序
* 给一个全是小写字母的字符串str,删除多余字符,使得每种字符只保留一个,并且让最终结果字符串字典序最小。* 虽然牛客上的通过率很高,但是这不是很简单的题额,需要仔细找出规律* dbcacbca =>dabc* acbc => abc---var line=readline().split('');var flag={index:0,value:line[0]};va...原创 2020-03-28 10:17:53 · 268 阅读 · 0 评论 -
前端算法——修改字符使得字符串变成字典序
* `字典序就是按照字母排序,fedcba这样!有序的!`* 输入包括两行,第一行一个字符串s,字符串s长度length(1 ≤ length ≤ 50),s中每个字符都是小写字母* 第二行一个字符串t,字符串t长度length(1 ≤ length ≤ 50),t中每个字符都是小写字母* 输出一个字符串,即可以得到的字典序最大字符串* fedcba* ee* `输出feeeba`...原创 2020-03-18 19:36:57 · 386 阅读 · 0 评论 -
前端算法——寻找最长重复子串
* 请从字符串中找出至少重复一次的子字符串的最大长度var str=readline();var len=str.length;// 子串长度var mylen=Math.floor(len/2);var tem=mylen;// 临时存储长度var max=0;// 子串长度至少为1,不存在则输出0for(var i=0;i<=tem;i++){ //console...原创 2020-03-18 18:50:46 · 298 阅读 · 0 评论 -
前端算法——回文字符串(通过二)
京京和东东是好朋友。东东很喜欢回文。回文是指从前往后读和从后往前读是一样的词语。京京准备给东东一个惊喜,先取定一个字符串s,然后在后面附上0个或者更多个字母形成回文,京京希望这个回文越短越好。请帮助京京计算他能够得到的最短的回文长度。var arr=readline().split('')while(true){ var len=arr.length;//4 5 var m...原创 2020-03-18 13:36:13 · 291 阅读 · 0 评论 -
前端算法——回文字符串(牛客一直无法通过。。但是我觉得没毛病)
给定一个字符串str,如果可以在str的任意位置添加字符,请返回在添加字符最少的情况下,让str整体都是回文字符串的一种结果。var arr=readline().split('');var len=arr.length;var max=5000;var mystr='';for(var i=len-1;i>=0;i--){ // 注意 字符串为单个字符时 i...原创 2020-03-18 11:42:25 · 157 阅读 · 0 评论 -
前端算法——回文字符串(做对的一次。。)
## 回文字符串* 给出一个长度不超过1000的字符串,判断它是不是回文(顺读,逆读均相同)的。while(true){ var str=readline() if(!str){ break; } str=str.split(''); var len=str.length; var mid=Math.floor(len/2) ...原创 2020-03-18 11:41:14 · 353 阅读 · 0 评论 -
前端算法——回文字符串一(失败的两次尝试)
最大回文子串是被研究得比较多的一个经典问题。最近月神想到了一个变种,对于一个字符串,如果不要求子串连续,那么一个字符串的最大回文子串的最大长度是多少呢。注意:子串虽然不要求连续,但是相对位置不能改变!第一次尝试失败的原因 // var arr='abcbbbbbbbaaaaabakdflsfjdssfhdksafldhsfkdashlfh123213123213akldfjsldfjs...原创 2020-03-18 00:08:31 · 185 阅读 · 0 评论 -
算法数学部分——模数求和
## 模数求和* 现给定n个整数,并定义一个非负整数m,且令f(m) = (m%a1)+(m%a2)+...+(m%an)。* 此处的X % Y的结果为X除以Y的余数。* 现请你找出一个m,求出f(m)的最大值。 //这道题的难点就在于找规律 根据例题可以看到 3 4 6分别对11的模式 2 3 5// 也就是自身-1 ;然后我还试了一下,发现可以找这三个数的公倍数 也就是12 发现1...原创 2020-03-04 00:18:52 · 757 阅读 · 0 评论 -
算法数学部分——能被三整除的数
根据一个数的位数和判断能否被3整除(通过率70%)* 小Q得到一个神奇的数列: 1, 12, 123,...12345678910,1234567891011...。* 并且小Q对于能否被3整除这个性质很感兴趣。* 小Q现在希望你能帮他计算一下从数列的第l个到第r个(包含端点)有多少个数可以被3整除。* 输入例如 2 5;2代表12 ;5代表12345// 暂时不管le9这个复杂度问题。...原创 2020-03-04 00:04:49 · 1121 阅读 · 0 评论 -
算法——替换次数(一)
牛牛和妞妞在一天晚上决定一起去看一场情人节演唱会,可是由于这场演唱会实在太出名了,有很多情侣都来观看,牛牛和妞妞不小心被人流冲散了!维持秩序的人决定,让大家排成一列,相邻两个进去的人(2k-1和2k,k为正整数)坐在相邻座位。但是现在的队伍乱糟糟的,有很多情侣都不在相邻位置。维持秩序的人同意让情侣们跟相邻的人交换位置,直到所有情侣都在2k-1和2k位置上为止。但是维持秩序的人很没有耐心,所以需...原创 2020-03-02 19:15:28 · 5505 阅读 · 0 评论 -
算法——动态规划(二)
`有两个要点:一是记得return;结束函数,不然会栈溢出,二是地鼠可以往回走`* 有一只地鼠不小心跑进了一个m*n的矩形田地里,假设地鼠在这块田地的初始位置为(x,y),* 并且每次只能向相邻的上下左右四个方向移动一步,那么在最多移动K次的情况下,有多少条路径可以逃出这片田地(一旦出去田地的边界就不能再往回走)?* `注意:地鼠可以往回走`// 设置一个回调函数var m=parseI...原创 2020-03-02 14:39:08 · 362 阅读 · 0 评论