最大子数组和
最大子数组和
给一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。
输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
1234567891011121314let maxSubArray = function(nums) { let ans = nums[0]; let sum = 0; for(const num of nums) { if(sum > 0) { sum += num; } else { sum = num; } ans = Math.max(ans, sum); } return ans;};
爬楼梯
爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
本题是斐波那契数列,那么用斐波那契数列的公式即可解决问题
12345var climbStairs = function(n) { const sqrt_5 = Math.sqrt(5); const fib_n = Math.pow((1 + sqrt_5) / 2, n + 1) - Math.pow((1 - sqrt_5) / 2,n + 1); return Math.round(fib_n / sqrt_5);};
四数之和
四数之和给一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):
0 <= a, b, c, d < n
a、b、c 和 d 互不相同
nums[a] + nums[b] + nums[c] + nums[d] == target
你可以按 任意顺序 返回答案 。
输入:nums = [1,0,-1,0,-2,2], target = 0
输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]
123456789101112131415161718192021222324var fourSum = function(nums, target) { const len = nums.length; if(len < 4) return []; nums.sort((a, b) => a - b); const r ...
善用缓存,不重复加载相同的资源
善用缓存,不重复加载相同的资源为了避免用户每次访问网站都得请求文件,我们可以通过添加 Expires 或 max-age 来控制这一行为。Expires 设置了一个时间,只要在这个时间之前,浏览器都不会请求文件,而是直接使用缓存。而 max-age 是一个相对时间,建议使用 max-age 代替 Expires 。不过这样会产生一个问题,当文件更新了怎么办?怎么通知浏览器重新请求文件?可以通过更新页面中引用的资源链接地址,让浏览器主动放弃缓存,加载新资源。具体做法是把资源地址 URL 的修改与文件内容关联起来,也就是说,只有文件内容变化,才会导致相应 URL 的变更,从而实现文件级别的精确缓存控制。什么东西与文件内容相关呢?我们会很自然的联想到利用数据摘要要算法对文件求摘要信息,摘要信息与文件内容一一对应,就有了一种可以精确到单个文件粒度的缓存控制依据了。参考资料:
webpack + express 实现文件精确缓存webpack-缓存
性能更好的API
用对选择器id 选择器(#myid)类选择器(.myclassname)标签选择器(div,h1,p)相邻选择器(h1+p)子选择器(ul > li)后代选择器(li a)通配符选择器(*)属性选择器(a[rel=“external”])伪类选择器(a:hover,li:nth-child)
使用 requestAnimationFrame 来替代 setTimeout 和 setInterval希望在每一帧开始的时候对页面进行更改,requestAnimationFrame 就是告诉浏览器——你希望执行一个动画,并且要求浏览器在下次重绘之前调用指定的回调函数更新动画。该方法需要传入一个回调函数作为参数,该回调函数会在浏览器下一次重绘之前执行,使用 setTimeout 或者 setInterval 来触发更新页面的函数,该函数可能在一帧的中间或者结束的时间点上调用,进而导致该帧后面需要进行的事情没有完成,引发丢帧
使用 IntersectionObserver 来实现图片可视区域的懒加载传统的做法中,需要使用 scroll 事件,并调用 getBoundingClientRec ...
汇总区间
汇总区间
给定一个 无重复元素 的 有序 整数数组 nums 。返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。
列表中的每个区间范围 [a,b] 应该按如下格式输出:
“a->b” ,如果 a != b
“a” ,如果 a == b
输入:nums = [0,1,2,4,5,7]
输出:[“0->2”,”4->5”,”7”]
解释:区间范围是:
[0,2] –> “0->2”
[4,5] –> “4->5”
[7,7] –> “7”
12345678910111213141516171819let summaryRanges = function(nums) { const len = nums.length; const ans = []; let i = 0; while (i < len) { let j = i; // 找到从 i 开始连 ...
括号生成
括号生成
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
输入:n = 3
输出:[“((()))”,”(()())”,”(())()”,”()(())”,”()()()”]
12345678910111213141516171819var generateParenthesis = function(n) { const res = []; const dfs = (lRemain, rRemain, str) => { // 左右括号所剩的数量,str是当前构建的字符串 if (str.length == 2 * n) { // 字符串构建完成 res.push(str); // 加入解集 return; // 结束当前递归分支 } if (lRemain > 0) { // 只要左括号有剩,就可以选它,然后继续做选择(递归) dfs(lR ...
有效的字母异位词
有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
输入: s = “anagram”, t = “nagaram”
输出: true
12345678910let isAnagram = function(s, t) { if (s.length !== t.length) return false; let helperArr = new Array(26).fill(0); let pivot = 'a'.charCodeAt(0); for (let i = 0, length = s.length; i < length; i++) { helperArr[s.charCodeAt(i) - pivot]++; helperArr[t.charCodeAt(i) - pivot]--; } return helperArr. ...
后台管理系统
后台管理系统架构示意图 前端 后台 小程序云开发
vue-admin-template <—通过 ajax–> 基于 Koa2;HTTP API 或 tcb-admin-node —->云函数、云数据库、云存储
vue-admin-template 构建管理系统前端vue-element-admin 基于 element 的后台管理系统模板
vue-admin-template 是 vue-element-admin的简化版
使用方法查看官方文档。
Koa2 构建管理系统后端官网: https://koa.bootcss.com/
新建空文件夹 wx-music-admin-backend,打开终端:
123456789# 生成package.json文件,-y 表示默认的配置npm init -y# 安装koanpm install koa# 新建app.js文件 (win10系统命令),作为项目入口文件type nul > app.js
app.js:
123456789101112const Koa = require("koa" ...
《我的》页面
《我的》页面json 文件
12"navigationBarTitleText": "我的", "disableScroll": true // 使页面无法滚动
导航页面链接跳转navigator
背景图片wxss 背景图片不支持本地相对路径的图片,只支持网络图片和 base64 图片
建议使用 base64 图片,图片文件最好不要太大。
每个页面都有的 page 标签123page { background-color: #f1f1f1;}
播放历史与本地存储方案一:播放历史存储在数据库当中,这样在不同设备访问都可查看播放历史。读取速度相对较慢
方案二:播放历史存储在本地,仅当前设备可查看播放历史。读取速度较快
本项目采用本地存储:
使用 openid 作为本地存储的 key,播放历史存入 value
在 app.js 中获取 openid,即打开小程序就获取 openid。
123456789101112131415// app.jsonLaunch: function () { t ...