这个题自己想的解法:
我觉得我这个实现方法应该性能很好,不知道为啥在leetcode上提交性能在后6%
var numIslands = function (grid) {
let ones = [];
const all = Array(grid.length + 2)
.fill(0)
.map(() => Array(grid[0].length + 2).fill(0));...
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。
给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。
来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/house-robber 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
这题一看就是动态规划,需要做的就是找出规律,有点类似于数学归纳。
简单验算一下
//...
进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。
这题本身不难,O(1)
复杂度要想想。
这题学到一个
摩尔投票法:
核心就是对拼消耗。
玩一个诸侯争霸的游戏,假设你方人口超过总人口一半以上,并且能保证每个人口出去干仗都能一对一同归于尽。最后还有人活下来的国家就是胜利。
那就大混战呗,最差所有人都联合起来对付你(对应你每次选择作为计数器的数都是众数),或者其他国家也会相互攻击(会选择其他数作为计数器的数),但是只要你们不要内斗,最后肯定你赢。
最后能剩下的必定是自己人。
给你一个整数数组nums
,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。测试用例的答案是一个32-位整数。子数组是数组的连续子序列。
这个题还挺有意思的,跟之前的题不太一样。
0
在子数组中,这个子数组一定乘积为0
O(n^2)
的算法这个似乎比较经典。只是实现功能比较简单,还要注意这个规则:
函数
get
和put
必须以O(1)
的平均时间复杂度运行。
关键就是如何用O(1)
时间维护最久未使用的key,JS的数组移动元素不是O(1)
的,应该用链表
思考了一下还得是双向链表。自己实现了一下。
/**
* @param {number} capacity
*/
var LRUCache = function (capacity) {
this.capacity = capacity;
this.kv = new Map();
this.head = {...