206. 反转链表

难度 2

题解

var reverseList = function(head) {let pre = null, cur = head, temp = null;while(cur){temp = cur.next;cur.next = pre;pre = cur;cur = temp}return pre;
};

思路

3. 无重复字符的最长子串

难度 2

题解1 set

var lengthOfLongestSubstring = function(s) {let len = s.length;let res = 0;for(let i = 0;i<s.length;i++){let set = new Set(), count = 0;let j = i;while(!set.has(s[j])&&j<s.length){set.add(s[j]);count++;j++;}res = Math.max(res, count);}return res;
};

题解2 滑动窗口

var lengthOfLongestSubstring = function(s) {let set = new Set();let left = 0, right = left, max = 0;while(left<s.length){if(left!=0) set.delete(s[left-1]);while(right<s.length&&!set.has(s[right])){set.add(s[right]);right++;}left++;max = Math.max(max, right-left+1);}return max;
};

思路

滑动窗口比较有意思, 每次把左侧的去除

考虑 advda 3, 和 abb 2

146. LRU缓存机制

难度 2

题解 map

var LRUCache = function(capacity) {this.map = new Map();this.capacity = capacity;
};LRUCache.prototype.get = function(key) {if(this.map.has(key)){let value = this.map.get(key);this.map.delete(key)this.map.set(key, value);return value;}return -1;
};LRUCache.prototype.put = function(key, value) {if(this.map.has(key)){this.map.delete(key)}this.map.set(key,value);if(this.map.size>this.capacity){this.map.delete(this.map.keys().next().value)}
};

思路

215. 数组中的第K个最大元素

难度

题解1 快排


题解2 堆


思路

25. K 个一组翻转链表

难度

题解


思路

15. 三数之和

难度

题解


思路

补充题4. 手撕快速排序

难度 2

题解 快排

var sortArray = function(nums) {if(nums.length<2) return nums;let mid = Math.floor(nums.length * Math.random())const cur = nums[mid];const left = nums.filter((x,i)=> x<=cur && i!==mid);const right = nums.filter(x=> x>cur);return [...sortArray(left), cur, ...sortArray(right)]
};

思路

53. 最大子序和

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

子数组 是数组中的一个连续部分。

难度 1

题解 贪心(或者是动规)

var maxSubArray = function(nums) {let sum = nums[0], max = sum;for(let i = 1;i <nums.length;i++){sum = Math.max(nums[i],nums[i]+sum);max = Math.max(max,sum);}return max;
};

思路

21. 合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

难度 1

题解

var mergeTwoLists = function(list1, list2) {if(!list1) return list2;if(!list2) return list1;const newList = new ListNode(0);let p = newList;while(list1&&list2){if(list1.val<=list2.val){p.next = list1;list1 = list1.next;}else{p.next = list2;list2 = list2.next;}p = p.next;}if(!list1&&list2){p.next =list2;}if(!list2&&list1){p.next =list1;}return newList.next;
};

思路

1. 两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案

难度 1

题解 map

var twoSum = function(nums, target) {let len = nums.length;const map = new Map();for(let i = 0;i<len;i++) {if(map.has(target-nums[i])){return [i,map.get(target-nums[i])]}map.set(nums[i],i);}
};

思路

102. 二叉树的层序遍历

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

难度 2.5

题解 队列

var levelOrder = function(root) {let res = [], queue = [root];while(queue.length&&root){let len = queue.length;let curLevel = [];while(len--){let node = queue.shift();curLevel.push(node.val);node.left&&queue.push(node.left);node.right&&queue.push(node.right);}res.push(curLevel);}return res;
};

思路

有个关键点是要判断 root 是否存在

33. 搜索旋转排序数组

难度

题解


思路

121. 买卖股票的最佳时机

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。

难度 2

题解1 动规

var maxProfit = function(prices) {const len = prices.length;const dp = new Array(len).fill([0,0]);dp[0]= [-prices[0],0]for(let i = 1;i<len;i++){dp[i]= [Math.max(dp[i-1][0],-prices[i]),Math.max(dp[i-1][1],prices[i]+dp[i-1][0])]}return dp[prices.length-1][1];
};

题解2 贪心

var maxProfit = function(prices) {let min = prices[0], res = -min; for(let i = 0;i<prices.length;i++){min = Math.min(min,prices[i]);res = Math.max(res,prices[i]-min);}return res<0?0:res;
};

思路

贪心探寻维持最低数

141. 环形链表

难度 1

题解1 set

var hasCycle = function(head) {const set = new Set();while(head){if(set.has(head)){return true;}else{set.add(head);head = head.next;}}return false;
};

题解2 双指针

var hasCycle = function(head) {if(!head) return false; let l = head, r = head.next;while(r&&r.next){if(l==r) return true;l = l.next;r = r.next.next;}return false;
};

思路

200. 岛屿数量

难度

题解


思路

20. 有效的括号

难度 2

题解 map

var isValid = function(s) {const map = new Map([['(',')'],['{','}'],['[',']']])const arr = [];for(let i = 0;i<s.length;i++){if(map.has(s[i])){arr.push(s[i]);}else if(!map.has(s[i])&&map.get(arr.pop())!=s[i]){return false;}}return arr.length==0?true:false;
};

思路

103. 二叉树的锯齿形层次遍历

难度 2

题解 层序

var zigzagLevelOrder = function(root) {let res = [], path = [root], k = 1;while(path.length&&root){let curLevel = [];let len = path.length;while(len--){let node = path.shift();if(k%2){curLevel.push(node.val);}else{curLevel.unshift(node.val)}node.left && path.push(node.left);node.right && path.push(node.right);}res.push(curLevel);k++;}return res;
};

思路

和层序类似, 但重点在

5. 最长回文子串

难度

题解


思路

236. 二叉树的最近公共祖先

难度

题解


思路

88. 合并两个有序数组

难度 1

题解 api

var merge = function(nums1, m, nums2, n) {nums1.splice(m,n,...nums2)return nums1.sort((a,b)=>a-b);
};

思路

CodeTop 1-20相关推荐

  1. 利用php屏蔽海外ip访问,高效实现

    <?php/*** 屏蔽海外ip访问* 使用ip2long函数得到ip转为整数的值,判断值是否在任一一个区间中* 以下是所有国内ip段* 调用方法:IschinaIp($ALLIPS)* 返回值 ...

  2. 20天拿到美团快手小米搜狐跟谁学offer

    最近看了看外面的机会,特此汇总下,希望对读者有帮助. 战况 贝壳:一轮技术面,自挂东南枝. 脉脉:两轮技术面,自挂东南枝. 跟谁学:三轮技术面 + 一轮 HR 面. 搜狐:三轮技术面 + 一轮 HR ...

  3. python减小内存占用_如何将Python内存占用缩小20倍?

    当程序执行过程中RAM中有大量对象处于活动状态时,可能会出现内存问题,特别是在对可用内存总量有限制的情况下. 下面概述了一些减小对象大小的方法,这些方法可以显著减少纯Python程序所需的RAM数量. ...

  4. ADAS摄像头20个技术挑战

    ADAS摄像头20个技术挑战 车载相机已经成为现代汽车中不可或缺的一部分,不论在辅助驾驶还是在自动驾驶应用领域,越来越多的相机装备在机车上. 根据Tesla现在的配置,全车有9个Camera. 根据W ...

  5. 嵌入式开发在过去20年中是如何演变的

    嵌入式开发在过去20年中是如何演变的 How embedded development has evolved over the past two decades 与任何开发领域一样,嵌入式系统开发就 ...

  6. uwsgi 安装报错 plugins/python/uwsgi_python.h:2:20: fatal error: Python.h: No such file or directory

    1. Python3 安装 uwsgi 报错 直接使用命令 sudo pip3 install uwsgi 安装如下错误: ubuntu@ubuntu:~/Downloads$ sudo pip3 i ...

  7. 20. Valid Parentheses

    判断括号是否匹配 知道要用栈来做,但是过程还是想了一会儿,哎 1 bool isValid(char* s) { 2 int len = 0; 3 while(s[len++] != '\0'); 4 ...

  8. 第20章 使用LNMP架构部署动态网站环境

    章节概述: 本章节将从Linux系统的软件安装方式讲起,带领读者分辨RPM软件包与源码安装的区别.并能够理解它们的优缺点. Nginx是一款相当优秀的用于部署动态网站的服务程序,Nginx具有不错的稳 ...

  9. 如何释放电脑被限制的20%网速?

    很多朋友不管是看电影还是玩游戏,总觉得自己的网速慢,这跟自己所办网络的带宽有一定关系,但我们也要知道,我们的电脑在买来时,默认是限制了20%网速的,如何释放这20%的网速,提高用户体验呢!" ...

  10. Android OpenGL ES(十一)绘制一个20面体 .

    前面介绍了OpenGL ES所有能够绘制的基本图形,点,线段和三角形.其它所有复杂的2D或3D图形都是由这些基本图形构成. 本例介绍如何使用三角形构造一个正20面体.一个正20面体,有12个顶点,20 ...

最新文章

  1. R包dplyr进行数据清洗和整理
  2. 重裝系統,磁盤消失解決方法
  3. Python 用pygame模块播放MP3
  4. 讲点码德!避免这些代码坏味道,努力做一名优秀的程序员
  5. 4-12DataSet Transformations
  6. win11系统通知怎么取消 Windows11取消系统通知的步骤方法
  7. bzoj 1654: [Usaco2006 Jan]The Cow Prom 奶牛舞会(Trajan)
  8. 恢复误删除的域用户及几个查询命令
  9. sql server 流程控制
  10. 搭建MyEclipse和Tomcat遇到的坑(JavaEE作业)
  11. Spring中使用的九种设计模式
  12. 黑马程序员-android视频播放器
  13. 联想电脑尺寸在哪里看_联想笔记本电脑型号查看方式、含义介绍【图文教程】...
  14. 新路由3 新3 NewifiD2 hanwck的老毛子固件
  15. png图片转化为ico图标并保留透明背景方法
  16. [ 英语 ] 语法重塑 之 英语学习的核心框架 —— 英语兔学习笔记(1)
  17. 最新消息:原谷歌中国副院长刘骏任职人民搜索首席科学家
  18. 数字金字塔:输入一个正整数n,输出n行数字金字塔.
  19. 重复率30%可以通过论文查重吗?
  20. ionic3生产打包javascript内存溢出的解决方法

热门文章

  1. 输入身份证号和年份计算年龄
  2. 信号与系统——信号的分解
  3. JS中设计模式的深入理解
  4. HDU 6134 Battlestation Operational (mobius +前缀和)
  5. 微信PC版的缓存文件夹
  6. 相关系数和相关性分析(下):肯德尔相关系数
  7. div标签和span标签区别
  8. 【计算机网络】网络通信协议
  9. 【信号调理】用“晶体三极管”搭建CE放大器的实操经验分享
  10. 晶体和晶振(晶体晶振区别、频率误差、负载电容)