自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(115)
  • 收藏
  • 关注

原创 TypeScript + React

// type script definitiontype GreetProps = { name:string messageCount: number isLoggedin:boolean name:{ first:string last:string }}// array propstype PersonList = { name:{ first:string, last:string }[]}// type designatedtype StatusPr

2022-04-20 01:30:37 777

原创 React Tutorial (updating)

组件组件的基本写法class ShoppingCart extends React.component { render(){ return ( <div>Hello</div> ); }}JS子类的构造函数中, 必须调用super方法constructor(props) { super(props); this.state = { value: null; }}state 提升当我们需要同时获取多个子组件数据,或者两个组件需

2022-04-18 12:09:48 727

原创 Github 命令汇总

【代码】Github 命令汇总

2022-04-14 10:03:44 453

原创 42.接雨水 (array)

题目42.接雨水思路暴力每次都只算指针p柱子上的水向左找一个最大柱子,向右找一个最大的柱子,然后找出这俩柱子里最小的,算出和p柱子的差值(如果负数,说明p柱子很高,所以没有雨水)代码(暴力)class Solution { public int trap(int[] height) { int sum = 0; for (int i = 1; i < height.length; i++){ int leftHe

2022-03-16 07:51:29 455 2

原创 191. 位1的个数(位运算)

题目思路代码1检查了所有的位,如果是1就加在ans里代码public class Solution { // you need to treat n as an unsigned value public int hammingWeight(int n) { int ans = 0; for (int i = 0; i < 32; i++) { ans += (n >> i) & 1;

2022-03-01 03:09:34 256

原创 190. 颠倒二进制位(位运算)

题目190. 颠倒二进制位思路因为是32位的系统,所以就取出二进制的最后一位数字,然后把他通过左移移到开头就行。1 & 二进制数字: 取出最后一位注意:位运算,左移右移的优先级比或和非要高。代码public class Solution { // you need treat n as an unsigned value public int reverseBits(int n) { int a = 0; for (int i = 0;

2022-03-01 02:21:09 74

原创 504. 七进制数(位运算)

位运算

2022-01-24 09:31:52 169

原创 136. 只出现一次的数字 (位运算)

题目136. 只出现一次的数字思路异或运算的话,自己和自己永远都是0,自己和0永远都是自己,然后满足交换律和结合律代码/** * @param {number[]} nums * @return {number} */var singleNumber = function(nums) { let sum = 0; for (num of nums){ sum ^= num; } return sum;};...

2022-01-24 09:20:38 143

原创 98. 验证二叉搜索树

题目98. 验证二叉搜索树思路借用中序遍历,把节点数值放进一个数组里,然后比较这个数组是否单调递增代码/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left) * this.right =

2021-11-29 16:15:10 191

原创 235. 二叉搜索树的最近公共祖先

题目235. 二叉搜索树的最近公共祖先思路分别找到两个节点,记录在找到两个节点的过程中经过的路径。比较路径,找到最后一个相同的节点。代码/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } *//** * @param {TreeNode} root * @param {T

2021-11-24 17:41:33 231

原创 142. 环形链表 II(双指针/快慢指针)

题目142. 环形链表 II思路用一个每次走两步的快指针和一个每次走一步的慢指针如果fast会是null,那就说明链表没有环如果是有环的话,1. 先让fast和slow相遇,2. 然后slow保持在相遇的位置,fast回到head。他们再次相遇的时候就是起始节点。原理如下:当fast和slow相遇的时候,fast走的是slow的两倍当fast和slow相遇时,fast多走的k步一定是在环里绕圈。从环起点到相遇点距离为m,那么从slow走的距离来分析,从head到环起点是k - m那么

2021-11-19 00:01:05 323

原创 24. 两两交换链表中的节点

题目24. 两两交换链表中的节点注意首先链表相连的时候不能出现环一个节点的next可以是null,但是想要增加头节点的话必须用new ListNode。代码/** * Definition for singly-linked list. * function ListNode(val, next) { * this.val = (val===undefined ? 0 : val) * this.next = (next===undefined ? null : ne

2021-11-14 19:35:00 251

原创 343. 整数拆分(动态规划)

题目343. 整数拆分思路普通的动态规划,除了base case和递推公式要注意一下之外,还三个点需要注意。dp数组的初始化dp必须先都置0,这是为了在max比较的时候有数,否则当一个dp[i]都没有的时候,max会出0。循环必须明确dp[i]的含义是,对于数字i,拆分至少两个数后最大的乘积,所以对于它拆分出来的数字j, j 必须小于 imax包含的元素首先,对于dp[i]来说,每一个j的更换,都可能带来新的值,所以dp[i]的新值,必须和已有的dp[i]进行比较。其次,对于每一个拆分

2021-09-15 10:23:29 111

原创 62. 不同路径(动态规划)

题目62. 不同路径思路动态规划,这道题需要注意的点是,不仅仅是[0][1]和[1][0]是初始状态,实际上两道边框全部都是初始状态。另外注意:初始化二维dp数组的时候一定要加fill(),不加这个的话就不能初始化出来一个二维的数组。代码/** * @param {number} m * @param {number} n * @return {number} */var uniquePaths = function(m, n) { //只可能从上或者从左来 //状态转

2021-09-14 17:35:38 52

原创 45. 跳跃游戏 II

题目45. 跳跃游戏 II思路从0起跳,但是只要最远能跳的位置不到最后一个,那就肯定需要跳一步。在这个过程中,记录这个区间段能跳的最远距离nextDistance为什么不需要分段重新计算nextDistance?因为跳到某个位置后(也就是跳到上一次的nextDistance,之后的nextDistance一定会比现在这个位置能到达的位置远,比如你跳到了第四个位置,上次的nextDistance是4,之后的nextDistance一定比4大,因为你已经跳到4并且这个数组一定能到达最后)在某个区间遍

2021-09-12 21:34:39 153

原创 738. 单调递增的数字(贪心)

题目738. 单调递增的数字思路假如后一个数字比前一个小,那前一个就得减一,然后后一个就得变成9,比如76,得变成69从后往前遍历(不然需要不断的重新更新),比如321,比较n[0]和n[1]后变成了291,比较n[1], n[2]然后219,2又比1大注意类似于100这样的例子,如果只靠上述的逻辑处理完是90,因为0 === 0所以第二个零没有变,这时需要一个记录最早的9位置的tag代码/** * @param {number} n * @return {number} */va

2021-09-10 23:57:25 66

原创 134. 加油站(贪心)

题目134. 加油站思路统计每过一个加油站的剩余油量gas[i] - cost[i]注意,如果出现[3, -3]这种正好剩余油量是0的,是可以跑到下一个加油站的。因为我们算剩余油量的时候已经减掉了从这个加油站跑出去的消耗。所以过程中curSum = 0不要紧;totalSum也可以等于0,但是不能小于0;从i = 0开始遍历,这个意思就是尝试每一个位置作为start,当curSum < 0的时候,就说明目前的start不行,要从现在的j + 1开始重新算startj + 1后面万一负数

2021-09-10 22:05:48 60

原创 860. 柠檬水找零(贪心)

题目860. 柠檬水找零思路这道题没有任何巧妙的方法代码/** * @param {number[]} bills * @return {boolean} */var lemonadeChange = function(bills) { //只有三种钞票,20的不能找零给别人 let num = new Array(2).fill(0); for(let i = 0; i < bills.length; i++){ if(bills[i] =

2021-09-09 21:31:13 53

原创 376. 摆动序列(贪心)

题目376. 摆动序列思路首先单独处理前两个元素,因为如果它们相等的话只能算一个,不相等的话算是两个,这是计数的基础处理后续元素,这里因为有了preDiff = 0的情况,所以不能单纯的用preDiff * curDiff <=0 来判断,因为后续我们一旦找到curDiff = 0的时候,是不能计数的,但是用了乘法,就会多计数进去;如果进入循环的条件不包含preDiff = 0, 那么前两个元素相同的数组答案会全部为1。除了第一段差,不可能再有preDiff = 0的情况,因为条件里控制

2021-09-08 20:50:24 94

原创 167. 两数之和 II - 输入有序数组(双指针)

题目167. 两数之和 II - 输入有序数组思路想象一个n维度的矩阵。这道题目的思路是从右上角开始搜索。因为在这个位置,只有"一条路",比如,现在的sum大了,那就只能让j移动,因为i移动只会让总体sum变大。类似思路的题目240. 搜索二维矩阵 II代码/** * @param {number[]} numbers * @param {number} target * @return {number[]} */var twoSum = function(numbers, targ

2021-09-07 23:28:10 108

原创 283. 移动零(双指针)

题目283. 移动零代码j是每一步都会走的,但是i只有复制到非零的时候才会移动i只有复制到非零的时候才会移动,j会按顺序查找到所有非零的数并且把它们换过来。/** * @param {number[]} nums * @return {void} Do not return anything, modify nums in-place instead. */var moveZeroes = function(nums) { //两个指针,一个指示数,另一个找非零 for(l

2021-09-07 15:37:21 59

原创 46. 全排列(回溯)

题目46. 全排列思路使用一个数组记录已经使用过的数代码/** * @param {number[]} nums * @return {number[][]} */var permute = function(nums) { let ans = [], tmp = [], status = new Array(nums.length).fill(true); function back(tmp, status){ if(tmp.length === nums

2021-09-07 14:53:39 54

原创 189. 旋转数组

题目189. 旋转数组思路翻转数组若往后移动k个位置,那么倒数的k个元素会变成最前面的元素。所以先把数组整体翻转(倒数k个提前),再分别翻转两个部分(把顺序翻正)。/** * @param {number[]} nums * @param {number} k * @return {void} Do not return anything, modify nums in-place instead. */var rotate = function(nums, k) { //翻

2021-09-06 17:48:53 42

原创 977. 有序数组的平方(双指针)

标题977. 有序数组的平方思路类似于归并排序的“并”的步骤,注意最后一个left的值要单独拿出来填充(因为left = right就停止了,此时对应的值还没有进入ans)代码/** * @param {number[]} nums * @return {number[]} */var sortedSquares = function(nums) { let ans = new Array(nums.length); //大数在两边 let left =0 , ri

2021-09-06 13:42:52 97

原创 240. 搜索二维矩阵 II

题目240. 搜索二维矩阵 II思路1. 题目对比注意与74. 搜索二维矩阵对比。74题可以用二分,是因为target只可能在 第一个比target小的row[0]那行。因为那道题可以保证,在我们找到的分界点之后所有的数都比分界点大,而在分界点前所有的数都比分界点小。但是214只能保证在这行,所有的数比分解点大,前面的、后面的都无法比较。2. 本题思路从左下或者右上开始搜索,因为这两个位置,上下走、左右走的大小变化是固定的。(左上是怎么走都变大,右下是怎么走都变小)代码/** * @pa

2021-09-06 11:39:46 63

原创 912. 排序数组

题目912. 排序数组代码采用的是归并排序,这个比较稳定,比快速排序的效果好/** * @param {number[]} nums * @return {number[]} */var sortArray = function(nums) { function mergeSort(arr){ //base case if(arr.length <= 1) return arr; let mid = Math.floor(arr.

2021-09-05 23:49:01 40

原创 645. 错误的集合

题目645. 错误的集合思路注意这里有一个坑,排序之后,重复的元素肯定是挨在一起的,但是缺失的元素【不一定位于两个重复元素的两边】比如【2,3,3,4,5,6】代码呜呜呜以下是一个笨蛋算法/** * @param {number[]} nums * @return {number[]} */var findErrorNums = function(nums) { let ans = []; let set = new Set(); for(element of

2021-09-05 20:22:15 42

原创 剑指 Offer 10- I. 斐波那契数列(递归,动态规划)

题目剑指 Offer 10- I. 斐波那契数列思路递归,但是普通的递归会超时,所以拿一个数组存储一下算出来的结果同时注意取余,取余的时候,f(n - 1) % num + f(n - 2) % num和(f(n - 1) + f (n - 2)) % num是不一样的!代码/** * @param {number} n * @return {number} */var fib = function(n) { let num = new Array(n + 1).fill(0)

2021-09-04 23:10:20 103

原创 215. 数组中的第K个最大元素(快速排序)

题目215. 数组中的第K个最大元素思路使用快速排序的方法写代码/** * @param {number[]} nums * @param {number} k * @return {number} */var findKthLargest = function(nums, k) { //快速排序 //进行交换 function quickSort(arr, left, right){ if(left >= right) return;

2021-09-04 20:23:02 74

原创 面试题 10.01. 合并排序的数组

题目面试题 10.01. 合并排序的数组思路逆向双指针,从尾部开始填充数组代码逆向双指针:注意这里其实是有四个不同的状态的状态1: A的指针到了-1 , 也就是说A已经遍历完了状态2: B的指针到了-1,也就是说B已经遍历完了状态3: A、B都没有遍历完,A >= B状态4: A、B都没有遍历完,A < B/** * @param {number[]} A * @param {number} m * @param {number[]} B * @param {numb

2021-09-02 23:15:14 57

原创 剑指 Offer 58 - II. 左旋转字符串(取余)

题目剑指 Offer 58 - II. 左旋转字符串思路这道题可以直接切割字符串,这里的答案采用了另一种写法,是通过取余来调整字符串顺序的代码/** * @param {string} s * @param {number} n * @return {string} */var reverseLeftWords = function(s, n) { let ans = []; for(let i = n; i < n + s.length; i++){

2021-08-24 18:24:37 49

原创 JavaScrip语法(更新中)

函数在array前插入元素 --- unshif t( )//array首部插入值//unshift同时传入多个参数的话,会按照传参数的顺序直接插入//所以这和一个参数一个参数传的不一样!let arr = [4, 5, 6];arr.unshift(1, 2, 3);//[1,2,3,4,5,6]结合两个数组array.concat( ); const array1 = ['a', 'b', 'c']; const array2 = array1.concat(3, [5,7

2021-08-24 11:50:28 69

原创 剑指 Offer 05. 替换空格(字符串)

题目剑指 Offer 05. 替换空格代码(极简版)/** * @param {string} s * @return {string} */var replaceSpace = function(s) { return s.split(" ").join("%20");};代码(普通版)/** * @param {string} s * @return {string} */var replaceSpace = function(s) { let ans =

2021-08-23 23:43:32 48

原创 541. 反转字符串 II

题目541. 反转字符串 II思路第一个tip,在涉及到有关字符串的操作的时候,可以把字符串先换成数组,因为js的字符串是一个不可以修改的对象整体的思路是,用2k的长度卡出每一个左端点,但是右端点不看2k,而是看k。假如k还在字符串的长度范围里,那从左端点到k全部反转;如果k超出了字符串的长度范围,那么从左端点到字符串末端全部反转代码/** * @param {string} s * @param {number} k * @return {string} */var revers

2021-08-23 23:07:23 51

原创 93. 复原 IP 地址(回溯)

题目93. 复原 IP 地址思路回溯法,注意传入cnt参数的时候放对加号的位置可参考131. 分割回文串 (回溯)代码这是一段用时十分离谱的代码,建议/** * @param {string} s * @return {string[]} */var restoreIpAddresses = function(s) { let ans = []; let cur = []; back(0,0); return ans; //回溯算法

2021-08-23 19:50:25 78

原创 131. 分割回文串 (回溯)

题目131. 分割回文串思路回溯算法,思路参考这个切割图代码/** * @param {string} s * @return {string[][]} */var partition = function(s) { let ans = []; let cur = []; back(s,0); return ans; //回溯算法 function back(s, start){ if(start >= s.lengt

2021-08-23 17:26:33 98

原创 剑指 Offer 06. 从尾到头打印链表

题目剑指 Offer 06. 从尾到头打印链表思路代码/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } *//** * @param {ListNode} head * @return {number[]} */var reversePrint = function(head) { le

2021-08-23 00:58:17 57

原创 剑指 Offer 18. 删除链表的节点

题目剑指 Offer 18. 删除链表的节点思路链表基础操作,注意删除head的时候,要特殊化处理代码/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } *//** * @param {ListNode} head * @param {number} val * @return {ListNode

2021-08-22 23:39:30 44

原创 剑指 Offer 22. 链表中倒数第k个节点

题目剑指 Offer 22. 链表中倒数第k个节点代码快慢指针这个就是让快指针提前走k部,这样快慢指针之间的距离就是k,等到快指针走到null的时候,慢指针刚好停留在第k个位置/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } *//** * @param {ListNode} head * @pa

2021-08-22 21:03:07 41

原创 剑指 Offer 24. 反转链表

题目剑指 Offer 24. 反转链表思路见代码内代码1,迭代/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } *//** * @param {ListNode} head * @return {ListNode} */var reverseList = function(head) {

2021-08-22 17:55:47 48

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除