- 博客(231)
- 收藏
- 关注
原创 android
快捷键alt+enter:错误纠正第一章android系统架构:Linux内核层、系统运行库层、应用框架层(API)、应用层)adb指令:adb kill-server 杀死服务adb stsrt-server 开启服务cd 桌面 install xx.apk 快速安装apkadb uninstall 包名 快速卸载adb shell 进到终端 ls 显示所有目录adb push 新文件 /目标文件)adb pull 目标文件(写清楚目录结构)项目运行:android
2020-06-25 00:52:08 142
原创 用rand7实现rand10
题目描述已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 10 范围内的均匀随机整数。不要使用系统的 Math.random() 方法。分析得到1-40 41-49舍弃对于大于40的数,(大于40的随机数−40−1)∗7+rand7()可以得到 1-631−63 之间的随机数,只要舍弃 33 个即可,那对于这 33 个舍弃的,还可以再来一轮:(大于60的随机数−60−1)∗7+rand7()这样我们可以得到 1-211−21 之间的随机
2021-08-13 11:31:11 302
原创 矩阵乘法。
题目描述描述给定两个 nnn∗n 的矩阵 AA 和 BB ,求 ABA∗B 。数据范围:1 \le n \le 5001≤n≤500-100 \le n \le 100−100≤n≤100示例1输入:[[1,2],[3,2]],[[3,4],[2,1]]返回值:[[7,6],[13,14]]代码import java.util.*;public class Solution { public int[][] solve (int[][] a, int[][] b) {
2021-08-08 15:53:54 306
原创 矩阵最长递增路径
题目给定一个 m x n 整数矩阵 matrix ,找出其中 最长递增路径 的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。 你 不能 在 对角线 方向上移动或移动到 边界外(即不允许环绕)。示例 1:输入:matrix = [[9,9,4],[6,6,8],[2,1,1]]输出:4解释:最长递增路径为 [1, 2, 6, 9]。分析1.当一个格子的值大于等于它周围所有格子的值时,以该格子为起点的最长递增路径的长度为1;2.以格子A为起点的最长递增路径的长度 = 周围大于A的值
2021-08-08 15:52:09 868
原创 股票交易的最大收益
题目描述给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入:prices = [3,3,5,0,0,3,1,4]输出:6解释:在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3 。随后,在第 7 天(股票价格 = 1)的时候买入,在第 8 天 (股票
2021-08-08 15:32:59 336
原创 判断t1树中是否有与t2树拓扑结构完全相同的子树
题目描述给定彼此独立的两棵二叉树,判断 t1 树是否有与 t2 树拓扑结构完全相同的子树。设 t1 树的边集为 E1,t2 树的边集为 E2,若 E2 等于 E1 ,则表示 t1 树和t2 树的拓扑结构完全相同。示例1输入:{1,2,3,4,5,6,7,#,8,9},{2,4,5,#,8,9}返回值:true代码 public boolean isContains (TreeNode root1, TreeNode root2) { // write code her
2021-08-08 15:21:14 421
原创 通配符匹配
题目描述请实现支持’?‘and’’.的通配符模式匹配‘?’ 可以匹配任何单个字符。'’ 可以匹配任何字符序列(包括空序列)。返回两个字符串是否匹配函数声明为:bool isMatch(const char s, const char p)下面给出一些样例:isMatch(“aa”,“a”) → falseisMatch(“aa”,“aa”) → trueisMatch(“aaa”,“aa”) → falseisMatch(“aa”, "") → trueisMatch(“aa”, "
2021-08-08 15:14:41 157
原创 字典树的实现
题目描述字典树又称为前缀树或者Trie树,是处理字符串常用的数据结构。假设组成所有单词的字符仅是‘a’~‘z’,请实现字典树的结构,并包含以下四个主要的功能。void insert(String word):添加word,可重复添加;void delete(String word):删除word,如果word添加过多次,仅删除一次;boolean search(String word):查询word是否在字典树中出现过(完整的出现过,前缀式不算);int prefixNumber(String pre):
2021-08-08 15:03:51 329
原创 数据流的中位数
题目描述有一个源源不断的吐出整数的数据流,假设你有足够的空间来保存吐出的数。请设计一个名叫MedianHolder的结构,MedianHolder可以随时取得之前吐出所有数的中位数。[要求]如果MedianHolder已经保存了吐出的N个数,那么将一个新数加入到MedianHolder的过程,其时间复杂度是O(logN)。取得已经吐出的N个数整体的中位数的过程,时间复杂度为O(1)每行有一个整数opt表示操作类型若opt=1,则接下来有一个整数N表示将N加入到结构中。若opt=2,则表示询
2021-08-08 11:45:40 184
原创 旋转数组。
题目描述给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。进阶:尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?示例 1:输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]分析
2021-08-08 11:32:35 104
原创 换钱的最少货币数
题目描述给定数组arr,arr中所有的值都为正整数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个aim,代表要找的钱数,求组成aim的最少货币数。如果无解,请返回-1.【要求】时间复杂度O(n \times aim)O(n×aim),空间复杂度On。示例1输入:[5,2,3],20返回值:4示例2输入:[5,2,3],0返回值:0代码import java.util.*;public class Solution { /**
2021-08-07 20:38:50 119
原创 大数乘法。
题目描述以字符串的形式读入两个数字,编写一个函数计算它们的乘积,以字符串形式返回。(字符串长度不大于10000,保证字符串仅由’0’~'9’这10种字符组成)示例1输入:“11”,“99”返回值:“1089”说明:11*99=1089分析即乘法分配律,如AB*CD=AC(AD+BC)BD,将两个数组逐位相乘的结果对位存放在新的数组里,再对新数组进行进位判定,进位结束后将新数组转化成字符串输出。【AB, (AD+BC), BD】进行进位,每一处只留个位,剩下的向前进位代码impor
2021-08-07 20:16:10 261
原创 179 最大数
题目描述给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。示例 1:输入:nums = [10,2]输出:“210”示例 2:输入:nums = [3,30,34,5,9]输出:“9534330”代码public String largestNumber(int[] nums) { PriorityQueue<String> heap = new Priori
2021-08-07 19:52:02 126
原创 二叉树根节点到叶子节点的所有路径和
题目描述描述给定一个仅包含数字\ 0-9 0−9 的二叉树,每一条从根节点到叶子节点的路径都可以用一个数字表示。例如根节点到叶子节点的一条路径是1\to 2\to 31→2→3,那么这条路径就用\ 123 123 来代替。找出根节点到叶子节点的所有路径表示的数字之和例如:这颗二叉树一共有两条路径,根节点到叶子节点的路径 1\to 21→2 用数字\ 12 12 代替根节点到叶子节点的路径 1\to 31→3 用数字\ 13 13 代替所以答案为\ 12+13=25 12+13=25示例1
2021-08-07 11:30:21 631
原创 回文字符串
题目描述给定一个字符串,请编写一个函数判断该字符串是否回文。如果回文请返回true,否则返回false。示例1输入:“absba”返回值:true分析代码class Solution {public boolean judge(string str) { int len = str.length(); for(int i = 0 ; i < len/2 ;i++) { if(str.charAt(i)!=
2021-08-07 10:41:50 100
原创 数字字符串转化成IP地址
题目描述现在有一个只包含数字的字符串,将该字符串转化成IP地址的形式,返回所有可能的情况。例如:给出的字符串为"25525522135",返回[“255.255.22.135”, “255.255.221.35”]. (顺序没有关系)分析回溯法插入’.’,每次可以插入到1个,2个或者3个字符后面,插入3次之后对得到的字符串进行验证代码import java.util.*;public class Solution { /** * * @param s st
2021-08-01 16:35:09 624
原创 最小编辑代价
题目描述给定两个字符串str1和str2,再给定三个整数ic,dc和rc,分别代表插入、删除和替换一个字符的代价,请输出将str1编辑成str2的最小代价。输入:“abc”,“adc”,5,3,2返回值:2分析1.动态规划:dp[i][j]表示word1的前i个字符编辑成word2的前j个字符需要的最小操作数2.初始状态:dp[i][0] = i,i次删除;dp[0][i] = i,i次插入3.过渡公式:当i字符等于j字符时:dp[i][j] = dp[i-1][j-1],不需要额外操作
2021-08-01 16:15:34 98
原创 进制转换。
题目给定一个十进制数 M ,以及需要转换的进制数 N 。将十进制数 M 转化为 N 进制数。当 N 大于 10 以后, 应在结果中使用大写字母表示大于 10 的一位,如 ‘A’ 表示此位为 10 , ‘B’ 表示此位为 11 。若 M 为负数,应在结果中保留负号。示例1:输入:7,2返回值:“111”分析除N取余,然后倒序排列,高位补零。代码public String solve (int M, int N) { // write code here
2021-08-01 16:12:07 135
原创 字符串出现次数的TopK问题
题目描述给定一个字符串数组,再给定整数k,请返回出现次数前k名的字符串和对应的次数。返回的答案应该按字符串出现频率由高到低排序。如果不同的字符串有相同出现频率,按字典序排序。对于两个字符串,大小关系取决于两个字符串从左到右第一个不同字符的 ASCII 值的大小关系。比如"ah1x"小于"ahb",“231”<”32“字符仅包含数字和字母实例一:输入:[“a”,“b”,“c”,“b”],2返回值:[[“b”,“2”],[“a”,“1”]]说明:"b"出现了2次,记[“b”,“2”
2021-08-01 16:08:18 428
原创 两个链表的第一个公共结点
题目描述输入两个无环的单链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)分析两个指针分别遍历。让a+b作为链表A的新长度,b+a作为链表B的新长度。代码class Solution {public: ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) { ListNode *ta = pHead1, *tb = pHe
2021-08-01 15:34:08 97
原创 最长公共子串
题目描述给定两个字符串str1和str2,输出两个字符串的最长公共子串题目保证str1和str2的最长公共子串存在且唯一。示例1输入:“1AB2345CD”,“12345EF”返回值:“2345”代码public String LCS(String str1, String str2) { int maxLenth = 0;//记录最长公共子串的长度 //记录最长公共子串最后一个元素在字符串str1中的位置 int maxLastIndex = 0; int
2021-08-01 15:14:36 129
原创 大数相加(字符串)
题目描述以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。(字符串长度不大于100000,保证字符串仅由’0’~'9’这10种字符组成)示例1输入:“1”,“99”返回值:“100”说明:1+99=100分析从尾部相加代码 public String solve(String s, String t) { StringBuilder stringBuilder = new StringBuilder(); int i =
2021-08-01 15:07:32 390
原创 表达式求值
题目描述请写一个整数计算器,支持加减乘三种运算和括号。示例1:输入:“1+2”返回值:3实例2:输入:“3+234-1”返回值:26分析对于「任何表达式」而言,我们都使用两个栈 nums 和 ops:nums : 存放所有的数字ops :存放所有的数字以外的操作然后从前往后做,对遍历到的字符做分情况讨论:空格 : 跳过( : 直接加入 ops 中,等待与之匹配的 )) : 使用现有的 nums 和 ops 进行计算,直到遇到左边最近的一个左括号为止,计算结果放到 nums
2021-08-01 15:01:09 100
原创 反转字符串 反转大小写
题目描述写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)示例1:输入:“abcd”返回值:“dcba”分析开辟一个和str长度大小相同的一个字符串ans,把传入的str倒序赋值到ans字符串上, 时间复杂度O(n),额外空间复杂度O(n)原地交换,,注意:交换进行的次数是次时间复杂度O(n),额外空间复杂度O(1)代码public String solve (String str) { char[] ans = str.toC
2021-08-01 14:55:24 1719
原创 最长无重复子数组 最长连续子序列
题目给定一个数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同。子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组示例1输入:[2,3,4,5] 返回值:4说明:[2,3,4,5]是最长子数组示例2输入:[2,2,3,4,3] 返回值:3说明:[2,3,4]是最长子数组分析使用哈希表。我们使用两个指针,一个i一个j,最开始的时候i和j指向第一个元素,然后i往后移,把扫描过的元素都放到
2021-08-01 14:40:37 1017
原创 24 两两交换链表中的节点
题目描述给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:输入:head = [1,2,3,4]输出:[2,1,4,3]示例 2:输入:head = []输出:[]分析递归解法:返回值:交换完成的子链表调用单元:设需要交换的两个点为 head 和 next,head 连接后面交换完成的子链表,next 连接 head,完成交换终止条件:head 为空指针或者 next 为空指针,也就是当前无节点或者只有
2021-07-22 16:45:16 91
原创 92 反转链表2
题目描述给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。示例 1:输入:head = [1,2,3,4,5], left = 2, right = 4输出:[1,4,3,2,5]示例 2:输入:head = [5], left = 1, right = 1输出:[5]分析两个指针遍历到中间部分,将中间部分反转,再进行连接。代码 public L
2021-07-22 09:59:14 85
原创 82 删除排序链表中的重复元素
题目描述存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。返回同样按升序排列的结果链表。示例 1:输入:head = [1,2,3,3,4,4,5]输出:[1,2,5]示例 2:输入:head = [1,1,1,2,3]输出:[2,3]分析记得要循环判断到没有重复的元素未知,否则next指针需要一直后移代码 public ListNode deleteDuplicates(ListNode h
2021-07-21 20:26:42 80
原创 1143 最长公共子序列 最长公共前缀
题目描述给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。示例 1:输入:text1 = “abcde”, text2 =
2021-07-21 09:56:26 151
原创 112 路径总和
题目描述给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。叶子节点 是指没有子节点的节点。示例 1:输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22输出:true分析若当前节点就是叶子节点,那么直接判断 sum 是否等于 val 即可(因为路径和已经确定,就是当前节点的值,我们只需
2021-07-19 21:20:26 72
原创 69 x的平方根
题目描述实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2分析使用二分查找,如果一个数 aa 的平方大于 xx ,那么 aa 一定不是 xx 的平方根。我们下一轮需要在 [0…a - 1][0…a−1] 区间里继续查找 xx 的平方根。代码public int mySqrt(int x) { // 特殊值判断 if (x ==
2021-07-16 16:18:41 185
原创 958二叉树的完全性检验
题目描述给定一个二叉树,确定它是否是一个完全二叉树。百度百科中对完全二叉树的定义如下:若设二叉树的深度为 h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。(注:第 h 层可能包含 1~ 2h 个节点。)示例 1:输入:[1,2,3,4,5,6]输出:true解释:最后一层前的每一层都是满的(即,结点值为 {1} 和 {2,3} 的两层),且最后一层中的所有结点({4,5,6})都尽可能地向左。分析完全二叉树,层
2021-07-14 10:57:39 81
原创 41 缺失的第一个正数
题目描述给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。示例 1:输入:nums = [1,2,0]输出:3代码二分查找public int firstMissingPositive(int[] nums) { int len = nums.length; Arrays.sort(nums); for (int i = 1; i <= l
2021-07-13 18:02:06 60
原创 151 翻转字符串里的单词
题目描述给你一个字符串 s ,逐个翻转字符串中的所有 单词 。单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串。说明:输入字符串 s 可以在前面、后面或者单词间包含多余的空格。翻转后单词间应当仅用一个空格分隔。翻转后的字符串中不应包含额外的空格。示例 1:输入:s = “the sky is blue”输出:“blue is sky the”分析去掉首尾空格当前单词不为空时,连接到word
2021-07-07 10:34:33 67
原创 415 字符串相加
题目描述给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。提示:num1 和num2 的长度都小于 5100num1 和num2 都只包含数字 0-9num1 和num2 都不包含任何前导零你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式分析carry保存进位代码 public String addStrings(String num1, String num2) { StringBuilder res = new
2021-07-05 17:13:51 67
原创 【排序算法总结】 912 排序数组
题目描述给你一个整数数组 nums,请你将该数组升序排列。示例 1:输入:nums = [5,2,3,1]输出:[1,2,3,5]示例 2:输入:nums = [5,1,1,2,0,0]输出:[0,0,1,1,2,5]分析排序算法代码:选择排序。每一轮选取未排定的部分中最小的部分交换到未排定部分的最开头,经过若干个步骤,就能排定整个数组。即:先选出最小的,再选出第 2 小的,以此类推。public class Solution { // 选择排序:每一轮选择最小元素交换
2021-07-04 10:37:28 128
原创 232 用栈实现队列
题目描述请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:你只能使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, siz
2021-07-04 09:47:28 69
原创 54 螺旋矩阵
题目描述给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]分析旋转挨个输出即可代码public List<Integer> spiralOrder(int[][] matrix) { List<Integer> res = new LinkedList<>();
2021-07-03 11:16:45 118
原创 【单调栈】85 最大矩形
题目给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。示例 1:输入:matrix = [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“0”,“0”,“1”,“0”]]输出:6解释:最大矩形如上图所示。示例 2:输入:matrix = []输出:0分析求最大矩形的面积,类似于求84的最大柱状矩形。但是矩形的底不确定因
2021-06-25 16:28:27 69
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人