自定义博客皮肤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)
  • 收藏
  • 关注

原创 剑指offer:和为s的连续正数序列

leetcode官方挺多解法的,比较直观的是暴力解法,一开始不知道list里面能装数组int[]这样,浪费了很多时间在转换上面,下面是看了题解之后写的代码:class Solution { public int[][] findContinuousSequence(int target) { if(target<3) return new int[0][0]; int n=1; List<int[]> resList=new Li.

2021-07-27 23:29:57 119

原创 剑指offer——连续子数组的最大和

暴力搜索的方法时间复杂度为O(n^2),采用动态规划,思路:dp[i]为以nums[i]结尾的子数组的最大和,若dp[i-1]小于0,则dp[i]+dp[i-1]反而减小,故当dp[i-1]小于0时,dp[i]=nums[i],总体代码如下:class Solution { public int maxSubArray(int[] nums) { int maxVal=nums[0]; for(int i=1;i<nums.length;i++){

2021-05-12 15:10:27 147 1

原创 剑指offer——包含min函数的栈

思路:使用两个栈,栈A,栈B,栈A用于存储正常的值,栈B存储最小的元素,插入时,栈A直接插入元素到栈顶,栈B先判断是否为空,空的话直接插入,若插入元素小于栈顶元素,也同样插入。弹出时若弹出的元素与栈B的栈顶元素相同,则栈B也弹出。具体代码如下:class MinStack { Stack<Integer> A; Stack<Integer> B; /** initialize your data structure here. */ public

2021-05-11 21:15:01 108

原创 leetcode每日一题——解码异或后的排列

先了解:若x^y=z,则则有x=y^z,于是只需要知道perm的第一个元素值,就可通过循环res[i]=res[i-1]^encoded[i-1]得到答案,要知道perm的第一个元素,可将perm元素看作[A,B,C,D,E],encoded元素看作[AB,BC,CD,DE],可通过ABCDE异或BCDE得到元素A的值,于是总代码如下:class Solution { public int[] decode(int[] encoded) { int n=encoded.leng

2021-05-11 16:59:03 116

原创 剑指offer——把数字翻译成字符串

具体思路:动态规划,类似于青蛙跳台阶,x1,x2,x3…xi-2,xi-1,xi,假设到xi-2的翻译数量为dp[i-2],到xi-1的翻译数量为dp[i-1],则若x1与xi-1能合并,有dp[i]=dp[i-1]+dp[i-2],否则dp[i]=dp[i-1],故具体Java代码如下:class Solution { public int translateNum(int num) { String numStr=String.valueOf(num); in

2021-04-27 22:02:49 74

原创 剑指Offer——把数组排成最小的数

主要思路:设数组中任意字符串为x与y,则有:若x+y>y+x,则x“大于”y,反之,若y+x>x+y,则y“大于”x,例如字符串"10"与"2",“10”+“2”=“102”,“2”+“10”=“210”,由于102字典序小于210(String.compareTo()方法比较字符串的大小,ASCⅡ码),则"2"大于"10"拼接字符串时,"2"在"10"的后面,故大体思路为:使用快速排序将字符串从小到大排好后拼接,拼接得到的即为最小的字符串,Java代码如下:class Solution

2021-04-27 20:35:23 162 1

原创 剑指offer——二叉搜索树与双向链表

看到题目就感觉要用中序遍历,因为二叉搜索树中序遍历序列是从小到大的有序序列,但是不晓得怎么样才能在遍历到某个结点的时候把它的left指向前驱节点,right指向后继结点,看了大佬题解才知道,可以引入两个Node引用pre和head,分别用于记录前驱节点值和头节点值,每次遍历到某一个结点的时候,把这个结点值left指向pre,然后pre的right指向当前结点,这样就做到了当前结点的left指向前驱节点,上一个结点的right指向当前结点,具体Java代码如下:/*// Definition for a

2021-04-09 21:18:12 118 1

原创 剑指Offer——复杂链表的复制

转了C++,指针之前学的全忘了,唉~大概思路:用map存储val一一与head链表对应的结点的地址,之后再利用中间值遍历原链表,通过原链表结点的地址从map获取到复制结点的指针,再通过该指针设置各个复制结点的next和random指向,具体C++代码如下:/*// Definition for a Node.class Node {public: int val; Node* next; Node* random; Node(int _val) {

2021-04-06 22:17:40 69

原创 剑指offer——二叉搜索树的后序遍历序列

思路:根左边的结点全部小于根,根右边的结点全部大于根,而树的根为后续遍历序列的最后一项,则设置指针i,j分别指向第一项,最后一项,指针i不断后移直到指向的值不再小于根,此时0到i-1即为左子树,m=i-1,i继续后移直到指向的值不再大于根,此时m+1到i-1即为右子树的值,合法情况下必然有i==j,之后再分别检查左右子树即可,C++代码如下:class Solution {public: bool verifyPostorder(vector<int>& postorder)

2021-04-04 12:26:04 62

原创 剑指offer——层序遍历+双端队列

层序遍历的变式,用双端队列来实现偶数行从左到右,奇数行从右到左(索引从0开始),代码如下:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public List&lt

2021-03-29 11:09:15 87

原创 剑指offer——栈的压入、弹出序列

用一个辅助栈来装push的序列,每装一个元素则循环查看pop序列当前元素是否与栈顶的元素相等,相等的话则看pop序列下一个元素是否与栈顶元素相等,leetcode大佬的代码:class Solution { public boolean validateStackSequences(int[] pushed, int[] popped) { Stack<Integer> pushStack=new Stack<Integer>(); int

2021-03-29 09:38:33 55

原创 剑指offer——快速幂

快速幂,一开始用普通的循环来算,O(n)都超时了,然后还有就是注意int型的范围,直接取反的话可能会越界,发生意想不到的错误,这题的测试数据就会考察到这一点,int类型范围在[−2147483648,2147483647],所以取反的话还是用long好一点,比如算n的m次幂时,给的m为int型,则long m1=m;之后用m1进行操作,则防止越界。快速幂的具体思路可以去剑指offer查看高赞题解,大概思路就是:求n的m次幂时,将m看成二进制数据,比如算5的8次幂,将8看成01+02+14,则结果为5的01次

2021-03-26 21:09:58 150

原创 剑指Offer:矩阵中的路径

矩阵搜索题目,按照题解说的,可用DFS(深度优先搜索)和剪枝解决,首先在矩阵中找到和路径开头字符一样的位置i,j,之后递归,看上下左右深度搜索是否能找到满足的路径,具体代码如下:class Solution { String words; public boolean exist(char[][] board, String word) { words=word; for(int i=0;i<board.length;i++){

2021-03-22 22:46:12 78

原创 剑指Offer 用两个栈模拟队列插入/删除操作

思路:用两个栈stack1,stack2,插入的时候全部装进stack1中,到了要删除的时候,先看stack2中有没有元素,有的话直接弹出,没有的话再判断stack1有没有元素,也没有则说明队列为空,返回-1,否则把stack1中存的队列元素pop到stack2中,如此一来,stack2中的出栈顺序就符合队列的出队顺序了,代码如下:class CQueue { private Stack<Integer> stack1,stack2; public CQueue() {

2021-03-22 20:34:25 223

原创 剑指offer:重建二叉树(根据前序遍历和中序遍历结果)

根据前序遍历和中序遍历的结果构造二叉树,思路(leetcode上有图文详解):由前序遍历结果得到根节点的数值,再在中序遍历结果中查找该数值的位置,该位置左边的为这个根节点的左子树,右边的为右子树,故而可得这个根节点左右子树的长度,再到前序遍历中,由这个长度可将前序遍历结果分成三部分,分别是根节点、左子树、右子树,左子树根节点和右子树根节点皆为该子树第一个元素,所以可得到根、左、右结点,再对左右子树进行相同操作,最终递归得出完整的二叉树。代码如下:/** * Definition for a binar

2021-03-22 10:32:45 90

原创 树的子结构

输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。例如:给定的树 A: 3/ \4 5/ 1 2给定的树 B:4/1返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。示例 1:输入:A = [1,2,3], B = [3,1]输出:false示例 2:输入:A = [3,4,5,1,2], B = [4,1]输出:true限制:0 <= 节点个数

2020-09-22 15:56:26 78

原创 具有所有最深结点的最小子树

给定一个根为 root 的二叉树,每个结点的深度是它到根的最短距离。如果一个结点在整个树的任意结点之间具有最大的深度,则该结点是最深的。一个结点的子树是该结点加上它的所有后代的集合。返回能满足“以该结点为根的子树中包含所有最深的结点”这一条件的具有最大深度的结点。示例:输入:[3,5,1,6,2,0,8,null,null,7,4]输出:[2,7,4]解释:我们返回值为 2 的结点,在图中用黄色标记。在图中用蓝色标记的是树的最深的结点。输入 “[3, 5, 1, 6, 2, 0, 8,

2020-09-20 16:34:49 445

原创 八皇后问题

刚学回溯算法的时候就听说了八皇后问题,一直没有机会写,今天动手写了写,一开始想着用二维数组,一个个遍历,后来改了自己的二维数组的方法改了大半个晚上还是不行。网上找了找,发现一个很简洁的方法,大概思路就是用一个数组装下每一行的皇后放置的列下标,之后判断是否和前面的皇后位置有冲突,有冲突的话就回溯,没冲突则继续到下一行(层),数组长度达到8时,计数器加一,并且回到上一层,之后回溯,继续循环,尝试该行的下一列是否能够放置皇后,以此类推。下面贴代码:# include<iostream># in

2020-09-17 23:37:10 74

原创 有效的括号

给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/valid-parentheses著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。有效的括号,应该算比较经典的题了吧我觉得,结果大三上学期才刷到这个题,好菜阿,而且

2020-09-12 10:40:25 68

原创 二叉树的锯齿形层序遍历

给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回锯齿形层次遍历如下:[[3],[20,9],[15,7]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal著作权归领扣网

2020-09-11 10:44:27 383

原创 二叉树——好叶子节点对个数,求叶子节点之间的最短距离

给你二叉树的根节点 root 和一个整数 distance 。如果二叉树中两个 叶 节点之间的 最短路径长度 小于或者等于 distance ,那它们就可以构成一组 好叶子节点对 。返回树中 好叶子节点对的数量 。示例 1:输入:root = [1,2,3,null,4], distance = 3输出:1解释:树的叶节点是 3 和 4 ,它们之间的最短路径的长度是 3 。这是唯一的好叶子节点对。示例 2:输入:root = [1,2,3,4,5,6,7], distance = 3输出:

2020-09-10 16:45:33 750

原创 2020-09-08

给定一棵二叉树,设计一个算法,创建含有某一深度上所有节点的链表(比如,若一棵树的深度为 D,则会创建出 D 个链表)。返回一个包含所有深度的链表的数组。示例:输入:[1,2,3,4,5,null,7,8] 1 / \ 2 3 / \ \ 4 5 7/8输出:[[1],[2,3],[4,5,7],[8]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/list-of-depth-lcci著作

2020-09-08 16:08:48 70

原创 合法二叉搜索树——中序遍历判断结果是否为递增数组

实现一个函数,检查一棵二叉树是否为二叉搜索树。示例 1:输入:2/ 1 3输出: true示例 2:输入:5/ 1 4/ 3 6输出: false解释: 输入为: [5,1,4,null,null,3,6]。根节点的值为 5 ,但是其右子节点值为 4 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/legal-binary-search-tree-lcci一开始想了好久不知道用啥方法(大二的数据结构白学

2020-05-21 22:11:57 524

原创 关于Tensorflow的Session和global_variables_initializer()方法过时的问题

StackOverFlow中查资料看到Tensorflow2.0中已经删除掉了Session,还要使用的话得这样用:import tensorflow as tftf.compat.v1.disable_eager_execution()hello=tf.constant('hello world!')sess=tf.compat.v1.Session()print(sess.run(hello))要用global_variables_initializer()方法的话也是要在前面加上tf.c

2020-05-11 18:11:32 667

原创 字母大小写全排列——无需打乱顺序进行的回溯算法

leetcode:字母大小写全排列给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串。返回所有可能得到的字符串集合。示例:输入: S = “a1b2”输出: [“a1b2”, “a1B2”, “A1b2”, “A1B2”]输入: S = “3z4”输出: [“3z4”, “3Z4”]输入: S = “12345”输出: [“12345”]注意:S...

2020-05-07 22:31:23 613

原创 优美的排列——加深对回溯算法层数的理解

leetcode:优美的排列假设有从 1 到 N 的 N 个整数,如果从这 N 个数字中成功构造出一个数组,使得数组的第 i 位 (1 <= i <= N) 满足如下两个条件中的一个,我们就称这个数组为一个优美的排列。条件:第 i 位的数字能被 i 整除i 能被第 i 位上的数字整除现在给定一个整数 N,请问可以构造多少个优美的排列?示例1:输入: 2输出: 2解释:...

2020-05-07 21:20:45 204

原创 C++实现全排列——初识回溯算法

给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/permutations初识回溯算法,代码如下:#include<iost...

2020-04-27 23:11:58 894

原创 两数相加——C++中链表的相加

两数之和:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 ...

2020-04-23 23:06:30 460

原创 C语言十六进制转换为八进制

问题描述  给定n个十六进制正整数,输出它们对应的八进制数。输入格式  输入的第一行为一个正整数n (1&lt;=n&lt;=10)。  接下来n行,每行一个由09、大写字母AF组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。输出格式  输出n行,每行为输入对应的八进制正整数。【注意】  输入的十六进制数不会有前导0,比如012A。  输出的八进制...

2019-01-31 23:16:09 4987 3

空空如也

空空如也

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

TA关注的人

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