- 博客(231)
- 收藏
- 关注
原创 android
快捷键 alt+enter:错误纠正 第一章 android系统架构:Linux内核层、系统运行库层、应用框架层(API)、应用层) adb指令: adb kill-server 杀死服务 adb stsrt-server 开启服务 cd 桌面 install xx.apk 快速安装apk adb uninstall 包名 快速卸载 adb shell 进到终端 ls 显示所有目录 adb push 新文件 /目标文件) adb pull 目标文件(写清楚目录结构) 项目运行:android
2020-06-25 00:52:08
170
原创 用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
375
原创 矩阵乘法。
题目描述 描述 给定两个 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
361
原创 矩阵最长递增路径
题目 给定一个 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
931
原创 股票交易的最大收益
题目描述 给定一个数组,它的第 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
414
原创 判断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
466
原创 通配符匹配
题目描述 请实现支持’?‘and’’.的通配符模式匹配 ‘?’ 可以匹配任何单个字符。 '’ 可以匹配任何字符序列(包括空序列)。 返回两个字符串是否匹配 函数声明为: bool isMatch(const char s, const char p) 下面给出一些样例: isMatch(“aa”,“a”) → false isMatch(“aa”,“aa”) → true isMatch(“aaa”,“aa”) → false isMatch(“aa”, "") → true isMatch(“aa”, "
2021-08-08 15:14:41
194
原创 字典树的实现
题目描述 字典树又称为前缀树或者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
367
原创 数据流的中位数
题目描述 有一个源源不断的吐出整数的数据流,假设你有足够的空间来保存吐出的数。请设计一个名叫MedianHolder的结构,MedianHolder可以随时取得之前吐出所有数的中位数。 [要求] 如果MedianHolder已经保存了吐出的N个数,那么将一个新数加入到MedianHolder的过程,其时间复杂度是O(logN)。 取得已经吐出的N个数整体的中位数的过程,时间复杂度为O(1) 每行有一个整数opt表示操作类型 若opt=1,则接下来有一个整数N表示将N加入到结构中。 若opt=2,则表示询
2021-08-08 11:45:40
211
原创 旋转数组。
题目描述 给定一个数组,将数组中的元素向右移动 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
138
原创 换钱的最少货币数
题目描述 给定数组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
146
原创 大数乘法。
题目描述 以字符串的形式读入两个数字,编写一个函数计算它们的乘积,以字符串形式返回。 (字符串长度不大于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
322
原创 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
171
原创 二叉树根节点到叶子节点的所有路径和
题目描述 描述 给定一个仅包含数字\ 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
692
原创 回文字符串
题目描述 给定一个字符串,请编写一个函数判断该字符串是否回文。如果回文请返回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
146
原创 数字字符串转化成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
679
原创 最小编辑代价
题目描述 给定两个字符串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
134
原创 进制转换。
题目 给定一个十进制数 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
174
原创 字符串出现次数的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
478
原创 两个链表的第一个公共结点
题目描述 输入两个无环的单链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的) 分析 两个指针分别遍历。让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
126
原创 最长公共子串
题目描述 给定两个字符串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
164
原创 大数相加(字符串)
题目描述 以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。 (字符串长度不大于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
436
原创 表达式求值
题目描述 请写一个整数计算器,支持加减乘三种运算和括号。 示例1:输入: “1+2” 返回值: 3 实例2:输入: “3+234-1” 返回值: 26 分析 对于「任何表达式」而言,我们都使用两个栈 nums 和 ops: nums : 存放所有的数字 ops :存放所有的数字以外的操作 然后从前往后做,对遍历到的字符做分情况讨论: 空格 : 跳过 ( : 直接加入 ops 中,等待与之匹配的 ) ) : 使用现有的 nums 和 ops 进行计算,直到遇到左边最近的一个左括号为止,计算结果放到 nums
2021-08-01 15:01:09
154
原创 反转字符串 反转大小写
题目描述 写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过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
1838
原创 最长无重复子数组 最长连续子序列
题目 给定一个数组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
1143
原创 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
123
原创 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
116
原创 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
113
原创 1143 最长公共子序列 最长公共前缀
题目描述 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。 例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。 两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。 示例 1: 输入:text1 = “abcde”, text2 =
2021-07-21 09:56:26
189
原创 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
102
原创 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
224
原创 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
121
原创 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
94
原创 151 翻转字符串里的单词
题目描述 给你一个字符串 s ,逐个翻转字符串中的所有 单词 。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串。 说明: 输入字符串 s 可以在前面、后面或者单词间包含多余的空格。 翻转后单词间应当仅用一个空格分隔。 翻转后的字符串中不应包含额外的空格。 示例 1: 输入:s = “the sky is blue” 输出:“blue is sky the” 分析 去掉首尾空格 当前单词不为空时,连接到word
2021-07-07 10:34:33
96
原创 415 字符串相加
题目描述 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。 提示: num1 和num2 的长度都小于 5100 num1 和num2 都只包含数字 0-9 num1 和num2 都不包含任何前导零 你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式 分析 carry保存进位 代码 public String addStrings(String num1, String num2) { StringBuilder res = new
2021-07-05 17:13:51
101
原创 【排序算法总结】 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
171
原创 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
103
原创 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
157
原创 【单调栈】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
105
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1