- 博客(19)
- 收藏
- 关注
转载 LeetCode 腾讯精选50题--二叉树中的最大路径和
二叉树中的最大路径和 题目描述 给定一个非空二叉树,返回器最大路径和,路径指一条从任意节点出发,到达任意节点的序列,该路径至少包含一个节点,且不一定经过根节点 解题思路 树这一类数据结构我还不是很熟悉,需要更进一步的学习,以下思路来自于题解: 根据题意可知,一条最大的路径存在两种可能: 存在一个节点,一条最大路径等于该节点的左右子树中路径较大的一颗子树,加上它自己后向其父节点回溯 存在...
2019-08-13 20:58:00
141
转载 LeetCode 腾讯精选50题--二叉树的最大深度
求二叉树的最大深度, 基本思路如下: 设定一个全局变量记录二叉树的深度,利用递归,没遍历一层都将临时深度变量+1,并在每一节点递归结束后判断深度大小。 具体代码如下: 1 package algorithm; 2 3 4 import basic.TreeNode; 5 6 public class MaxDepthOfTree { 7 ...
2019-08-12 19:45:00
149
转载 LeetCode 腾讯精选50题--2的幂
在二进制中,2的幂的数字用二进制表示时只会有一位表示为1,其余都为0,基于这个前提,可以有两种方案: 1. 做位移操作 2. 与数值取反并与原数值做与操作,判断是否与原来的数值相同 对于方案1,我的想法是对数值 n 先做一次右移的移位操作,然后在对右移后的数做左移操作,判断两次操作前后的数值是否相同,以下是代码: 1 public boolean isPowerOf...
2019-08-12 18:45:00
162
转载 LeetCode 腾讯精选50题--求众数
由于众数是指数组中相同元素的个数超过数组长度的一半,所以有两种思路,一. 先排序,后取排序后的数组的中间位置的值;二. 统计,设定一个变量统计相同元素出现的次数,遍历数组,若与选定的元素相同,统计变量加一,否则减一,如果统计变量减为0,则换下一个元素作为对比元素,这么做可行的原因是众数的数量超过数组一半的前提下,统计变量的累加次数是会大于减少次数的,这也就可以保证遍历完数组后统计变量值大...
2019-08-12 12:12:00
157
转载 LeetCode 腾讯精选50题--只出现一次数字
事先说明,如果不是评论区的大牛一语点破,我可能还会陷在死胡同里出不来,这道题其实很简单,利用了任何一个学过二进制的人都了解的定理,即: 1. 异或操作满足交换律 : a ^ b ^ c 等价于 a ^ c ^ b 2. 0与任何数的异或都是数字本身: 0 ^ n = n 3. 相同的两个数的异或结果为0: a ^ a =0 基于以上三个定理,病结合数组中相同元素只会出现两次...
2019-08-10 22:13:00
118
转载 LeetCode 腾讯精选50题--链表排序
解题思路:归并 先把链表拆开,分为两部分,一直拆到只剩一个元素后,进行合并,利用一个临时节点记录重排后的链表的起始位置 合并不难,困难点在于如何拆分链表,自己的大体思路是利用两个指针,一个一次移动两位,一个移动一位,当移动快的结束时,慢的指针指向的位置就是链表的中间位置, 将中间位置往后的进行递归切割,然后将中间位置的下一个指针指向空,即断开链表,再对左边的子链进行递归。 边界条...
2019-08-09 19:09:00
111
转载 LeetCode 腾讯精选50题--子集
根据题意,找到几何中的所有子集,说实话子集是没有什么头绪的,因为如果采用遍历的方法,稍有遗漏不说,代码的嵌套循环层数随着数组大小的增加而增加,想了很久没有头绪后就去看了看评论,然后就被点破了解题的关键:遍历数组时,让当前这一元素构成的集合,分别去加上之前找到的所有子集,由于第一次找到的子集一定有两个,一个为空,一个带有一个元素,那么用当前元素组成的集合分别加上之前的集合,一定会有一个集合...
2019-08-08 20:30:00
99
转载 LeetCode 腾讯精选50题-- 买卖股票的最佳时机 II
贪心算法: 具体的解题思路如下: II 的解题思路可以分为两部分, 1. 找到数组中差值较大的两个元素,计算差值。 2. 再步骤一最大的元素的之后,继续遍历,寻找差值最大的两个元素 可以得出的是,遍历指针是一直向着数组的尾部移动的,由于要取得局部的最大差值,这一局部子数组中的元素一定是递增的,所以先找到递增结束的位置,那就是递增位置的...
2019-08-07 18:15:00
109
转载 LeetCode 腾讯精选50题--合并K个排序链表
今天的题目稍微有点复杂了,因为是K个有序链表的合并,看到这道题后的大体思路是这样的: 1.首先先做到两个链表的合并,链表的合并我想到的是用递归操作, 2.其次是多个链表的合并,所以在第一步实现的基础上,我考虑每次选择两个链表进行合并,一个链表数组作为一个整体,那么就可以采用归并算法进行合并,利用两个指针分别指向当前的数组位置,不断切分直到指针指向一个位置,再返回,然后进行合并...
2019-08-06 19:43:00
93
转载 LeetCode 腾讯精选50题--数组中的第K个最大元素
好吧,不得不承认,书上看到的始终不是自己的,只有亲身时间过才会明白该怎么操作。 找数组中第K个最大元素,简而言之就是先排序,不论使用哪种算法,都需要先排序,确认位置,由于数组可以通过下标直接访问,所以我打算将数组按逆序排序,选择算法方面,一开始打算使用大顶堆的堆排序,可是想了下,快排的性能会更好一点,所以就采用快排了 具体思路如下: 由于一开始为了让空间复杂度为O(1),所以踩...
2019-08-05 20:33:00
161
转载 LeetCode 腾讯精选50题--有效的括号
根据题意,第一反应就是使用栈,左右括号相匹配,则将左括号出栈,否则将左括号入栈。 这里我用数组配合“指针”模拟栈的入栈与出栈操作,初始时指针位置指向0,表示空栈,凡遇上左括号则直接入栈,若遇上有括号,对比数组尾部的括号与右括号是否匹配,若不匹配直接返回false;否则将指针数值减1,若对比结束后,指针数值为0,则返回true,否则为false class Solution { ...
2019-08-04 13:39:00
100
转载 LeetCode 腾讯精选50题--最小栈
题目很简单,实现一个最小栈,能够以线形的时间获取栈中元素的最小值 自己的思路如下: 利用数组,以及两个变量, last用于记录栈顶元素的位置,min用于记录栈中元素的最小值; 每一次push,都比较min与x的大小,其次,push操作执行时若数组已满,这需要进行扩容,将数组长度扩大为原来的两倍,并进行数组的迁移。每一次 pop 时,若删除的是最小元素,则遍历数组重新找到最小的元素,...
2019-08-03 19:58:00
148
转载 杂谈
忙了快半个多月了,今天终于得以早点回家,休息一下。可回来的早,看了会书发现在自己住的地方学习的效率是真的不高,看了差不多一小时的书,就打开电脑捣鼓起来,结果发现没啥兴趣,果然自己就是有些贱。。。。。。想来毕业后工作了快一年了,进步是有的,自己也能看得到,每天争取早点到公司,能多出一个小时左右看书的时间,晚上要是不加班干活的话,有效的学习时间大概也有一个多小时,加起来刚刚够张哥所说的每...
2019-03-18 23:07:00
119
转载 设计模式(一)适配器模式与外观模式
这两天刚把适配器模式与外观模式学习了一遍,记录一下自己在学习中的思考。 适配器设计模式与外观设计模式所涉及到的一个设计原则: 最少知识原则:不要让太多的类耦合在一起,以免当修改了某一部分后,会影响到其他部分。 对于任何对象而言,在该对象的方法内,其中最少所指的范围: 1. 该对象本身; 2.被当作方法的参数传递进来的对象 ------...
2019-03-17 14:29:00
129
转载 LeetCode_406. Queue Reconstruction by Height解题思路
题目如下: Suppose you have a random list of people standing in a queue. Each person is described by a pair of integers (h, k), where h is the height of the person and k is the number of people in ...
2019-01-17 20:34:00
172
转载 Spring中关于AOP的实践之AspectJ方式实现通知
(本文中如有不当之处,恳请批评指正) AspectJ方式的简化了通知的出现复杂度。但是对配置文件的操作复杂度有了一定的提升 一. 配置通知 1 package com.xkx.adviceDemo; 2 3 import org.aspectj.lang.ProceedingJoinPoint; 4 5 public class TotalAdvice {...
2018-10-13 18:35:00
123
转载 Spring中关于AOP的实践之Scheme方式实现通知
(刚开始写东西,不足之处还请批评指正) 关于AOP的通知编写方式有两种,使用Schema-baesd或者使用AspectJ方式,本篇主要介绍Schema-baesd方式的代码实现。 (注:代码中没有添加任何业务逻辑,只是单纯的输出语句,若读者大人有什么业务逻辑希望本人实现作为参考的可以给我留言) 一. 实现通知方法 1.前置通知需要实现:MethodBeforeAdvice接口,...
2018-10-13 17:51:00
84
转载 Spring中关于AOP的实践之概念
一.什么是AOP AOP:也称作面向切面编程 在分享几个概念执行我想先举个栗子(可能例子举得并不是特别恰当): 1.假如路人A走在大街上,被一群坏人绑架了; 2.警察叔叔接到报警迅速展开行动:收集情报,人员组织,准备装备。。。 3.警察和坏人打了一架,将人质解救出来(在这里我假设人质A受了伤) 4.警察叔叔将人质送往医院治疗 5.警察举行新闻发布会,宣布人质解救成功。 具...
2018-10-13 17:15:00
102
转载 反转二叉树的实现
目前自己只能写写LeetCode上简单的算法题,而且还写得不好,有时候结果与设想偏差很大,需要多加努力,认真学习了! 今天完成的一道算法题叫做二叉树翻转,第一个念头竟然是想用栈和队列实现,但结果有了很大的出入。因为队列是不允许放入的值为null,这在设计的时候没有想到。之后采用了递归,将原树的值赋给新树,当然值是要对调,就如下图所示,但是结果却是原树遍历到了最后一个节点后再也回溯不到根...
2018-09-27 21:23:00
417
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人