自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

云深杂记

云深不知处,只在此山中。

  • 博客(29)
  • 收藏
  • 关注

原创 ERROR: Unable to resolve dependency for app@debug/compileClasspath: Could not download appcompat.

今天想用Android Studio开发APP给Monkey测试隐私泄露用,但是发现出现了:ERROR: Unable to resolve dependency for ':app@debug/compileClasspath': Could not download appcompat.这个bug,目测又是gradle出问题了,只要在这里设置为Use local Gradle distribution就好了。...

2020-06-22 15:15:06 4090

原创 LeetCode 32 最长有效括号 题解

题目大意给定一个由左右括号()组成的字符串,然后判断其中最长的有效括号子串长度(即左右括号可以匹配的子串)。分析与源代码一、时间复杂度为O(n^2)的DP算法这道题我首先想到的是动态规划解法,设dp[i][j]为1表示s[i][j]为有效括号子串,那么会有两种情况的时候dp[i][j]为1:第一种是dp[i+1][j-1]=1且s[i]='(',s[j]=')';第二种是枚...

2020-01-20 18:07:23 195

原创 LeetCode 120 三角形最小路径和 动态规划题解

题目大意给定一个三角形数组,然后求从上到下走一条路径的最小和是多少,注意每一步只能移动到下一行的相邻结点上。分析一道比较水的动态规划题,就是当初的数字三角形,dp[i][j] = min(dp[i - 1][j],dp[i - 1][j - 1]) + triangle[i][j]。代码class Solution { public int minimumTotal(...

2020-01-11 21:33:35 156

原创 POJ 3279 Filptile 题解 状态压缩枚举

题目大意给定一个M*N的网格,上面有黑白块,然后每次可以反转某个块及其上下左右的块,求整个网格全部变为白色的最少反转次数,如果没有办法反转成功就输出IMPOSSIBLE。分析解决这道问题的关键是,如何分析各个块之间的依赖关系,如果直观地来看各个相邻的块似乎是互相依赖的,因为两个相邻格子可以通过反转的方式互相修改对方的颜色,这种两变量互相影响的问题我们可以通过数学里边的主元法来思考问题。...

2020-01-11 20:24:08 172

原创 LeetCode 100 相同的树 题解

题目大意给定两个二叉树,然后判断是否相同,即结构相同,且对应结点也相同。分析利用深搜进行递归判断即可,注意判断边界条件:1.一个根节点为空,一个根节点不为空,返回false;2.两个均为空返回true;源代码class Solution { public boolean isSameTree(TreeNode p, TreeNode q) { ...

2020-01-11 19:32:38 115

原创 LeetCode 188 买卖股票的最佳时机 IV 题解

题目大意这道题与III的区别在于给定交易数量为k,然后求最大利润。分析将III的程序维度稍微修改一下,即可完成本题,但是如果直接提交的话,会由于k达到十亿爆出内存溢出,我本来以为要用什么奇妙的滚动数组来优化,屡次尝试未果后参考了别人的题解,发现一次交易至少需要两天,那么我们可以认为如果k > n / 2,就能通过无限次的交易那种方案来解决,即利用LeetCode 122那道题的方...

2020-01-04 10:34:40 170

原创 LeetCode 123 买卖股票的最佳时机 III 题解

题目大意与前两题类似,不过这里要求只进行两次交易,然后求解最大利润。分析不妨设dp[i][j][k]表示第i天,至多j笔交易,持有股票(k=1)或不持有股票(k=0)时,能够获取到的最大利润。那么很显然,有如下结论:如果第j天完成至多j笔交易的话,那么它要么保持前一天的状态不变,即不发生交易,要么在今天买入股票。同理,如果第j天完成至多j笔交易且不持有股票的话,那么它要...

2020-01-04 10:25:02 158

原创 LeetCode 122 买卖股票的最佳时机 II

题目大意这道题与上一题类似,不过区别在于,可以对股票进行无限次购买,可在购买之前需要将已经购买的卖出。分析一种很直观的想法,当当前值大于下一天的我们就卖出,如果小于就更新最大值或者卖出再买入,但是需要证明:考虑的其实就是一个这样的状态,如果有四天的股票价格分别为a b c d,a<b且c<d,现在究竟该在a买b卖c买d卖,还是a买d卖(等价于a买入bc连续卖出买入,最后...

2020-01-01 17:14:32 124

原创 LeetCode 121 买卖股票的最佳时机 题解(动态规划)

题目大意给定一个数组,第i个数代表一个股票第i天的价格,求这个股票可以收到的最大利润。分析设dp[i]表示前i天可以获得的最大利润,再设变量max与min表示当前股票的最大price与最小price,那么可以得到如下状态转移方程:dp[i]=max(max - min, dp[i - 1]),i >= 1,这个状态转移方程很容易计算,注意一下求解完第i天之后,要将min与max的...

2020-01-01 17:03:55 158

原创 LeetCode 149 直线上最多的点数 题解

题目大意这道题给定n个点,然后求最多有多少个点可以共线。分析我用了比较朴素的算法,枚举两个不重合的点来计算一条直线,然后判断所有的点有多少会在这条直线上,进而求出最大值,为了避免直线不存在的情况,我这里使用的两点式方程求直线。注意一种极端情况,就是所有的点都是同一个点,那么不存在直线,直接返回n即可。代码public int maxPoints(int[][] point...

2019-12-28 22:35:19 253

原创 LeetCode 98 验证二叉搜索树 题解

题目大意给定一个树结构,判定这个树是不是二叉搜索树。分析首先给出二叉搜索树的定义:1.节点的左子树只包含小于当前节点的数。2.节点的右子树只包含大于当前节点的数。3.所有左子树和右子树自身必须也是二叉搜索树。这里有几个要点,小于、大于意味着比较的时候等于不能满足条件,之后要求的是左子树所有节点都要小于当前节点,右子树的所有节点都要大于当前节点,这意味着不仅儿子节点要满足...

2019-11-17 17:02:09 151

原创 LeetCode 41 缺失的第一个正数 题解

题目大意给定一个无序的整数数组,然后求最小的没有出现过的正整数,比如给定[1, 3, 4],那么最小的没有出现过的正整数就是2。分析这个题目要求的是O(n)的算法,可以学习桶排序的思想(也或者是一种利用下标来做哈希索引的思想)。首先遍历数组,求出其中的最小与最大的正整数,然后设一个bool数组index来判断某个数是否出现过,要注意的是需要平移一下下标,比如index[i]对应的是...

2019-11-17 16:12:59 143

原创 LeetCode 56 合并区间 题解

题目大意给定一组区间,然后将有重叠部分的区间合并,注意如果两个区间仅有一个数重叠也算,比如[1,4]与[4,5]。分析直接按照区间的左端点大小升序排序,如果相同则比较右端点,均按升序。排序后,如果后一个区间的左端点小于等于前一个区间的右端点,那么我们就认为这两个区间可以合并,否则将前一个区间认为没有可以合并的区间了,扔到结果里边去,因为后一个如果都不能合并的话,考虑到升序的原因,后面的...

2019-11-16 21:28:14 278

原创 Java Web学习(一)Web相关概念与Tomcat服务器

web相关概念回顾软件架构C/S:客户端Client/服务器端ServerB/S:浏览器Browser/服务器端Server资源分类静态资源:所有用户访问后,得到的结果都是一样的,称为静态资源,静态资源可以直接被浏览器解析如: html,css,JavaScript等动态资源:每个用户访问相同资源后,得到的结果可能不一样。称为动态资源。动态资源被访问后,需要先转换...

2019-11-15 09:14:02 200

原创 LeetCode 17 电话号码的字母组合 题解

题目大意给定一个字符串,由2-9几个字符组成,然后每个字符按照手机键盘的规则对应到几个字母,然后依次将字母转换,求出所有可能的组合。分析一个比较容易想到的做法是使用深搜,搜索树上每个状态就是选择一个当前数字可以添加的字母加到当前字符串中,如果长度达到输入字符串长度的时候,就认为是一个可行解,最后求出所有可行解即可。代码map<char, string> getSt...

2019-11-14 20:17:36 359

原创 pip安装模块出现error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools

今天在用pip安装yara-python的时候,提示错误:error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools。在网上查了一下,主要有两种办法,一种是安装所需要的组件,这篇文章里边提供了链接,还有一种比较轻便的方法是通过whl文件,也就是python模块的安装包进行...

2019-11-12 14:36:06 897

原创 LeetCode 4 寻找两个有序数组的中位数 题解

题目大意给定两个有序数组,求这两个数组的中位数,时间复杂度要求是O(log(n+m))。分析这道题各种解法很多,我这里提供了关于中位数定义的那种解法。简单来讲,中位数就是找到一组有序数中间位置的值,如果这组数有偶数个,那么中位数是最中间两个数的平均值,奇数个那么就是正中间的那个数。把数组nums1和数组nums2分别在 i 和 j 进行划分,将 i 的左边和 j 的左边组合成“...

2019-11-10 19:41:16 282

原创 LeetCode 8 字符串转换整数 (atoi) 题解

题目大意给定一个字符串,将其题目要求转换为整数,具体要求可见原题链接(https://leetcode-cn.com/problems/string-to-integer-atoi/)。分析这道题恶心的地方在于对各种情况进行排除,我的做法是:1.首先移除所有的前置空格,移除完成后判断是否是空串,如果是返回0;2.接着判断第一个字符是否为正负号,如果是则第二个要求是数字才可以,如...

2019-11-10 18:40:16 127

原创 LeetCode 16 最接近的三数之和 题解

题目大意给定一个数组与target,然后从数组中选三个数使它们的和与target最接近。分析其实思路与第十五题比较相似,只是在双指针移动的时候要用三数之和与target做差来决定指针移动,比如大于零,那么说明三数之和比较大,需要将right向左移动。注意,首先要排序,然后可以剪枝。比如第五行,我们需要让nums[i]与左边的nums[i-1]相等,才能对这种情况剪枝,不能通过num...

2019-11-09 19:03:33 118

原创 数据结构——堆

堆的定义1.堆是一种基于完全二叉树的数据结构。2.完全二叉树 (1) 每个节点最多有两个子节点(二叉); (2) 除了最底层,其他每一层都必须填满,最底层也需要从左到右依次填入数据;3.当一棵完全二叉树满足下列条件时即称为堆:每个父节点都大于等于(或者小于等于)它的两个子节点。大于等于的情况称为大根堆,小于等于的情况称为小根堆(没有二叉排序树的要求,比如左...

2019-11-09 13:31:21 871

原创 LeetCode 5 最长回文子串 题解

题目大意给定一个字符串,求它最长的回文子串,子串意味着要在给定的字符串中连续,回文则要左右对称。分析设dp[i][j]为s[i][j]是否为i最长回文子串,那么很容易得到s[i][i],s[i][i+1]的情况,接下来进行递推计算长度大于等于3的回文子串:当s[i] = s[i + len - 1]且dp[i + 1][i + len - 2]=true的时候,dp[i][i + ...

2019-11-09 09:12:15 153

原创 LeetCode 215 数组中的第K个最大元素 题解

题目大意给定一个数组,求它的第K大的元素。分析使用堆、二叉排序树、快排之类的都可以,我直接用了C++ STL自带的priority_queue代替手写堆了。代码int findKthLargest(vector<int>& nums, int k) { priority_queue<int,vector<int>,less<...

2019-11-08 20:59:14 99

原创 LeetCode 513 找树左下角的值 题解

题目大意给定一个二叉树,求最深一层的最左节点值。分析首先我们需要先进行一轮DFS去求解这个二叉树的最大深度,然后再进行深搜,按照先左后右的顺序,当搜索到第一个处于最大深度处的节点时返回答案。代码int max_depth, ans;bool isVis;void check_depth(int depth, TreeNode* root) { //计算最大深度 ...

2019-11-08 20:34:04 146

原创 LeetCode 39 组合总和 题解

题目大意给定一个包含无重复元素的数组candidates和一个目标数target,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。分析一个很直接的想法是使用深度优先搜索,因为每一个元素可以放入无限多次,所以我们在进行下一轮搜索的时候需要将当前元素继续考虑进去,而结束当前这个状态搜索的边界条件是target<0或...

2019-11-08 08:45:33 171

原创 LeetCode 47 全排列 II 题解

题目大意给定一个包含重复元素的数组,求全排列。分析为了做这道题,首先要理清求全排列的本质,实际上求全排列就是固定前面的数,然后对后面的数进行选择,比如一开始的时候选择第一个数,然后对剩下的数进行全排列,这样相当于转换为一个子问题,递归求解。那么对于这个问题,假设我们有1,1,3,4四个数,那么对于第一个位置,首先把1放置到这个位置,然后对剩余三个数进行全排列,接下来考虑第二个1时,没有必要...

2019-11-06 20:41:36 150

原创 LeetCode 36 有效的数独 题解

题目大意给定一个初始的数独状态,判断是否满足要求:数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。分析一次二重循环遍历一下这个数独,根据要求判定即可。代码bool isValidSudoku(vector<vector<char>>& board) { ...

2019-11-05 21:06:42 182

原创 LeetCode 35 搜索插入位置 题解

题目大意在一个有序数组中查找给定的一个数,给出它出现的最左与最右的位置,要求时间复杂度是O(logn)分析根据时间复杂度,很明显能看出来要用基于二分的方法,将二分查找稍微修改一下就好,传统的二分查找当我们在中间位置找到了target的时候会直接返回,如果要查找最左出现的位置,可以判定一下nums[mid - 1],如果等于target的话,就将right改为mid - 1,继续迭代,同理可以...

2019-11-05 20:29:41 141

原创 LeetCode 15 三数之和 题解

题目大意:在一个数组中求出所有a,b,c,使得a+b+c=0,注意元素不能重复,且(a,b,c)不能重复。分析:(一)最直接的想法是直接枚举a,b,c,这样的做法是O(n^3),很明显会超时。(二)接下来有两个想法,我最初想到的是首先排序,然后枚举a和b,然后在剩余元素中二分查找判断是否存在-(a+b),这样的时间复杂度是O(n^2logn),另一个想法是利用哈希表来判断是否存在-...

2019-11-05 20:15:49 185

原创 《推荐系统实践》笔记(一)推荐系统的简介、应用与评测

一、简介随着互联网的发展,人们从信息匮乏进入了信息过载(Overload)的时代,推荐系统的任务就是联系用户和信息,一方面帮助用户发现有价值的信息,另一方面把信息展现在感兴趣的用户面前。二、什么是好的推荐系统?一个完整的推荐系统包括三部分用户(用淘宝的人),提供推荐系统的网站(淘宝),物品提供者(淘宝店家)。好的推荐系统设计,能够让推荐系统本身收集到高质量的用户反...

2019-11-05 09:09:33 323

空空如也

空空如也

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

TA关注的人

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