自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(93)
  • 问答 (1)
  • 收藏
  • 关注

原创 Android 熄屏录音一分钟后没有声音

在使用录音功能的时候发现熄屏的时候过了一分钟之后就没有声音了,虽然录音还在录制但是没有声音,推测是熄屏后手机声音的什么服务关闭了。还有服务在start的时候并没有真正开启,bind=service%%%,要等待一下服务给bind赋值,直接拿会为null。注意Android版本8之后和8之前在启动服务的时候有区别。可以用前台服务使录音这个动作保活,Android官方文档。

2024-01-30 17:07:47 454

原创 快速排序 Java

2022-03-30 11:50:53 435

原创 BinarySearchTree二叉搜索树的创建插入前序遍历 java

二叉搜索树概念我就不在这里描述了,本文主要讲的是创建。为了方便我们比较方便快速的创建二叉搜索树,我们用的入参用数组创建。例如arr=[1,2,3,4,5,6,7,8]则生成二叉搜索树如下图所示BST节点定义类public class BinarySearchTreeNode { public int value; public BinarySearchTreeNode left; public BinarySearchTreeNode righ

2022-03-30 11:34:55 1231

原创 从上到下打印二叉树/按层打印二叉树

题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。例如输入图4.5中的二叉树,则依次打印出8、6、10、5、7、9、11。 public static void printFromTopToBottom(BinaryTreeNode head){ if(head == null){ return; } Queue<BinaryTreeNode> queue = new .

2022-03-16 15:11:55 830

原创 栈的压入,弹出序列

题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5是某栈的压栈序列,序列4、5、3、2、1是该压栈序列对应的一个弹出序列,但4、3、5、1、2就不可能是该压栈序列的弹出序列。算法思路:解决这个问题很直观的想法就是建立一个辅助栈, 把输入的第一个序列中的数字依次压入该辅助栈,并按照第二个序列的顺序依次从该栈中弹出数字。 // 是否是出栈顺序 public static boolean

2022-03-11 17:04:50 250 1

原创 二叉树的镜像 java

程序基于Java写的,二叉树的创建在我之前的博客有。算法思路:左右子树互相交换一下就行了 public void mirrorRecursively(BinaryTreeNode node) { if(null == node){ return; } BinaryTreeNode temp = node.left; node.left = node.right; node.r

2022-03-09 15:13:50 267

原创 包含min函数的栈

题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。时间复杂程度是O(1),说明不能采用遍历的方式去获取最小,何况栈结构不能遍历。题目要求定义栈结构,意思是定义自己的myStack。算法思路:图片的表达非常清晰,不再做过多阐述,意思是要建立一个辅助栈来存储最小值。我们的重点应该放在如何构造辅助栈,而pop、push这类的操作交给类库就可以了。MyStackpublic clas.

2022-03-09 15:06:00 61

原创 创建二叉树 Java

网上的算法大多数是c语言的,Java对与树的操作比较少,都是指针操作,所以Java也可以实现。网上的要么是一边输入一边构建,要么是手动insert,个人感觉不是一种特别好的写法。我这里用的是字符串构建,以‘#’分割。本文主要是二叉树的构建,没有太多关于二叉树的操作,思路比较简单,故不做算法逻辑介绍。二叉树结构类public class BinaryTreeNode { char value; BinaryTreeNode left; BinaryTreeNode

2022-03-08 15:05:42 1672

原创 两数之和、三数之和

给你一个包含n个整数的数组nums,判断nums中是否存在三个元素a,b,c ,使得a + b + c =0 ?请你找出所有和为0且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[]提示:0 <= nums.length &...

2022-03-08 11:42:57 416

原创 删除链表的倒数第n个节点

给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]提示:链表中结点的数目为sz 1 <= sz <= 30 0 <= Node.val <= 100 1 <= n &lt...

2022-03-07 14:45:11 392

原创 myatoi

请你来实现一个myAtoi(string s)函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的atoi函数)。函数myAtoi(string s)的算法如下:读入字符串并丢弃无用的前导空格 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。 将前面步骤读入的这些数字转换为整数(即,"1...

2022-03-04 18:12:48 335

原创 盛水最多的容器

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

2022-03-03 11:01:38 103

原创 整数反转 Java

给你一个 32 位的有符号整数x,返回将x中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围[−231, 231 − 1],就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1:输入:x = 123输出:321示例 2:输入:x = -123输出:-321示例 3:输入:x = 120输出:21示例 4:输入:x = 0输出:0提示:-231 <= x <= ...

2022-02-28 17:30:11 421

原创 动态规划、铺地毯问题

我们可以用2x1 (图2.13的左边)的小矩形横着或者竖着去覆盖更大的矩形。请问用8个2x1的小矩形无重叠地覆盖一一个2x8的大矩形(图2.13的右边),总共有多少种方法? 图2.13一个2X1的矩形和2X8的矩形我们先把2x8的覆盖方法记为f(8)。用第-一个 1x2小矩形去覆盖大矩形的最左边时有两个选择,竖着放或者横着放。当竖着放的时候,右边还剩下2x7的区域,这种情形下的覆盖方法记为f(7)。接下来考虑横着放的情况。...

2022-02-23 14:27:11 528

原创 青蛙跳台阶问题,一次可以跳上1级台阶,也可以跳上2级...它也可以跳上n级

在青蛙跳台阶的问题中,如果把条件改成: -只青蛙一次可以跳上1级台阶,也可以跳上2级...它也可以跳上n级,此时该青蛙跳上一个n级的台阶总共有多少种跳法?我们用数学归纳法可以证明f(n)=2"-。...

2022-02-23 14:23:15 308

原创 两数相加 Java 链表相加

算法思路:从头遍历,相加,进位,进的1也相加,元素尾插需要注意的点:链表遍历空的问题,需要判断,还有进位的问题,需要加进位,如果两个链表都为空但是又有进位,在外层再尾插一次//给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 //// 请你将两个数相加,并以相同形式返回一个表示和的链表。 //// 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 //// //// 示例 1: //// ..

2022-02-22 15:19:38 74

原创 搜索插入的位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为O(log n)的算法。示例 1:输入: nums = [1,3,5,6], target = 5输出: 2示例 2:输入: nums = [1,3,5,6], target = 2输出: 1示例 3:输入: nums = [1,3,5,6], target = 7输出: 4示例 4:输入: nums =..

2022-02-18 16:43:43 231

原创 移除元素 Java

给你一个数组nums和一个值val,你需要原地移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用O(1)额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参作...

2022-02-18 15:39:40 217

原创 删除有序数组中的重复项

给你一个升序排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致。由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有k个元素,那么nums的前k个元素应该保存最终结果。将最终结果插入nums的前k个位置后返回k。不要使用额外的空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。判题标准:...

2022-02-18 15:21:35 82

原创 有效的括号 Java

给定一个只包括'(',')','{','}','[',']'的字符串s,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。示例 1:输入:s = "()"输出:true示例 2:输入:s = "()[]{}"输出:true示例 3:输入:s = "(]"输出:false示例 4:输入:s = "([)]"输出:false示例 5:输入:s = "{[]}"输出:true...

2022-02-18 11:10:51 521

原创 合并两个有序链表

测试用例:[1,2,4] [1,3,4] 测试结果:[1,1,2,3,4,4]测试用例:[] [] 测试结果:[]测试用例:[] [0] 测试结果:[0] // 合并链表,合并两个有序链表,合并后仍旧有序 private static LinkList mergeList(LinkList list1, LinkList list...

2022-02-15 15:14:01 133

原创 计算回文数

回文数就是像121,11,1,45654这样的数字,负数因为前面有一个符号,所以负数都不是回文数思路,把数字转成数字,一个数字一个数组元素,例如121>[1,2,1]用两个下标,一个访问数组头,一个访问数组尾,循环条件:头<=尾,如果不相等返回falseJava有类库实现数字和数组的转换,但是我还是自己写了一个,附在后面 // 回文数 public boolean isPalindrome(int x) { // 判断负数 if

2022-02-15 10:54:59 952

原创 最长公共前缀

给定一个字符串数组,求最长公共前缀测试用例:["flower","flow","flight"] 测试结果:"fl"代码思路:例如["flower","flow","flight"],取第一个元素flower与后面的元素比较,依次取f l o w e r与对应的下标比较比较f f fl l lo o iw w ge hr t/** * 最长公共前缀 * * @para...

2022-02-15 10:15:44 130

原创 Java 使用两个指针解决链表问题

1、找到链表倒数第n个节点代码思路:使用两个指针,一个指向链表的头(begin),另一个指向链表的第n个节点(end),在这里暂且叫begin和end,当end到达最后一个元素的时候,begin刚好到达倒数第n个元素。需要注意的点:end指针到达第n个节点不代表要走n步,而是n-1步。例如链表(123456)的倒数第3个节点,begin在 1 这个位置,end要在 3 这个位置,走两步。 // 求链表倒数第n个节点的值 private static<T> T re

2022-01-28 17:07:33 918

原创 调整数组顺序,使得奇数位于偶数前面

字面意思,调整奇数位于偶数前面。算法思路:使用指针分别指向数组的头和尾,达成一奇一偶的条件后,交换值

2022-01-27 10:10:22 834

原创 打印1~到最大n数

比如输入2,输出99,输入3,输入999.类似的题目是输出A,B。。。AB。。这类的,都是相同的题目。之前说过大数的问题用长数据类型-long/long long 数组 字符串 ...

2022-01-12 14:51:03 93

原创 求数的次方

求数的次方,考虑正数、负数和0的情况。程序不支持大数据,如有需要,可以换成long/long long/自定义数据结构这次的逻辑比较简单,话不多说直接看代码// 求base的exponent次方 private static double power(double base, int exponent){ // 正指数 if(exponent > 0){ return powergt(base, exponent);

2022-01-07 16:55:37 515

原创 计算2进制中1的个数

例如输入10进制数3,则2进制表示是0011,所10进制数3中1的个数是2方法1private static int numberOfOne(int num){ int count = 0; // 变为正数(取反+1) if(num < 0){ num = ~num + 1; count++; } // 最右边是1,count++,右移一位 whi

2022-01-07 16:49:56 284

原创 Java查找旋转数组的最小元素

这道题目本来遍历解决就已经可以,但是又有人说二分也可以后来因为变换莫测的数据,这两个结合在了一起当头=尾=中时,用遍历不是,用二分如果实在抽象难理解,多用几组数据,调试一下就知道怎么回事了如果数据本身不是旋转的,这个程序就不适用代码实现: private static List<Integer> numbers = Arrays.asList(3,4,5,1,2); private static int min(List<Integer>

2021-12-24 15:52:32 262

原创 Java两个栈实现队列,两个队列实现栈

1、两个栈实现队列个人认为这张图就能说明一切思路,代码实现也是非常简单的代码实现 static final Stack<Integer> stack1 = new Stack<>(); static final Stack<Integer> stack2 = new Stack<>(); // 尾插 private static void appendTail(Integer i){ s..

2021-12-24 15:45:03 365

原创 ArrayList.add()重复数据的问题

如果把m的初始化写在循环的外层,当执行m.set的时候,list里面的值就会改变因为ArrayList里面存储的不是值,而是对象的地址当对象改变,ArrayList里面的所指向的对象也会改变。把new Object写在循环里就会解决这个问题。之前图着不浪费内存的原则把new写在外面,之后再覆盖,但是没想到ArrayList存的是地址,如果是这样那也代表着循环退出后只要list不析构,这些临时对象就一直存在,堆内存就一直存着数据长记性了...

2021-12-23 15:31:52 803

原创 Java的swap操作实现

swap的作用不必多说,c/c++中基于指针和引用,这两个功能有多强大更不用说。Java底层隐藏了指针和引用,但是这并不妨碍我们的使用,毕竟java是面向对象语言。方法1:通过new对象,让堆存储变量 public static void swap(Member a, Member b){ Integer temp = a.getI(); a.setI(b.getI()); b.setI(temp); } publ

2021-12-22 11:39:06 895

原创 java二分查找,循环和递归

static List<Integer> numberList = Arrays.asList(0,9,8,7,4,5,9,2,3,4,5,7,6,8,4,6,5); private static Boolean findValue(List<Integer> numberList, Integer value, Integer begin, Integer end){ numberList.sort(null); if(null == n.

2021-12-21 15:50:26 94

原创 Java两个栈实现队列

题目来自《剑指offer》用两个栈实现一个队列,实现尾插和头删的功能。基于两个数据结构的特点,不难思考出两者的交互方式。下面以一张图说明:代码实现 static final Stack<Integer> stack1 = new Stack<>(); static final Stack<Integer> stack2 = new Stack<>(); // 尾插 private static void.

2021-12-20 14:52:36 87

原创 在二维数组中查找数字

问题来自《剑指offer》 static int arr[][] = {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}}; // 二维数组中查找 private static Boolean findNumberInArr(int arr[][], int rows, int columns, int number){ if (null != arr && rows > 0 &&amp

2021-11-12 16:38:03 134

原创 Java单例模式的实现的4种方法

这里不做单例模式的概念解释以下代码的实现参考《剑指offer》法1 : 线程不安全版本public final class Singletonl { private Singletonl() { } public int i; private static Singletonl instance = null; public static Singletonl Instance() { if.

2021-11-12 16:33:27 234

原创 Optional的应用

本文的初衷不是为了分享如何使用optional如何使用,而是分享在使用的过程中遇到的一些容易让人忽略的问题,以及我为什么要用optional,当然也会讲解如何使用optional。

2021-10-22 17:32:04 1094 2

转载 Java中的异常

异常类的结构图:代码在不同阶段的异常:1、编译时触发的异常,例如: public void setAge(int age) throws Exception { if(age>0 && age < 150) { this.age = age; } else { throw new Exception("年龄非法"); } }2、运行时触发的异常,例如: public void setAge(int age) {.

2021-10-08 12:01:25 70

转载 Java json对象,JSON,字符串,map之间的互转

1.对象与字符串之间的互转将对象转换成为字符串String str = JSON.toJSONString(infoDo);字符串转换成为对象InfoDo infoDo = JSON.parseObject(strInfoDo, InfoDo.class);2.对象集合与字符串之间的互转将对象集合转换成为字符串String users = JSON.toJSONString(users);将字符串转换成为对象集合List<User> userList = JSON.p

2021-09-30 10:37:16 363

原创 通过通过Stream类中得 of() 静态方法获取流不能排序的问题

通过通过Stream类中得 of() 静态方法获取流List<String> streamList = Stream.of("8", "4", "5", "9").collect(Collectors.toList());System.out.println(streamList);List<String> streamListNew = streamList.stream().sorted().collect(Collectors.toList());System.ou

2021-09-28 14:52:11 241

空空如也

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

TA关注的人

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