自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 每日一题算法:2020年6月30日 用两个栈实现队列 CQueue

2020年6月30日 用两个栈实现队列 CQueue默认格式:class CQueue { public CQueue() { } public void appendTail(int value) { } public int deleteHead() { }}/** * Your CQueue object will be instantiated and called as such: * CQueue obj

2020-06-30 21:21:46 21

原创 每日一题算法:2020年6月29日 数组中的第K个最大元素 findKthLargest

2020年6月29日 数组中的第K个最大元素 findKthLargest默认格式:class Solution { public int findKthLargest(int[] nums, int k) { }}解题思路:这不就是直接排序吗?那用这方法不就等于在用暴力算法吗?所以作为一道中等难度的题目,必定有它巧妙的地方存在。目前想到能够实现的最好的方法。先对前k项进行一次冒泡排序,找到最小的元素就是第k大的元素。一个新元素出现,先判断是否比第k个元素大,如果比第k

2020-06-29 13:56:08 61

原创 每日一题算法:2020年6月28日 长度最小的子数组 minSubArrayLen

2020年6月28日 长度最小的子数组 minSubArrayLen默认格式:class Solution { public int minSubArrayLen(int s, int[] nums) { }}解题思路:看完题目,四个字,滑动窗口,用两个指针表示头和尾部,如果内部的和比S大,那么向右移动头部,让和变小。如果和小于S,那么向右移动尾部,让和变大。直到尾部到达末尾并且头部的和小于S。今天时间来不及,所以写的粗糙了一些,可以做更多优化的。public

2020-06-28 21:39:20 47

原创 每日一题算法:2020年6月27日 缺失的第一个正数 firstMissingPositive

2020年6月27日 缺失的第一个正数 firstMissingPositive默认格式:class Solution { public int firstMissingPositive(int[] nums) { }}解题思路:如果不考虑限制条件,能够直接先排序然后寻找从1开始第一个没有出现的值,那个值就是最小没有出现的正整数。这样的时间复杂度是O(nlogn)。如果要控制时间复杂度,可以把每个大于0的值都存到哈希表中,然后遍历这个哈希表,寻找第一个没有出现的值,这样的

2020-06-27 19:32:22 42

原创 每日一题算法:2020年6月26日 移除重复节点 removeDuplicateNodes

2020年6月26日 移除重复节点 removeDuplicateNodes默认格式:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public ListNode removeDuplicateNodes(

2020-06-26 18:10:43 45

原创 每日一题算法:2020年6月25日 单词拆分 wordBreak

2020年6月25日 单词拆分 wordBreak默认格式:class Solution { public boolean wordBreak(String s, List<String> wordDict) { }}解题思路:之前做过类似的题目,这道题的难点就在于如何区分字符有部分内容重复的情况。比如下面这样dogsxxxxxxxx…,[dog,dogs,xxxx,xxxx,…] 当你读取到dog的时候,你无法确定应该选择dog或者dogs来作为拆分开的单词,

2020-06-25 22:00:00 694

原创 每日一题算法:2020年6月24日 最接近的三数之和 threeSumClosest

2020年6月24日 最接近的三数之和 threeSumClosest默认格式:class Solution { public int threeSumClosest(int[] nums, int target) { }}解题思路:看完题目觉得题目描述的不够详细,比如这三个数存在重复吗?同一个数字能重复使用吗?先对这几种情况进行测试,完善一下题目的设定可以看出,数字允许重复,但是不允许重复使用同一个数字,也就是说,数组中出现几次就能使用几次该数字。解题思路:暴力算法

2020-06-24 23:34:52 42

原创 每日一题算法:2020年6月23日 二进制求和 addBinary

2020年6月23日 二进制求和 addBinary默认格式:class Solution { public String addBinary(String a, String b) { }}解题思路:这道题非常简单,主要就是考察对于二进制理解,有两种将二进制变为十进制的方式与运算+位移和读取字符判断然后根据位数加上一个数。这道题需要求的是二进制的结果,所以不适合转为数字来计算,应该直接处理字符串。题目中给出了字符串的一些约定,所有我们可以直接通过判断得

2020-06-23 10:52:45 59

原创 每日一题算法:2020年6月22日 模式匹配 patternMatching

2020年6月22日 模式匹配 patternMatching默认格式:class Solution { public boolean patternMatching(String pattern, String value) { }}解题思路:首先,这两个字符串单独存在并没有任何意义,比如单独的字符串value是没办法区分出哪个属于a哪个属于b,可以认为整个value就是一个a或者b,所以我们要先借助pattern得到a,b对应的字符的长度。那么问题就是如何计算这个长度

2020-06-22 21:23:22 43

原创 每日一题算法:2020年6月21日 二叉树中的最大路径和 maxPathSum

2020年6月21日 二叉树中的最大路径和 maxPathSum默认格式:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public int maxPathS

2020-06-21 09:38:39 78

原创 每日一题算法: 2020年6月20日 正则表达式匹配 isMatch(没做出来)

2020年6月20日 正则表达式匹配 isMatch默认格式:class Solution { public boolean isMatch(String s, String p) { }}解题思路:这道题看起来不难,看完题目之后有的想法就是通过逻辑来循环判断是否符合,比如:s=mississippip = mis*is*p*.字符的话直接比较,相等继续,不相等的话直接返回false然后是一个*,*的话长度不能确定,所以我们要先确定他的长度,如何确定他的长度,我们这里

2020-06-20 22:38:41 72

原创 每日一题算法:2020年6月19日 验证回文串 isPalindrome

2020年6月19日 验证回文串 isPalindrome默认格式:class Solution { public boolean isPalindrome(String s) { }}解题思路:这道题也没啥复杂的,也想不到什么取巧的。一般来说这种回文有两种解决思路,用栈,根据字符串的长度n入栈n/2个元素。但是在这道题中不太适用,因为会有标点符号来干扰长度,所以这里使用另一种双指针的算法,从头部和尾部向中间开始收缩,直到首尾坐标相等。奇葩的错误:本来挺简单的一道题

2020-06-19 19:59:47 53

原创 每日一题算法:2020年6月18日 从先序遍历还原二叉树 recoverFromPreorder

2020年6月18日 从先序遍历还原二叉树 recoverFromPreorder默认格式:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public Tree

2020-06-18 19:56:09 30

原创 每日一题算法:2020年6月17日 最佳观光组合 maxScoreSightseeingPair

2020年6月17日 最佳观光组合 maxScoreSightseeingPair默认格式:class Solution { public int maxScoreSightseeingPair(int[] A) { }}解题思路:没有解题思路之前,暴力算法先解决了一下。这道题的意思,找到两个点,他们的值相加并且下标相减得到一个数值,计算这个数值的最大值。 public int maxScoreSightseeingPair(int[] A) {

2020-06-17 20:58:25 76

原创 每日一题算法:2020年6月16日 二叉树的序列化与反序列化 Codec

2020年6月16日 二叉树的序列化与反序列化 Codec默认格式:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Codec { // Encodes a tree

2020-06-16 19:48:17 38

原创 每日一题算法:2020年6月15日 最长公共前缀 longestCommonPrefix

2020年6月15日 最长公共前缀 longestCommonPrefix默认格式:class Solution { public String longestCommonPrefix(String[] strs) { }}解题思路:这道题应该很简单,我的想法是通过一个下标来决定公前缀的位置,因为是公前缀,所以数组的第一个元素肯定拥有共前缀的所有字符,我们可以把第一个字符串元素当做共前缀,然后对第二个元素进行循环,直到第n个字符不相等为止,记下新的前缀下标位置,以此类推。

2020-06-15 15:47:32 32

原创 2020年6月14日 转变数组后最接近目标值的数组和 findBestValue(超越官方)

2020年6月14日 转变数组后最接近目标值的数组和 findBestValue默认格式:class Solution { public int findBestValue(int[] arr, int target) { }}解题思路:先将数组排序,从小到大排序,设数组长度为n,计算前m项的和以及第m项乘以(n-m)和target的差距。公式:T1+T2+…Tm-1+Tm*(n-m)-target不难看出这是一个这是一个凹型的曲线,一开始比target要小的时候得到的是

2020-06-14 23:15:44 28

原创 每日一题算法:2020年6月13日 09:15:45 爬楼梯 climbStairs

2020年6月13日 09:15:45 爬楼梯 climbStairs默认格式:class Solution { public int climbStairs(int n) { }}解题思路:1,找通式这个应该能够找到通式才对。1:1种2:2种3:3种4:5种5:8种6:13种7:21种。。。找不到通式2,递归这么简单一道题要用递归真的很蠢诶。递归的思想,给一个当前数,和一个终点数,然后进行两次递归,第一次是+1,第二次是+2.当当前值是结果值时,方法

2020-06-13 11:21:58 54

原创 每日一题算法:2020年6月12日 09:01:38 三数之和 threeSum

2020年6月12日 09:01:38 三数之和 threeSum默认格式:class Solution { public List<List<Integer>> threeSum(int[] nums) { }}解题思路:这种在长的数组中找到子数组的题目,一般有两种解题方式,双指针和动态规划。这道题的暴力算法也不是很简单,题目有要求不能有重复的集合。这里需要一个模式识别的思想,虽然模式识别听起来很高大上,但是这不是我们现在讨论的问题,模式识别最基

2020-06-12 11:22:08 45

原创 每日一题算法:2020年6月11日每日温度dailyTemperatures

2020年6月11日 08:46:59 每日温度 dailyTemperatures默认格式:class Solution { public int[] dailyTemperatures(int[] T) { }}解题思路;1,暴力,遍历数组,对每个位置的元素进行循环查看后1-n项是否会大于当天的温度。暴力算法做起来还是非常简单粗暴的。public int[] dailyTemperatures(int[] T) { //获取每一天的温度值 for(i

2020-06-11 15:25:48 53

原创 每日一题算法:标题2020年6月10日 16:45:12 回文数 isPalindrome

标题2020年6月10日 16:45:12 回文数 isPalindrome默认格式:class Solution { public boolean isPalindrome(int x) { }}解题思路:通过循环余的方式将整形转变为数组,然后对字符串进行头尾双指针操作判断是否是同一个字符 public boolean isPalindrome(int x) { if (x<0) return false;

2020-06-10 18:43:29 41

原创 每日一题算法: 2020年6月9日 18:54:01把数字翻译成字符串 translateNum(递归)

标题2020年6月9日 18:54:01把数字翻译成字符串 translateNum默认格式:class Solution { public int translateNum(int num) { }}解题思路:递归,看完这道题就觉得应该用递归,先将数字转变为字符串,然后读取一个字符,如果是1,或者2,则判断下一个字符是否符合要求,如果当前字符为起点只有一种可能比如8为第一个字符,9为第一个字符的情况,则直接让可能数不变,并且删除该字符,将剩下的字符进行递归。如果是存在两种

2020-06-09 19:42:15 50

原创 每日一题算法:2020年6月8日 等式方程的可满足性 equationsPossible

2020年6月8日 等式方程的可满足性 equationsPossible默认格式;class Solution { public boolean equationsPossible(String[] equations) { }}解题思路:这道题,感觉就是题目比较难理解,题目的意思是,在这个数组中不存在矛盾的等式关系,比如a==b,b==c,但是c!=a,这就存在一个矛盾,这种情况输出false。这题的关键点在于!=,只有!=才会产生矛盾,所以我的想法是,使用图,把数组转

2020-06-08 20:04:56 51

原创 每日一题算法:2020年6月7日 单词接龙2 findLadders

2020年6月7日 单词接龙2 findLadders默认格式:class Solution { public List<List<String>> findLadders(String beginWord, String endWord, List<String> wordList) { }}解题思路:其实看到这道题的时候稍微思考一会就能够发现,这道题其实就是考验我们使用拓扑数据结构的能力拓扑结构算法需要的特点是什么?是一个有向无环图,

2020-06-07 22:14:32 43

原创 每日一题算法:2020年6月6日 最常连续序列longestConsecutive

2020年6月6日 最常连续序列longestConsecutive默认格式:class Solution { public int longestConsecutive(int[] nums) { }}解题思路:暴力破解:当遇到问题的第一时间,先找到暴力破解该如何写。先排序,再迭代。先把数组通过排序算法变成有序的数组,然后在进行迭代的方式来判断最常的连续序列。那么就要说一说常用的几种排序算法了。这也是面试经常考的内容1:冒泡排序主体思路:从头开始把每一个元素和后面

2020-06-06 17:00:43 45

原创 每日一题算法:2020年6月5日 顺时针打印矩阵 spiralOrder

2020年6月5日 顺时针打印矩阵 spiralOrderclass Solution { public int[] spiralOrder(int[][] matrix) { }}解题思路:这种矩阵的操作主要是要有好的空间想象能力,我有马上就有两种想法。1,控制条件进行for循环2,递归但是实际上用任何一种方式都是需要循环每一个元素,但是又不能使用数组复制的方式来减少循环读取元素的过程,所以貌似没有什么好的办法来节省时间复杂度,那就直接循环吧。算法部分:算法不算复杂

2020-06-05 23:04:18 61

原创 每日一题算法:2020年6月4日除自身以外数组的乘积productExceptSelf

2020年6月4日除自身以外数组的乘积productExceptSelf默认格式:class Solution { public int[] productExceptSelf(int[] nums) { }}解题思路:1,首先,不能用除法,哈哈,我笑了,对我们程序员来说不能用除法算什么问题,你不让用除法那我就右移啊,除2我就右移一位,除三我就。。。学习了一下之后,发现用代码实现除法是非常复杂的,没关系,我们可以用循环加减法来计算次数。。。算了,还是想别的办法吧。2,第二

2020-06-04 21:16:13 53

原创 每日一题算法:2020年6月3日 新21点new21Game(没做出来)

2020年6月3日 新21点new21Game默认格式:class Solution { public double new21Game(int N, int K, int W) { }}解题思路:按照我的想法,看完题目的时候我觉得不是找一个公式直接带入就可以实现了吗?三个变量K,N,W肯定存在能够推出概率公式啊。所以我开始理解题目:1,他并不在乎你前面抽取了多少次,只是在乎你是超过k这个值的时候的数值,所以我们需要想一想,在出现超过K的那一次之前,分数可能是多少。分

2020-06-03 21:41:23 131

原创 每日一题算法:2020年6月2日 面试题64. 求1+2+…+n sumNums

2020年6月2日 面试题64. 求1+2+…+n sumNumsclass Solution { public int sumNums(int n) { }}解题思路:WTF,这个题目不按套路出牌,感觉像是数学竞赛题一样,不能用乘除法,那么我只能用加减法和逻辑运算。首先,这个公式我们肯定都知道,首项乘末项乘以项数除以二。1+2+3+…+n=(1+n)(n)/2我们把它分解开(1+n)*n这里有一个乘法,乘法用逻辑运算怎么做,这个有些复杂,慢慢说首先我们转变思想,十

2020-06-02 15:46:18 413

原创 每日一题算法:2020年6月1日拥有最多糖果的孩子kidsWithCandies

2020年6月1日拥有最多糖果的孩子kidsWithCandies默认格式;class Solution { public List<Boolean> kidsWithCandies(int[] candies, int extraCandies) { }}解题思路:暴力算法:遍历一遍数组,找到目前最大的孩子拥有的糖果数,然后再遍历一遍数组,记录下每个孩子的糖果数加上额外糖果和原本的最大值进行比较。时间复杂度O(N)空间复杂度O(N)没想出其他的做法,因为

2020-06-01 09:04:37 61

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