自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 python 3.8 安装蓝牙pybluez 以及anconda虚拟环境问题解决

python 3.8 安装蓝牙pybluez 以及anconda虚拟环境问题解决

2022-10-17 12:14:09 2243 2

原创 java - 寻找一个值的二分查找、寻找左/侧边界的二分查找总结

上述解释只有找个例子跑一遍才能理解,如果不想理解直接记住框架即可。在二分查找指定值的基础上,无论是寻找最左侧的指定值还是寻找最右侧的指定值,只需要记住下面几个原则:1 寻找左侧就把右侧收紧,即right= mid - 1,同样寻找右侧就要把左侧收紧,即left= mid + 1寻找左侧target时,target太大,导致左侧不断收紧,右侧不变,直到left == nums.length寻找右侧target时,target太小,导致右侧不断收紧,左侧不变,直到right == -1。

2022-09-17 11:50:55 778

原创 正则表达式总结—用python举例

2022-07-13 09:40:28 465

原创 java - 23. 合并K个升序链表 - 优先级队列PriorityQueue

一 思路1 和合并2个升序链表类似,先对比链表头的k个数,这里用优先级队列(二叉树堆)来保存2 每次拿出二叉树堆中的最小值,然后把当前链表的下一个入堆,直到排序完成二 代码class Solution { // 第一种写法:lambda表达式public ListNode mergeKLists(ListNode[] lists) { if (lists.length == 0) return null; PriorityQueue<Li

2022-05-09 15:45:21 690

原创 java - 142. 环形链表 II - 通俗易懂题解

1 思路 1、 首先设置快慢指针,慢指针走一步,快指针走两步 2、 两者如果相遇说明有环,假设慢指针走了k步,则快指针走了2k步。 慢指针从头走到相遇点为k,那么从相遇点再走k步就会再次走到相遇点,也就是慢指针的2k步。 假设环起点距离相遇点为m步,那么慢指针从头走到环起点为k-m步,因为走到环起点再走m就走到了相遇点。 如果慢指针走到相遇点,再走k步将会第二次到达相遇点(因为共2k步,和快指针路径一致)。所以,如果走的不是k,而是k-m也会到达环起点。 3、 2中分析了

2022-05-06 21:30:20 754

原创 链表虚拟头节点的好处

1 使用了虚拟头结点的技巧,也是为了防止出现空指针的情况。比如说链表总共有 5 个节点,题目就让你删除倒数第 5 个节点,也就是第一个节点,那按照算法逻辑,应该首先找到倒数第 6 个节点。但第一个节点前面已经没有节点了,这就会出错。但有了我们虚拟节点dummy的存在,就避免了这个问题,能够对这种情况进行正确的删除。...

2022-05-06 19:12:40 920 1

原创 java四舍五入保留n位小数

double payPercent=123.123456785;BigDecimal bg = new BigDecimal(String.valueOf(payPercent)).setScale(8, RoundingMode.HALF_UP);System.out.println(bg.doubleValue()); // 123.12345679;

2022-04-18 20:29:39 324

原创 java - 11. 盛最多水的容器 - 双指针O(n)

一、题目给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为49。二、思路1 双指..

2022-04-16 14:39:18 168

原创 java - 811. 子域名访问计数 - HashMap

一、题目网站域名 "discuss.leetcode.com" 由多个子域名组成。顶级域名为 "com" ,二级域名为 "leetcode.com" ,最低一级为 "discuss.leetcode.com" 。当访问域名 "discuss.leetcode.com" 时,同时也会隐式访问其父域名 "leetcode.com" 以及 "com" 。计数配对域名 是遵循 "rep d1.d2.d3" 或 "rep d1.d2" 格式的一个域名表示,其中 rep 表示访问域名的次数,d1.d2.d3 为

2022-04-15 10:41:12 334

原创 java - 771. 宝石与石头 - HashMap

一、题目给你一个字符串 jewels 代表石头中宝石的类型,另有一个字符串 stones 代表你拥有的石头。 stones 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。字母区分大小写,因此 "a" 和 "A" 是不同类型的石头。输入:jewels = "aA", stones = "aAAbbbb"输出:3二、思路1 遍历 jewels 数组,把每个字母作为key放入hash表 2 遍历stones 数组,如果在hash表存在,result++

2022-04-14 21:22:16 270

原创 java - 219. 存在重复元素 II - HashMap

一、题目给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false 。输入:nums = [1,2,3,1], k = 3输出:true二、思路1 遍历数组nums,第1次出现的元素,将索引存入HashMap2 大于1次出现的元素,计算和上次索引的绝对值:如果小于等于k返回true;如果大于k,就把...

2022-04-14 20:55:20 543

原创 java中基本数据类型、包装类、String类的相互转换

基本数据类型:int、double、char、boolean等包装类:Integer、Double、Character、Boolean1 基本数据类型和包装类的相互转换—>基本数据类型转包装类:自动装箱(即直接赋值)int a =8;Integer b = a;>包装类转基本数据类型:自动拆箱(即直接赋值)Integer b =10;int a = b;2 基本数据类型和String类的相互转换>基本数据类型转String类:String.v..

2022-04-14 17:29:44 767

原创 java中 == 和 equals() 的区别:个人总结

1、==的使用 ① 基本数据类型:比较的是值。值相等就true:如:char a = ‘A’ a ==65 返回true② 引用数据类型:比较的是地址值。类型不同直接false,类型相同看是否地址相同2 equals()方法的使用① equals()是个方法② 只能引用数据类型调用,所以只能引用数据类型比较③ 如果某个类没有重写equals(),默认还是比较地址值,结果同==...

2022-04-14 11:13:30 394

原创 java - 53. 最大子数组和 - 动态规划

一、题目给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组[4,-1,2,1] 的和最大,为6 。二、思路1 确定状态opt[i]表示以i为结尾的子数组中,最大连续子数组和,opt[0] = 0 ,opt[1] = 12 状态转移方程opt[i] = max...

2022-04-11 11:33:50 707

原创 java中多态的个人理解和总结

举例:Person p1 = new Man(); 继承:在内存中,p1在栈中,是Person类型的,然后在堆中new一个Man对象。该对象加载了从Object一直到Person再到Man的所有属性和方法。这是因为new Man()的时候,会一直调用构造器中的super(),直到Object,这样Man对象中就存在了从自己到Person再到Object的所有属性和方法。多态:当p1执行Man中的方法时,因为p1是Person类型的,因此p1只能执行p1中定义的方法。如果调用...

2022-04-08 20:34:24 337

原创 java - 105. 从前序与中序遍历序列构造二叉树 - 递归

一、题目给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]输出: [3,9,20,null,null,15,7]二、思路* 1 每次从preorder中拿到当前数组首部的数(这里我们用一个栈来实现),作为当前树根。* 2 然后在inorder中找到该数的

2022-04-08 16:27:12 768

原创 java - 106. 从中序与后序遍历序列构造二叉树 - 递归

一、题目给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。输入:inorder = [9,3,15,20,7], postorder = [9,15,7,20,3]输出:[3,9,20,null,null,15,7]二、思路1 每次从postorder中拿到当前数组尾部的数(这里我们用一个栈来实现),作为当前树的根。2 然后在inorder中找到该数的索

2022-04-08 16:03:50 751

原创 java - 108. 将有序数组转换为二叉搜索树

一、题目给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。输入:nums = [-10,-3,0,5,9]输出:[0,-3,9,-10,null,5]解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:二、思路 * 1 每次取数组的中间位置作为root,数组中root索引左边的作为左子树,右边...

2022-04-08 11:15:22 1075

原创 java - 516. 最长回文子序列 - 动态规划四要素

一、题目给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。输入:s = "bbbab"输出:4解释:一个可能的最长回文子序列为 "bbbb" 。输入:s = "cbbd"输出:2解释:一个可能的最长回文子序列为 "bb" 。二、思路(四要素)1 、状态使用 f[i][j] 表示字符串s索引 i 到索引 j 的子串中最长回文串的长度。...

2022-04-07 11:10:49 541

原创 java- 122. 买卖股票的最佳时机 II - 时间O(n)空间O(1)

该题归类为动态规划,但是想到一个更好的实现方法:8行代码做到时间复杂度O(n)空间复杂度O(1)的算法实现:一、题目给定一个数组 prices ,其中 prices[i] 表示股票第 i 天的价格。在每一天,你可能会决定购买和/或出售股票。你在任何时候最多只能持有 一股 股票。你也可以购买它,然后在 同一天 出售。返回 你能获得的 最大 利润。输入: prices = [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 ...

2022-04-06 20:58:23 619

原创 java - 121. 买卖股票的最佳时机

一、题目给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润...

2022-04-06 20:30:30 318

原创 java - 147. 对链表进行插入排序

一、题目给定单个链表的头 head ,使用 插入排序 对链表进行排序,并返回 排序后链表的头 。插入排序 算法的步骤:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据插入完为止。下面是插入排序算法的一个图形示例。部分排序的列表(黑色)最初只包含列表中的第一个元素。每次迭代时,从输入数据中删除一个元素(红色),并就地插入已排序的列表中。对链表进行

2022-04-06 10:21:05 496

原创 java - 1122. 数组的相对排序 - 最优解计数排序

一、题目* 给你两个数组,arr1 和arr2,arr2中的元素各不相同,arr2 中的每个元素都出现在arr1中。* 对 arr1中的元素进行排序,使 arr1 中项的相对顺序和arr2中的相对顺序相同。未在arr2中出现过的元素需要按照升序放在arr1的末尾。* 示例 1:* 输入:arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6]* 输出:[2,2,2,1,4,3,3,9,6,7,19]二、思路由于题目中数的范围[0,

2022-04-01 17:47:15 758

原创 Java - 977. 有序数组的平方 - 进阶O(n)复杂度

一、题目给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。输入:nums = [-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为 [16,1,0,9,100]排序后,数组变为 [0,1,9,16,100]二、思路1先把原数组求平方2将平方后的数组理解为2个有序数组,一个是数组头到最小值的降序,一个是数组最小值到数组尾的升序3原题目变为2个有数素组合并,用low,high2个指...

2022-04-01 16:21:21 72

原创 java - 230. 二叉搜索树中第K小的元素

一、题目给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。输入:root = [3,1,4,null,2], k = 1输出:1二、思路* 1 中序遍历二叉搜索树为有序序列,那么找第k小可以理解为遍历到了第k个元素* 2 我们用初始为1的temp来判断:每访问一个节点,判断是否为k;如果为k,就将该点记录;* 3 这里temp是不断累加的,只有temp==k这一次才会存储该节点的val三、代码..

2022-03-30 16:49:03 1133

原创 java - 94. 二叉树的中序遍历 - 递归实现

class Solution { private List<Integer> result = new ArrayList<>(); public List<Integer> inorderTraversal(TreeNode root) { if (root == null) return this.result; inOrder(root); return this.result; } .

2022-03-30 16:04:35 348

原创 java - 33. 搜索旋转排序数组 - 进阶版O(logn) - 二分查找变体

一、题目* 整数数组 nums 按升序排列,数组中的值互不相同 。* 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转* 使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。* 例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为[4,5,6,7,0,1,2] 。* 给你 旋

2022-03-30 15:25:23 361

原创 java - 101. 对称二叉树 - 递归实现

一、题目给你一个二叉树的根节点 root , 检查它是否轴对称。输入:root = [1,2,2,3,4,4,3]输出:true二、思路1 把对应位置的依次对比,所谓对应位置就是:对称的节点位置,比如上图2的左和3的右,以及2的右和3的左。只有这2个位置都对称,我们会理解为2这棵树和2这颗树对称2 因此,递归的比较对应位置的节点是否完全相同3 递归体中的逻辑就是:* 1 要么2个都是空,说明对应位置都为空* 2 要么1个为空,一定不对称* 3 要么2个都不空,值不相

2022-03-30 12:18:23 149

原创 ​java - 148. 排序链表​ - 思路来源于归并排序

一、题目给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。输入:head = [4,2,1,3]输出:[1,2,3,4]二、思路(参考题解)* 1 首先递归的把链表拆解,直至拆到单个节点* 2 拆解后的一下一步就是归并,归并方法中的操作就是将2个有序子链表合并为一个新的升序链表返回* 3 递归结束就已经完成了拆解+归并三、代码class Solution { public ListNode sortList(ListNode head) {

2022-03-29 17:55:17 582

原创 java - 141. 环形链表

一、题目* 给你一个链表的头节点 head ,判断链表中是否有环。* 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。* 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。【注意】:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。如果链表中存在环 ,则返回 true 。 否则,返回 false 。* 输入:head = [3,2,0,-4], pos = 1* 输出:true

2022-03-26 12:06:08 579

原创 java - 78. 子集

一、题目* 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。* 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。* 输入:nums = [1,2,3]* 输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]二、思路* 1 子集的数目用二进制来理解。如[1,2,3]中,000表示[],100表示[1],111表示[1,2,3]* 也就是说,二进制哪一位有1,对应数组的某个位置有数,

2022-03-25 20:43:39 980

原创 java中的HashMap如何输出key值

HashMap<Integer, Integer> tempMap = new HashMap<>();​​​​​​​tempMap.keySet().iterator().next();1、keySet()—将HashMap转为key的集合2、iterator()为迭代器3、next();迭代的获取集合中的下一个元素

2022-03-25 17:08:14 2486

原创 java - 137. 只出现一次的数字 II - 暴力

一、题目* 给你一个整数数组nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。* 输入:nums = [2,2,3,2]* 输出:3二、思路* 1、数组元素为key,value作为值* 2、当Map的value累积到3次,就将其移除* 3、最后将Map转为Set,使用迭代器将其输出三、代码class Solution { public int singleNumber(int[] nums) {

2022-03-25 17:01:55 1019

原创 java - 231. 2 的幂

一、题目给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。示例 1:输入:n = 1输出:true解释:2^0 = 1提示:-2^31<= n <= 2^31- 1二、思路1 将传入的数n,分别与2的幂次按位与2 最终按位与的结果只有1次不是0就返回true,出现1次以上就返回false3 【注意】:这里int 32位可能会超出..

2022-03-24 17:16:34 371

原创 136.只出现一次的数字 重点思想总结

136.只出现一次的数字给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。输入: [2,2,1]输出: 1260. 只出现一次的数字 III给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。输入:nums = [1,2,1,3,2,5]输出:[3,5]解释:[5, 3] 也是有效的答案。...

2022-03-24 15:51:49 59

原创 java - 173. 二叉搜索树迭代器

一、题目实现一个二叉搜索树迭代器类BSTIterator ,表示一个按中序遍历二叉搜索树(BST)的迭代器:BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象。BST 的根节点 root 会作为构造函数的一部分给出。指针应初始化为一个不存在于 BST 中的数字,且该数字小于 BST 中的任何元素。boolean hasNext() 如果向指针右侧遍历存在数字,则返回 true ;否则返回 false 。int next(...

2022-03-24 10:50:46 113

原创 java - 112. 路径总和

一、题目* 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。* 判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和 targetSum 。* 如果存在,返回 true ;否则,返回 false 。* 叶子节点 是指没有子节点的节点。二、思路:* 1 深度优先搜索,前序访问,valSum保存当前路径总和,用一个ArrayList保存最终结果* 2 因此整体思路就是,访问root先valSum += root.

2022-03-23 17:03:15 940

原创 java - 111. 二叉树的最小深度

一、题目给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明:叶子节点是指没有子节点的节点。二、思路:1 深度优先搜索,前序访问,deep保存当前深度,minDeep保存最终结果2 因此整体思路就是,访问root先deep++。3 然后判断是否为叶子节点,是叶子节点就把当前的minDeep更新。(temp的作用是给minDeep赋初值,第一次是直接赋值,后面的是较小的赋值)4 不是叶子节点,仅当存在左(右)孩子的时候再递归左(右)子树三、代码

2022-03-23 15:34:27 1177

原创 java - 599. 两个列表的最小索引总和

1、题目假设 Andy 和 Doris 想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个,则输出所有答案并且不考虑顺序。 你可以假设答案总是存在。示例 1:输入: list1 = ["Shogun", "Tapioca Express", "Burger King", "KFC"],list2 = ["Piatti", "The Grill at Torrey Pines", "H

2022-03-15 11:40:21 75

原创 java - 394.字符串解码

1、题目给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。* 示例 1:* 输...

2022-03-15 10:15:09 183

空空如也

空空如也

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

TA关注的人

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