12345678910111213141516171819public int binarySearch(int[] nums, int target) { // 二分查找 int left = 0, right = nums.length - 1; int mid = 0; while (left <= right) { mid = left + ((right - left) >> 1); if (nums[mid] == target) { return mid; } // 二分查找的模板 if (nums[mid] < target) { left = mid + 1; } else if (nums[mid] > target) { ...
有效的括号LeetCode 第 20 题 简单题
给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。
示例1
输入:s = “()”输出:true
示例2
输入:s = “()[]{}”输出:true
示例3
输入:s = “(]”输出:false
查看提示
1 <= s.length <= 104s 仅由括号 '()[]{}' 组成
栈解题思路
用 map 去记录对应的括号匹配情况循环字符串栈为空,或 top 元素不为对应的匹配值,将这个括号压入栈top 元素和当前括号匹配上就出栈栈为空就说明括号是闭合的,不为空说明不匹配,有可能是顺序问题,也可能是数量问题
...
1234567891011121314151617class Solution { public ListNode mergeTwoLists(ListNode list1, ListNode list2) { // 边界条件设置 if (list1 == null) { return list2; } else if (list2 == null) { return list1; } else if (list1.val < list2.val) { // list1 的 val 小于 liste2,将 list1 节点的下一个节点指向递归后合并的链表 list1.next = mergeTwoLists(list1.next, list2); return list1; } else { ...
两数之和LeetCode 第 1 题 简单题
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例2
输入:nums = [3,2,4], target = 6输出:[1,2]
示例3
输入:nums = [3,3], target = 6输出:[0,1]
查看提示
2 <= nums.length <= 104-109 <= nums[i] <= 109-109 <= target <= 109只会存在一个有效答案
1234567891011121314151617clas ...
回文数LeetCode 第 9 题 简单题
给一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例1
输入:x = 121输出:true
示例2
输入:x = -121输出:false解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例3
输入:x = 10输出:false解释:从右向左读, 为 01 。因此它不是一个回文数。
查看提示
-231 <= x <= 231 - 1
反转一半数字 反转一半数字解题思路
先考虑处理临界情况所有负数都不可能是回文最低位和最高位不为 0通过 while 循环去反转这个数判断条件就是反转之后的数是否大于当前的数如果大于说明反转完成如果小于就说明还需要去反转,就将反转后的数字 * 10,并将 x 的最 ...
后端开发
未读Java 多线程什么是并发和并行
并发:同一时刻多个指令在单个 CPU 上交替执行
并行:同一时刻多个指令在多个 CPU 上同时执行
线程实现方式Thread 实现通过将类继承 Thread 类,并重写 Run 方法
优点:实现简单,可以直接使用Thread 类中的方法
缺点:可扩展性差,不能继承其他的类
123456789101112131415161718class ExtendThread extends Thread { @Override public void run() { for (int i = 0; i < 20; i++) { System.out.println(getName() + " : " + "ExtendThread-Thread"); } super.run(); }}private static void runExtendThread() { ...
什么是Arthas(阿尔萨斯)Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。
Arthas(阿尔萨斯)的用途
查找类加载jar包,类相关的Exception
反编译线上jar包,查找与本地代码不一致的地方
线上debug
全局视角查看系统的运行状况
监控JVM的实时运行状态
快速定位应用的热点,生成火焰图
直接从JVM内查找某个类的实例
安装Arthas
点击下载Arthas
解压后,在文件夹里有arthas-boot.jar,直接用java -jar的方式启动:1java -jar arthas-boot.jar
打印帮助信息:1java -jar arthas-boot.jar -h
Arthas基础入门启动 math-game 进行测试math-game是一个简单的程序,每隔一秒生成一个随机数,再执行质因数分解,并打印出分解结果。
mat ...
数据开发
未读Spark的宽窄依赖如何划分宽窄依赖如果子RDD的一个分区完全依赖父RDD的一个或多个分区,则是窄依赖,否则就是宽依赖。这个完全依赖怎么理解呢?其实就是父RDD一个分区的数据是否需要切分,或者说子RDD分区要依赖父RDD分区的全部而不仅仅是一部分。上面这样说相对比较严谨,但也会有特殊情况,比如在只有一个分区的情况下,强行使用repartiton操作,即使父子RDD各自只有一个分区,也是宽依赖。这种情况生产中不会遇到,但要知晓。Narrow DependiesVolantis
多数元素 IILeetCode 第 229 题 中等题
给定一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。
示例1
输入:nums = [3,2,3]输出:[3]
示例2
输入:nums = [1]输出:[1]
示例3
输入:nums = [1,2]输出:[1,2]
查看提示
1 <= nums.length <= 5 * 104-109 <= nums[i] <= 109
进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1)的算法解决此问题。
HashMap 法 HashMap法解题思路
遍历整个数组,对记录每个数值出现的次数(利用 HashMap,其中 key 为数值,value 为出现次数)再去遍历这个 HashMap ,如果这个数值出现的次数 > ⌊ n/3 ⌋ 的话,那这个数值就是要寻找的值出现的数值最终要 ...