自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Selenium学习遇到的错误(一)

第一次启动浏览器驱动报错Exception in thread "main" java.lang.IllegalStateException: The path to the driver executable must be set by the webdriver.chrome.driver system property; for more information, see https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver. The l

2021-08-16 20:22:12 1006

原创 2021-06-21

401. 二进制手表二进制手表顶部有 4 个 LED 代表 小时(0-11),底部的 6 个 LED 代表 分钟(0-59)。每个 LED 代表一个 0 或 1,最低位在右侧。给你一个整数 turnedOn ,表示当前亮着的 LED 的数量,返回二进制手表可以表示的所有可能时间。你可以 按任意顺序 返回答案。小时不会以零开头:例如,“01:00” 是无效的时间,正确的写法应该是 “1:00” 。分钟必须由两位数组成,可能会以零开头:例如,“10:2” 是无效的时间,正确的写法应该是 “10:02

2021-06-22 15:20:32 188

原创 2021-06-17

877. 石子游戏思路考虑dp[i][j]数组是两者的石子之差,i,j表示不同区间情况下的差值。那么对每个区间,我们可以考虑:对于先手,取第一个数/取最后的数:剩下的后手变成先手,区间缩短求其分差由上可以看出,分差是有正负的,所以我们最后考虑dp[1][n]的正负即可public boolean stoneGame(int[] piles) { int n = piles.length; int[][] dp = new int[n + 2][n + 2];

2021-06-17 21:17:11 192

原创 2021-06-15

852. 山脉数组的峰顶索引思路考察峰值,将mid位置的值和两边的值进行比较,完整代码public int peakIndexInMountainArray(int[] arr) { int n = arr.length; int left = 0; int right = n - 1; if(arr[0] > arr[1]){ return 0; } if(arr[n -

2021-06-15 16:26:05 111

原创 2021-06-07

1103. 分糖果 II思路用一个数组记录。下标和每次分配的糖果数量是有关系的。public int[] distributeCandies(int candies, int num_people) { int[] ans = new int[num_people]; int cnt = 0; while(candies >= 0){ if(candies >= cnt + 1){

2021-06-08 11:59:31 79

原创 2021-06-06

474. 一和零给你一个二进制字符串数组 strs 和两个整数 m 和 n 。请你找出并返回 strs 的最大子集的大小,该子集中 最多 有 m 个 0 和 n 个 1 。如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。思路动态规划。我现在的动态规划思路:目标:本题的目标是找到子集大小,所以dp数组的值就是到当前状态的满足条件的子集最大值变量:本题有三个变量,不同的字符串,不同的0个数,1的个数边界:因为我们认为在拥有0个字符串的包裹中放入0个字符串结果就是0,创建

2021-06-07 21:55:58 131

原创 2021-06-01

523. 连续的子数组和给你一个整数数组 nums 和一个整数 k ,编写一个函数来判断该数组是否含有同时满足下述条件的连续子数组:子数组大小 至少为 2 ,且子数组元素总和为 k 的倍数。如果存在,返回 true ;否则,返回 false 。如果存在一个整数 n ,令整数 x 符合 x = n * k ,则称 x 是 k 的一个倍数。思路前缀和+暴力:超时所以必须优化。这里用到了数论的结论:要使得两数a,b除 k 相减为整数,需要满足a 和 b对 k 取余相同我们可以设a=xk- z,

2021-06-07 09:43:10 115 2

原创 2021-05-31

209. 长度最小的子数组给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。思路看错题目,以为是等于target!变成大于等于就好做多了哇滑动窗口的思想。完整代码public int minSubArrayLen(int target, int[] nums) { int n

2021-05-31 22:31:01 330

原创 2021-05-30

98. 验证二叉搜索树给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。思路还是依旧不会做的二叉树问题。public boolean isValidBST(TreeNode root) { return helper(root, Long.MIN_VALUE, Long.MAX_VALUE); } public

2021-05-31 16:03:38 87

原创 2021-05-28

242. 有效的字母异位词给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词思路一开始看到异位词的时候还在想,这是啥。看了评论区,异位词指的是字母相同,但是字母位置不同的字母。用hashmap就能求解完整代码public boolean isAnagram(String s, String t) { HashMap<Character, Integer> map = new HashMap<>(); int m =

2021-05-31 09:46:25 71

原创 2021-05-27

189. 旋转数组给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。进阶:尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?思路常见就是找到旋转分界,然后复制下后面的数组,移位,再粘贴三次翻转之后也能得到:先翻转整体,再翻转两个局部。public void rotate(int[] nums, int k) { int n = nums.length; k %

2021-05-27 11:47:21 59

原创 2021-05-26

1190. 反转每对括号间的子串给出一个字符串 s(仅含有小写英文字母和括号)。请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。注意,您的结果中 不应 包含任何括号。思路看了题解,用栈和StringBuffer来做1.每次遇到的左括号之前的数都应该放在栈中。2.遇到右括号说明已经获取了一个完整括号(内层括号)中的字符。需要翻转。然后在buffer中放入之前栈顶的左括号之前的字符(说明来到了外层的括号)完整代码public String reverseParen

2021-05-26 22:23:05 127

原创 2021-05-21

1035. 不相交的线在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直线需要同时满足满足:nums1[i] == nums2[j]且绘制的直线不与任何其他连线(非水平线)相交。请注意,连线即使在端点也不能相交:每个数字只能属于一条连线。以这种方法绘制线条,并返回可以绘制的最大连线数。思路这个题和求最长公共子序列是一样的完整代码 public int maxUncrosse

2021-05-21 22:21:02 67

原创 2021-05-20

692. 前K个高频单词给一非空的单词列表,返回前 k 个出现次数最多的单词。返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。思路用hashmap和小根堆来做。public List<String> topKFrequent(String[] words, int k) { Map<String, Integer> map = new HashMap<>(); int n = words.length;

2021-05-20 11:54:00 81

原创 2021-05-18

1442. 形成两个异或相等数组的三元组数目思路本来只想到了前缀和的解法,但是时间复杂度为O(n^3),看了题解,使用hashmap,可以将时间复杂度降到O(n ^ 2)1.要理解,当我们截断出i,k中间的值,并且找到一个j,使得i~j-1,j ~ k的异或值a == b.由此可知a^b == 0.所以在成立的区间i ~ k中,我们随便找到一个位置m,那么前后值一定是相等的,不然不能使得a ^ b == 0.因此我们可以找到k - i个m,也就是j的取值。2.我们将0~k划分为3个部分,0 ~

2021-05-18 22:51:04 68

原创 2021-05-13

1269. 停在原地的方案数有一个长度为 arrLen 的数组,开始有一个指针在索引 0 处。每一步操作中,你可以将指针向左或向右移动 1 步,或者停在原地(指针不能被移动到数组范围外)。给你两个整数 steps 和 arrLen ,请你计算并返回:在恰好执行 steps 次操作以后,指针仍然指向索引 0 处的方案数。由于答案可能会很大,请返回方案数 模 10^9 + 7 后的结果。思路参数选择:有多少个可变的参数,dp数组就是几维的在这里,可变的参数,一个是操作步数,另外一个就是下标,结果

2021-05-13 22:29:09 89

原创 2021-05-12

1310. 子数组异或查询有一个正整数数组 arr,现给你一个对应的查询数组 queries,其中 queries[i] = [Li, Ri]。对于每个查询 i,请你计算从 Li 到 Ri 的 XOR 值(即 arr[Li] xor arr[Li+1] xor … xor arr[Ri])作为本次查询的结果。并返回一个包含给定查询 queries 所有结果的数组。思路使用前缀和,求出前i个元素的异或值,因为相同的元素异或之后为0,与0异或之后的值是原值public int[] xorQuerie

2021-05-12 22:56:39 65

原创 2021-05-11

746. 使用最小花费爬楼梯数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。请你找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。思路完整代码public int minCostClimbingStairs(int[] cost) { int n = cost.length;

2021-05-11 20:27:38 75

原创 2021-05-10

872. 叶子相似的树思路一开始用队列做,发现叶子结点的值并不是按顺序的使用深度优先搜索语法常用的集合类都实现了equals方法,list1.equals(list2);完整代码public boolean leafSimilar(TreeNode root1, TreeNode root2) { List<Integer> list1 = new ArrayList<>(); List<Integer> list2 = n

2021-05-10 20:57:39 72

原创 2021-05-08

1002. 查找常用字符给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 3 次。你可以按任意顺序返回答案思路虽然这是一道简单题,但是代码还是写了40多行用到了两个hashmap,遍历比较完整代码public List<String> commonChars(String[] A) { HashMap<Charac

2021-05-08 22:01:39 96

原创 2021-05-07

1486. 数组异或操作给你两个整数,n 和 start 。数组 nums 定义为:nums[i] = start + 2*i(下标从 0 开始)且 n == nums.length 。请返回 nums 中所有元素按位异或(XOR)后得到的结果思路求出每一位的结果,相异或即可完整代码110. 平衡二叉树给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。思路这个题也是我经典的不会做的题了二

2021-05-07 11:29:10 43

原创 2021-05-06

107. 二叉树的层序遍历 II给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)思路这个题是在层序遍历的基础上进行倒序输出注意List是一个集合,所以需要使用Collections.reverse()来倒序完整代码public List<List<Integer>> levelOrderBottom(TreeNode root) { Deque<TreeNode> que = new

2021-05-06 15:51:28 49

原创 2021-05-06

114. 二叉树展开为链表给你二叉树的根结点 root ,请你将它展开为一个单链表:展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。思路1.先序遍历之后重组,但是需要额外的存储空间2.寻找前驱结点,有点像是链表遍历对于第二种方法:如果左子树不为0,说明左结点一定是先序遍历的下一个,那么也就是next因为是需要将右子树换前驱,前驱就是左子树的最右的结点将右子树嫁

2021-05-06 09:16:41 56

原创 2021-05-05

18. 四数之和给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。思路这个题和三数之和差不多。需要注意剪枝。public List<List<Integer>> fourSum(int[] nums, int target) { //固定两个数,解法和

2021-05-05 21:00:44 57

原创 2021-05-04

34. 在排序数组中查找元素的第一个和最后一个位置给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。思路题目要求用二分法做。难点在于当nums[mid] == target的时候的处理。完整代码public static int[] searchRange(int[] nums, int target) { int n = nums.length;

2021-05-05 15:09:52 43

原创 2021-04-26刷题记录

思路阅读了几遍题解,终于明白。这个题难在想不到用二分去解决。通常我们的二分都是直接使用,这里进行了一个转化。值得思考1.这里的二分是运输能力上的二分法。因此,上限是所有包裹的重量和(一天之内运输完),下限是包裹重量的最大值(一天运输一个包裹)。2.当我们知道运输能力的范围的时候(一个递增序列),那么在这个递增序列上求出一个符合我们要求的值,这个时候问题就转换成了二分法。3.我们在运输能力上进行二分,寻找某个运输能力为x,使得D天可以运输完成。那么当求得天数<D,说明我们选择的运输能力过大,应.

2021-04-27 15:02:39 66

原创 mysql安装出错“mysql: [ERROR] unknown option ‘--鈥斺€斺€斺€斺€斺€斺€斺€斺€斺€斺€斺€斺€斺€斺€”

安装之后需要登录,首次登录不论是使用默认密码还是设置了不用密码,在输入:mysqld -install之后跳出密码输入,输入之后出错。出错为mysqld: Can not perform keyring migration : Invalid --keyring-migration-source option.这是因为mysqld命令是MySQL的主程序,用来安装初始化;mysql是MySQL的命令行工具;这里因为命令敲成了mysqld -u root -p导致的,正确的命令应该是mysql -ur

2021-04-23 10:36:06 20814 11

原创 2021-04-21刷题记录

KMP算法已经很久远了这个算法,今天看了一下又想起来了KMP就是字符串匹配,并且考虑到了模式串的前缀问题。其中求出next数组是很重要的。数组的下标代表了“已匹配前缀的下一个位置”,元素的值则是“最长可匹配前缀子串的下一个位置”。...

2021-04-21 22:58:36 48

原创 2021-04-16刷题记录

783. 二叉搜索树节点最小距离给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。思路因为是二叉搜索数,所以根结点一定是中间值,最小距离是左结点和根节点的差值,或者有结点和根节点的差值。 int ans; TreeNode pre = null; public int minDiffInBST(TreeNode root) { ans = Integer.MAX_VALUE; midSearch(root); return a

2021-04-16 16:22:31 57

原创 2021-04-12

179. 最大数给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。思路来自https://leetcode-cn.com/problems/largest-number/solution/fu-xue-ming-zhu-zhuan-cheng-zi-fu-chuan-mm2s6/”看到要求两个整数 x,y 如何拼接得到结果更大时,就想到先转字符串,然后比较 x+y 和 y+x。这是经验了“完整代

2021-04-12 22:29:51 73

原创 2021-04-09

154. 寻找旋转排序数组中的最小值 II思路这个题是前两天的推广。但是明显更难了。掌握了二分法的精髓,剩下的就是找削减空间的规律了。完整代码public int findMin(int[] nums) { int n = nums.length; int left = 0; int right = n - 1; while(left < right){ int mid = (left + right)

2021-04-09 22:11:58 44

原创 2021-04-08刷题记录37

153. 寻找旋转排序数组中的最小值思路前两天的每日一题都是关于旋转排序数组的,有了之前的经验。这个题自己写的时候还是听费功夫的。主要就是区间的缩短,怎么找到缩短区间的条件。public int findMin(int[] nums) { int n = nums.length; if(n == 1){ return nums[0]; } int left = 0; int right = n

2021-04-09 21:19:21 64

原创 21-04-03刷题记录34

1006. 笨阶乘思路这种找规律的题不难并且像这样的计算,一般都用栈来存储。由于加减是最后计算,所以遇到加减的带上正负号存储,最后遍历求和完整代码public int clumsy(int N) { if(N == 1){ return N; } Deque<Integer> stack = new ArrayDeque<>(); for(int i = N; i >= 1; i-

2021-04-07 22:30:35 44

原创 2021-04-07刷题记录36

66. 加一给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头思路题目比较简单,就是记录一个进位,判断当前位置和进位的和是否需要进位完整代码public int[] plusOne(int[] digits) { int n = digits.length; int carry = 0; if(digits[n -

2021-04-07 22:25:11 131

原创 21-04-06刷题记录35

80. 删除有序数组中的重复项 II给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。思路刚拿到手受到之前的题目的影响。还是想着交换。但是对于这个题,只要求返回符合要求的大小,也就是前半段,后面的相当于丢弃,对这一点清楚就很好做了其次在判断是否重复的时候,只要判断当前元素和前面的第二个是否相等即可完整代码public int remo

2021-04-06 22:46:10 67

原创 21-03-31刷题记录33

90. 子集 II给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。思路一看到子集,立马就能想到回溯因为包含有重复元素,所以去重是一个问题。对于重复元素,该元素的单个集合会导致重复。目前想到的解决办法:用TreeSet去重...

2021-03-31 22:45:06 70

原创 21-03-30刷题记录32

74. 搜索二维矩阵编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。思路由排序可知,使用二分法是最高效的。这里用x表示个数对应的行:x/n;对应的列:x%n;完整代码public boolean searchMatrix(int[][] matrix, int target) { if(matrix.length == 0) { return false;

2021-03-30 20:56:14 93

原创 21/03/29刷题记录31

190. 颠倒二进制位颠倒给定的 32 位无符号整数的二进制位。思路理解位运算:(res << 1) | (n & 1)这里(n&1)==1是判断n的最后一位是1还是0,我们需要把这一位取出来取出来之后拼在res后面。此时res需要左移一位,腾出来给n取出来的最后一位两者或运算:res最末尾必为0,而或运算只有有一个为1,结果就为1.理解 n >>= 1这里含义是n左移一位之后再赋值给n。n = n >> 1语法(n&amp

2021-03-29 22:48:58 85

原创 21/03.26刷题记录30

之前只是看了一遍剑指offer。这次准备在力扣上自己刷一遍,看掌握程度剑指 Offer 05. 替换空格请实现一个函数,把字符串 s 中的每个空格替换成"%20"。思路用辅助StringBuffer即可完整代码public String replaceSpace(String s) { StringBuffer sb = new StringBuffer(); for(char ch : s.toCharArray()){ if(ch ==

2021-03-29 20:46:14 55

原创 21/03/25刷题记录29

82. 删除排序链表中的重复元素 II存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。返回同样按升序排列的结果链表。思路迭代法,基本上只要在纸上能够画出来。找到终止迭代的条件,就好做。有的条件没有考虑到就将样例模拟一遍就知道哪里条件不对了public ListNode deleteDuplicates(ListNode head) { if(head == null){

2021-03-25 23:03:51 42

空空如也

空空如也

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

TA关注的人

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