自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Meiko记录

本博记录自己的过往积累和学习记录,所有内容并不是教科书式的解释,只是结合 我自己的情况来编写,若有不妥,请多见谅

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

原创 NC147 主持人调度

描述有 n个活动即将举办,每个活动都有开始时间与活动的结束时间,第个活动的开始时间是start_istarti​,第个活动的结束时间是end_iendi​,举办某个活动就需要为该活动准备一个活动主持人。一位活动主持人在同一时间只能参与一个活动。并且活动主持人需要全程参与活动,换句话说,一个主持人参与了第个活动,那么该主持人在(start_i,end_i)(starti​,endi​)这个时间段不能参与其他任何活动。求为了成功举办这个活动,最少需要多少名主持人。示例...

2021-09-18 10:29:18 343

原创 NC120 二进制中1的个数

描述输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。示例1输入:10复制返回值:2如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。举个例子:一个二进制数1100,从右边数起第三位是处于最右边的一个1。减去1后,第三位变成0,它后面的两位0变成了1,而前面的1保持不变,因此得到的结果是1011.我们发现

2021-09-18 10:29:05 113

原创 NC25 删除有序链表中重复的元素-I

描述删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次例如:给出的链表为1\to1\to21→1→2,返回1 \to 21→2.给出的链表为1\to1\to 2 \to 3 \to 31→1→2→3→3,返回1\to 2 \to 31→2→3.示例1输入:{1,1,2}复制返回值:{1,2}public ListNode deleteDuplicates (ListNode head) { if(head==nul

2021-09-18 10:28:55 96

原创 NC136 输出二叉树的右视图

描述请根据二叉树的前序遍历,中序遍历恢复二叉树,并打印出二叉树的右视图示例1输入:[1,2,4,5,3],[4,2,5,1,3]复制返回值:[1,3,5]复制备注:二叉树每个节点的值在区间[1,10000]内,且保证每个节点的值互不相同。对于任意一颗树而言,前序遍历的形式总是[ 根节点, [左子树的前序遍历结果], [右子树的前序遍历结果] ]即根节点总是前序遍历中的第一个节点。而中序遍历的形式总是[ [左子树的中序遍历结果], 根节点, [右子树

2021-09-18 10:28:44 119

原创 NC57 反转数字

描述给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。你有注意到翻转后的整数可能溢出吗?因为给出的是32位整数,则其数值范围为[−2^{31}, 2^{31} − 1][−231,231−1]。翻转可能会导致溢出,如果反转后的结果会溢出就返回 0。示例1输入:12复制返回值:21复制示例2输入:-123复制返回值:-321复制示例3输入:10复制返回值:1复制示例4输入:1

2021-09-18 10:28:28 106

原创 NC108 最大正方形

描述给定一个由'0'和'1'组成的2维矩阵,返回该矩阵中最大的由'1'组成的正方形的面积示例1输入:[[1,0,1,0,0],[1,0,1,1,1],[1,1,1,1,1],[1,0,0,1,0]]复制返回值:4使用动态规划降低时间复杂度。我们用dp(i,j) 表示以 (i, j) 为右下角,且只包含 1 的正方形的边长最大值。如果能计算出所有 dp(i,j) 的值,那么其中的最大值即为矩阵中只包含 1 的正方形的边长最大值,其平方即为最大正方形的面积。对于每个位置 (

2021-09-18 10:28:14 166

原创 NC134 股票(无限次交易)

描述假定你知道 n天内的某只股票每一天价格的变动。你最多可以同时持有一只股票。但你可以无限次的交易(买进和卖出均无手续费)。请设计一个函数,计算你所能获得的最大收益。输入一个数组,数组长度为 n,数组中每一个元素为arr_iarri​代表当天股票的价格,示例1输入:[5,4,3,2,1]复制返回值:0复制说明:由于每天股票都在跌,因此不进行任何交易最优。最大收益为0。 示例2输入:[1,2,3,4,5]复制返回值:...

2021-09-17 18:36:08 279

原创 NC144 不相邻最大子序列和

描述给你一个数组,其长度为 n,在不同时选择位置相邻的两个数的基础上,求挑选出来的最大子序列的和(子序列可以为空)数据范围:1 \le n \le 10^51≤n≤105示例1输入:3,[1,2,3]复制返回值:4复制说明:有[],[1],[2],[3],[1,3] 4种选取方式其中[1,3]选取最优,答案为4 示例2输入:4,[4,2,3,5]复制返回值:9复制说明:其中[4,5]的选取方案是在满足不同时选取相邻位.

2021-09-17 18:15:15 201

原创 NC117 合并二叉树

描述已知两颗二叉树,将它们合并成一颗二叉树。合并规则是:都存在的结点,就将结点值加起来,否则空的位置就由另一个树的结点来代替。例如:两颗二叉树是:Tree 1 1 / \ 3 2 / 5 Tree 2 2 / \1 3 \ \ 4 7合并后的树为 3 / \ 4 5/ \ \5 4 7示例1输入:{1,3,2,5},{2,1,3,...

2021-09-17 11:47:41 134

原创 NC26 括号生成

描述给出n对括号,请编写一个函数来生成所有的由n对括号组成的合法组合。例如,给出n=3,解集为:"((()))", "(()())", "(())()","()()()","()(())",示例1输入:1复制返回值:["()"]复制示例2输入:2复制返回值:["(())","()()"]import java.util.ArrayList;public class Solution { /** * 题目:括号..

2021-09-17 11:22:04 227

原创 NC90 包含min函数的栈

描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数,并且调用 min函数、push函数 及 pop函数 的时间复杂度都是 O(1)push(value):将value压入栈中pop():弹出栈顶元素top():获取栈顶元素min():获取栈中最小元素示例:输入:["PSH-1","PSH2","MIN","TOP","POP","PSH1","TOP","MIN"]输出:-1,2,1,-1解析:"PSH-1"表示将-1压...

2021-09-17 11:16:13 77

原创 NC112 进制转换

描述给定一个十进制数 M ,以及需要转换的进制数 N 。将十进制数 M 转化为 N 进制数。当 N 大于 10 以后, 应在结果中使用大写字母表示大于 10 的一位,如 'A' 表示此位为 10 , 'B' 表示此位为 11 。若 M 为负数,应在结果中保留负号。示例1输入:7,2复制返回值:"111"复制备注:M是32位整数,2<=N<=16.除N取余,然后倒序排列,高位补零。public String solve (.

2021-09-17 11:07:02 70

原创 NC9 二叉树中是否存在节点和为指定值的路径

描述给定一个二叉树和一个值\ sumsum,判断是否有从根节点到叶子节点的节点值之和等于\ sumsum的路径,例如:给出如下的二叉树,\ sum=22sum=22,返回true,因为存在一条路径5\to 4\to 11\to 25→4→11→2的节点值之和为 22示例1输入:{1,2},0复制返回值:false复制示例2输入:{1,2},3复制返回值:true递归实现import java.util.*;/...

2021-09-17 10:34:56 141

原创 NC71 旋转数组的最小数字

描述有一个长度为N的升序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求它的最小值。提示:1 <= N<= 100000 <= rotateArray[i] <= 10000你可以使用O(logN)的时间复杂度通过该题吗?示例1输入:[3,4,5,1,2]复制返回值:1

2021-09-17 10:34:46 85

原创 NC106 三个数的最大乘积

描述给定一个长度为的无序数组,包含正数、负数和 0 ,请从中找出 3 个数,使得乘积最大,返回这个乘积。要求时间复杂度:,空间复杂度:。数据范围:3 \le n \le 2 * 10^53≤n≤2∗105-10^6 \le A[i] \le 10^6−106≤A[i]≤106示例1输入:[3,4,1,2]复制返回值:24复制1、如果数组中全是非负数,则排序后最大的三个数相乘即为最大乘积;如果全是非正数,则最大的三个数相乘同...

2021-09-17 10:33:20 154

原创 NC54 数组中相加和为0的三元组

描述给出一个有n个元素的数组S,S中是否有元素a,b,c满足a+b+c=0?找出数组S中所有满足条件的三元组。注意:三元组(a、b、c)中的元素必须按非降序排列。(即a≤b≤c) 解集中不能包含重复的三元组。例如,给定的数组 S = {-10 0 10 20 -10 -40},解集为(-10, -10, 20),(-10, 0, 10) 0 <= S.length <= 1000示例1输入:[0]复制返回值:[]复制示例2输入:[-2

2021-09-17 10:33:05 244

原创 NC2 重排链表

描述将给定的单链表\ LL:L_0→L_1→…→L_{n-1}→L_ nL0​→L1​→…→Ln−1​→Ln​重新排序为:L_0→L_n →L_1→L_{n-1}→L_2→L_{n-2}→…L0​→Ln​→L1​→Ln−1​→L2​→Ln−2​→…要求使用原地算法,不能只改变节点内部的值,需要对实际的节点进行交换。示例1输入:{1,2,3,4}复制返回值:{1,4,2,3}复制说明:给定head链表1->2->3->4, 重新排列为 1...

2021-09-16 19:15:38 190

原创 NC107 寻找峰值

描述山峰元素是指其值大于或等于左右相邻值的元素。给定一个输入数组nums,任意两个相邻元素值不相等,数组可能包含多个山峰。找到索引最大的那个山峰元素并返回其索引。假设nums[-1] = nums[n] = -∞。提示:1 <= 数组长度<= 10000 <= 数组元素的值 <= 1000示例1输入:[2,4,1,2,7,8,4]复制返回值:5复制 因为要求索引值最大的峰值,所以从末尾遍历数组,找到的第一...

2021-09-16 15:36:05 132

原创 NC30 数组中未出现的最小正整数

描述给定一个无序数组arr,找到数组中未出现的最小正整数例如arr = [-1, 2, 3, 4]。返回1arr = [1, 2, 3, 4]。返回5[要求]时间复杂度为O(n)O(n),空间复杂度为O(1)O(1)示例1输入:[-1,2,3,4]复制返回值:1先将数组排序,当排序后的数组的最后一个元素为负或为0即缺失的为1,定义一个目标min先定义为1,遍历数组,在遍历过程中将数组值与目标值比较是否相等,即min从最小正整数1开始增长 1

2021-09-16 15:35:55 258

原创 NC125 未排序数组中累加和为给定值的最长子数组长度

描述给定一个无序数组arr, 其中元素可正、可负、可0。给定一个整数k,求arr所有连续子数组中累加和为k的最长子数组长度。保证至少存在一个合法的子数组。示例1输入:[1,-2,1,1,1],0复制返回值:3假设s(i)是子数组arr[0…i]的累加和,那么s(j)就代表arr[0…j]的累加和,那么可求得arr[j+1…i]=s(i)-s(j)。流程:1.初始化变量sum=0,表示从arr[0]一直加到arr[i]的累加和。初始化变量len,表示累加到和为k的最长子

2021-09-16 15:35:46 354

原创 NC129 阶乘末尾0的数量

描述给定一个非负整数NN,返回N!N!结果的末尾为00的数量。N!N!是指自然数NN的阶乘,即:N!=1*2*3…(N-2)*(N-1)*NN!=1∗2∗3…(N−2)∗(N−1)∗N。特殊的,的阶乘是。复杂度要求:不大于O(\log n)O(logn)示例1输入:3复制返回值:0复制说明:3!=6 示例2输入:5复制返回值:1复制说明:5!=120 示例3输入:...

2021-09-16 15:35:33 210

原创 NC81 二叉搜索树的第k个结点

描述给定一棵二叉搜索树,请找出其中的第k小的TreeNode结点。示例1输入:{5,3,7,2,4,6,8},3复制返回值:4复制说明:按结点数值大小顺序第三小结点的值为4 非递归实现:二叉搜索树的第k个结点 中序遍历import java.util.Stack;public class Solution { TreeNode KthNode(TreeNode pRoot, int k) { if(pRoot ==

2021-09-16 15:34:31 119

原创 NC38 螺旋矩阵

描述给定一个m x n大小的矩阵(m行,n列),按螺旋的顺序返回矩阵中的所有元素。示例1输入:[[1,2,3],[4,5,6],[7,8,9]]复制返回值:[1,2,3,6,9,8,7,4,5]解题思路:按照从左到右、从上到下、从右到左、从下到上的顺序依此遍历。import java.util.*;public class Solution { public ArrayList<Integer> spiralOrder(int[][] matr

2021-09-16 15:18:36 87

原创 单调栈

描述给定一个长度为nn的可能含有重复值的数组arrarr,找到每一个ii位置左边和右边离ii位置最近且值比arr_iarri​小的位置。请设计算法,返回一个二维数组,表示所有位置相应的信息。位置信息包括:两个数字LL和RR,如果不存在,则值为 -1,下标从 0 开始。数据范围:1 \le n \le 10^51≤n≤105-10^9 \le arr[i] \le 10^9−109≤arr[i]≤109示例1输入:[3,4,1,5,6,2...

2021-09-16 15:16:44 87

原创 NC23 划分链表

双指针我们经常听过,但四指针还是比较少的,四指针顾名思义就是使用4个指针来解决。这题是让把节点值小于x的节点都放到前面,最简单的一种解决方式就是把原链表的节点分隔为两个链表,其中一个链表节点的值都是小于x的,另一个链表节点的值都是大于或等于x的,最后再把这两个链表合并即可。这里要使用四个指针,其中两个指向小的链表,两个指向大的链表,原理如下图所示public ListNode partition(ListNode head, int x) { //小链表的头 ListNod..

2021-09-16 14:44:42 176

原创 NC69 链表中倒数最后k个结点

描述输入一个长度为的链表,设链表中的元素的值为a_iai​,输出一个链表,该输出链表包含原链表中从倒数第k个结点至尾节点的全部节点。如果该链表长度小于k,请返回一个长度为 0 的链表。提示:0 \leq n \leq 10^50≤n≤1050 \leq a_i \leq 10^90≤ai​≤1090 \leq k \leq 10^90≤k≤109示例1输入:{1,2,3,4,5},3复制返回值:{3,4,5}复制示例2输入:{2},.

2021-09-16 14:21:38 443

原创 NC27 集合的所有子集

描述现在有一个没有重复元素的整数集合S,求S的所有子集注意:你给出的子集中的元素必须按升序排列给出的解集中不能出现重复的元素示例1输入:[1,2,3]复制返回值:[[],[1],[2],[3],[1,2],[1,3],[2,3],[1,2,3]]选择第i个元素:此时组合结果为=原来的组合 U 原来每一个组合加上元素i 的组合, U表示并集 。import java.util.*;public class Solution { ArrayList&l

2021-09-15 18:50:52 142

原创 NC142 最长重复子串

描述定义重复字符串是由两个相同的字符串首尾拼接而成,例如 abcabc便是长度为6的一个重复字符串,而则不存在重复字符串。给定一个字符串,请返回其最长重复子串的长度。若不存在任何重复字符子串,则返回 0 。数据范围:字符串长度不大于2 \times 10^42×104示例1输入:"ababc"复制返回值:4复制说明:abab为最长的重复字符子串,长度为4 示例2输入:"abcab"复制返回值:0复制...

2021-09-15 18:12:23 697

原创 NC101 缺失数字

描述从 0,1,2,...,n 这 n+1 个数中选择 n 个数,选择出的数字依然保持有序,找出这 n 个数中缺失的那个数,要求O(n) 或 O(log(n)) 并尽可能小。示例1输入:[0,1,2,3,4,5,7]复制返回值:6复制示例2输入:[0,2,3]复制返回值:11,位运算求解题中的意思就是从数字[0,n]之间的n+1个数字少了一个,而其他的数字都存在。如果我们把这个数组添加从0~n的n+1个元素,就变成了数组中只有一个数出.

2021-09-15 17:42:51 103

原创 NC73 数组中出现次数超过一半的数字

描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。你可以假设数组是非空的,并且给定的数组总是存在多数元素。1<=数组长度<=50000,0<=数组元素<=10000示例1输入:[1,2,3,2,2,2,5,4,2]复制返回值:2复制示例2输入:[3,3,3,3,2,2,2]复制返回值:3

2021-09-15 16:48:11 168

原创 NC113 验证IP地址

描述编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址IPv4 地址由十进制数和点来表示,每个地址包含4个十进制数,其范围为 0 - 255, 用(".")分割。比如,172.16.254.1;同时,IPv4 地址内的数不会以 0 开头。比如,地址 172.16.254.01 是不合法的。IPv6 地址由8组16进制的数字来表示,每组表示 16 比特。这些组数字通过 (":")分割。比如, 2001:0db8:85a3:0000:0000:8a2e:0370:7334 是一.

2021-09-15 16:35:35 177

原创 NC63 扑克牌顺子

描述现在有2副扑克牌,从扑克牌中随机五张扑克牌,我们需要来判断一下是不是顺子。有如下规则:1. A为1,J为11,Q为12,K为13,A不能视为142. 大、小王为 0,0可以看作任意牌3. 如果给出的五张牌能组成顺子(即这五张牌是连续的)就输出true,否则就输出false。例如:给出数据[6,0,2,0,4]中间的两个0一个看作3,一个看作5 。即:[6,3,2,5,4]这样这五张牌在[2,6]区间连续,输出true数据保证每组5个数字,每组最多含有4个零,数组的数取值为 [0,..

2021-09-15 16:16:36 222

原创 NC29 二维数组中的查找

描述在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]给定 target= 7,返回true。给定target=3,返回false。0 <=array.length<= 5000 <=ar...

2021-09-15 15:35:37 177

原创 NC60 判断一棵二叉树是否为搜索二叉树和完全二叉树

验证二叉搜索树递归实现public boolean isValidBST(TreeNode root) { return isValidBST(root, Long.MIN_VALUE, Long.MAX_VALUE);} private boolean isValidBST(TreeNode root, long lower, long upper) { if (root == null) { return true; } if (root.va

2021-09-15 14:37:17 72

原创 NC5 二叉树根节点到叶子节点的所有路径和

描述给定一个仅包含数字\ 0-90−9的二叉树,每一条从根节点到叶子节点的路径都可以用一个数字表示。例如根节点到叶子节点的一条路径是1\to 2\to 31→2→3,那么这条路径就用\ 123123来代替。找出根节点到叶子节点的所有路径表示的数字之和例如:这颗二叉树一共有两条路径,根节点到叶子节点的路径1\to 21→2用数字\ 1212代替根节点到叶子节点的路径1\to 31→3用数字\ 1313代替所以答案为\ 12+13=2512+13=25...

2021-09-15 14:37:10 269

原创 NC132 环形链表的约瑟夫问题

描述编号为11到nn的nn个人围成一圈。从编号为11的人开始报数,报到mm的人离开。下一个人继续从11开始报数。n-1n−1轮结束以后,只剩下一个人,问最后留下的这个人编号是多少?示例1输入:5,2 复制返回值:3 复制说明:开始5个人 1,2,3,4,5 ,从1开始报数,1->1,2->2编号为2的人离开1,3,4,5,从3开始报数,3->1,4->2编号为4的人离开1,3,5,从5开始报数,...

2021-09-15 14:36:51 94

原创 NC12 重建二叉树

描述给定某二叉树的前序遍历和中序遍历,请重建出该二叉树并返回它的头结点。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示。1. 分析根据中序遍历和前序遍历可以确定二叉树,具体过程为:根据前序序列第一个结点确定根结点 根据根结点在中序序列中的位置分割出左右两个子序列 对左子树和右子树分别递归使用同样的方法继续分解例如:前序序列{1,2,4,7,3,5,6,8} = pre中序序列{4,7,2,1,5..

2021-09-14 17:53:09 135

原创 NC131 随时找到数据流的中位数

描述有一个源源不断的吐出整数的数据流,假设你有足够的空间来保存吐出的数。请设计一个名叫MedianHolder的结构,MedianHolder可以随时取得之前吐出所有数的中位数。[要求]1.如果MedianHolder已经保存了吐出的N个数,那么将一个新数加入到MedianHolder的过程,其时间复杂度是O(logN)。2.取得已经吐出的N个数整体的中位数的过程,时间复杂度为O(1)每行有一个整数opt表示操作类型若opt=1,则接下来有一个整数N表示将N加入到结构中。若op..

2021-09-14 17:47:00 117

原创 NC66 两个链表的第一个公共结点

描述输入两个无环的单链表,找出它们的第一个公共结点。使用两个指针N1,N2,一个从链表1的头节点开始遍历,我们记为N1,一个从链表2的头节点开始遍历,我们记为N2。让N1和N2一起遍历,当N1先走完链表1的尽头(为null)的时候,则从链表2的头节点继续遍历,同样,如果N2先走完了链表2的尽头,则从链表1的头节点继续遍历,也就是说,N1和N2都会遍历链表1和链表2。因为两个指针,同样的速度,走完同样长度(链表1+链表2),不管两条链表有无相同节点,都能够到达同时到达终点。(N1最后肯定能

2021-09-14 15:49:16 144

原创 NC100 将字符串转化为整数

描述实现函数 atoi 。函数的功能为将字符串转化为整数提示:仔细思考所有可能的输入情况。这个问题没有给出输入的限制,你需要自己考虑所有可能的情况。示例1输入:"123"复制返回值:123先去掉字符串两边的空格 然后判断符号 最后读取数字 public int atoi (String str) { str = str.trim();//去掉前后的空格 //如果为空,直接返回0 if (str.length()

2021-09-14 15:36:08 361

空空如也

空空如也

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

TA关注的人

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