10 2021 档案
摘要:链接:https://www.nowcoder.com/questionTerminal/4d76096de4754712aa6ebecd9737fcf5 来源:牛客网 N个加油站组成一个环形,给定两个长度都是N的非负数组oil和dis(N>1),oil[i]代表第i个加油站存的油可以跑多少千米,d
阅读全文
摘要:在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。 说
阅读全文
摘要:给定一个路径数组 paths,表示一张图。paths[i]==j 代表城市 i 连向城市 j,如果 paths[i]==i, 则表示 i 城市是首都,一张图里只会有一个首都且图中除首都指向自己之 外不会有环。例如, paths=[9,1,4,9,0,4,8,9,0,1],由数组表示的图可以知道,城市
阅读全文
摘要:链接:https://www.nowcoder.com/questionTerminal/fe30a13b5fb84b339cb6cb3f70dca699 来源:牛客网 牛牛和 15 个朋友来玩打土豪分田地的游戏,牛牛决定让你来分田地,地主的田地可以看成是一个矩形,每个位置有一个价值。分割田地的方法
阅读全文
摘要:给定数组 nums 由正整数组成,找到三个互不重叠的子数组的最大和。 每个子数组的长度为k,我们要使这3*k个项的和最大化。 返回每个区间起始索引的列表(索引从 0 开始)。如果有多个结果,返回字典序最小的一个。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/
阅读全文
摘要:给定一个正数1,裂开的方法有一种,(1) 给定一个正数2,裂开的方法有两种,(1和1)、(2) 给定一个正数3,裂开的方法有三种,(1、1、1)、(1、2)、(3) 给定一个正数4,裂开的方法有五种,(1、1、1、1)、(1、1、2)、(1、3)、(2、2)、 (4) 给定一个正数n,求裂开的方法数
阅读全文
摘要:给定一个非负数组arr,和一个正数m 返回arr的所有子序列中累加和%m之后的最大值。 import java.util.Arrays; import java.util.HashSet; import java.util.TreeSet; public class Main { public st
阅读全文
摘要:电子游戏“辐射4”中,任务“通向自由”要求玩家到达名为“Freedom Trail Ring”的金属表盘,并使用表盘拼写特定关键词才能开门。 给定一个字符串 ring,表示刻在外环上的编码;给定另一个字符串 key,表示需要拼写的关键词。您需要算出能够拼写关键词中所有字符的最少步数。 最初,ring
阅读全文
摘要:老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。 你需要按照以下要求,帮助老师给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果。 评分更高的孩子必须比他两侧的邻位孩子获得更多的糖果。 那么这样下来,老师至少需要准备多少颗糖果呢? 来源:力扣(Lee
阅读全文
摘要:链接:https://www.nowcoder.com/questionTerminal/16d1047e9fa54cea8b5170b156d89e38 来源:牛客网 一个不含有负数的数组可以代表一圈环形山,每个位置的值代表山的高度。比如,{3,1,2,4,5},{4,5,3,1,2}或{1,2,
阅读全文
摘要:有 N 堆石头排成一排,第 i 堆中有 stones[i] 块石头。 每次移动(move)需要将连续的 K 堆石头合并为一堆,而这个移动的成本为这 K 堆石头的总数。 找出把所有石头合并成一堆的最低成本。如果不可能,返回 -1 。 来源:力扣(LeetCode) 链接:https://leetcod
阅读全文
摘要:链接 给 n 个城市(从 1 到 n),城市和无向道路成本之间的关系为3元组 [A, B, C](在城市 A 和城市 B 之间有一条路,成本是 C)我们需要从1开始找到的旅行所有城市的付出最小的成本。 import java.util.Arrays; import java.util.List; p
阅读全文
摘要:链接:https://www.nowcoder.com/questionTerminal/736e12861f9746ab8ae064d4aae2d5a9 来源:牛客网 开始时你的能力是0,你的目标是从0号怪兽开始,通过所有的怪兽。 如果你当前的能力,小于i号怪兽的能力,你必须付出money[i]的
阅读全文
摘要:import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Stack; public class TarjanA
阅读全文
摘要:给你 k 枚相同的鸡蛋,并可以使用一栋从第 1 层到第 n 层共有 n 层楼的建筑。 已知存在楼层 f ,满足 0 ⇐ f ⇐ n ,任何从 高于 f 的楼层落下的鸡蛋都会碎,从 f 楼层或比它低的楼层落下的鸡蛋都不会破。 每次操作,你可以取一枚没有碎的鸡蛋并把它从任一楼层 x 扔下(满足 1 ⇐
阅读全文
摘要:链接 给定一个正数数组arr,其中所有的值都为整数,以下是最小不可组成和的概念 把arr每个子集内的所有元素加起来会出现很多值,其中最小的记为min,最大的记为max 在区间[min, max]上,如果有数不可以被arr某一个子集相加得到,那么其中最小的那个数是arr的最小不可组成和 在区间[min
阅读全文
摘要:链接 给定一个正数数组arr,其中所有的值都为整数,以下是最小不可组成和的概念 把arr每个子集内的所有元素加起来会出现很多值,其中最小的记为min,最大的记为max 在区间[min, max]上,如果有数不可以被arr某一个子集相加得到,那么其中最小的那个数是arr的最小不可组成和 在区间[min
阅读全文
摘要:想象一下你是个城市基建规划者,地图上有 N 座城市,它们按以 1 到 N 的次序编号。 给你一些可连接的选项 conections,其中每个选项 conections[i] = [city1, city2, cost] 表示将城市 city1 和城市 city2 连接所要的成本。(连接是双向的,也就
阅读全文
摘要:想象一下你是个城市基建规划者,地图上有 N 座城市,它们按以 1 到 N 的次序编号。 给你一些可连接的选项 conections,其中每个选项 conections[i] = [city1, city2, cost] 表示将城市 city1 和城市 city2 连接所要的成本。(连接是双向的,也就
阅读全文
摘要:有 n 个网络节点,标记为 1 到 n。 给你一个列表 times,表示信号经过 有向 边的传递时间。 times[i] = (ui, vi, wi),其中 ui 是源节点,vi 是目标节点, wi 是一个信号从源节点传递到目标节点的时间。 现在,从某个节点 K 发出一个信号。需要多久才能使所有节点
阅读全文
摘要:「快乐前缀」是在原字符串中既是 非空 前缀也是后缀(不包括原字符串自身)的字符串。 给你一个字符串 s,请你返回它的 最长快乐前缀。 如果不存在满足题意的前缀,则返回一个空字符串。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest
阅读全文
摘要:链接 给一个全是小写字母的字符串str,删除多余字符,使得每种字符只保留一个,并且让最终结果字符串字典序最小。 import java.util.Scanner; public class Main { private static String solve(char[] str) { if (st
阅读全文
摘要:给你一个整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 '+' 或 '-' ,然后串联起所有整数,可以构造一个 表达式 : 例如,nums = [2, 1] ,可以在 2 之前添加 '+' ,在 1 之前添加 '-' ,然后串联起来得到表达式 "+2-1" 。 返回可以通
阅读全文
摘要:实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列(即,组合出下一个更大的整数)。 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。 必须 原地 修改,只允许使用额外常数空间。 来源:力扣(LeetCode) 链接:https://leet
阅读全文
摘要:给出两个整数 n 和 k,找出所有包含从 1 到 n 的数字,且恰好拥有 k 个逆序对的不同的数组的个数。 逆序对的定义如下:对于数组的第i个和第 j个元素,如果满i < j且 a[i] > a[j],则其为一个逆序对;否则不是。 由于答案可能很大,只需要返回 答案 mod 109 + 7 的值。
阅读全文
摘要:给定一个正整数M,请构造出一个长度为M的数组arr,要求 对任意的i、j、k三个位置,如果i<j<k,都有arr[i] + arr[k] != 2*arr[j] 返回构造出的arr public class MakeNo { // 生成长度为size的达标数组 // 达标:对于任意的 i<k<j,满
阅读全文
摘要:长度为N的数组arr,一定可以组成N^2个数值对。 例如arr = [3,1,2], 数值对有(3,3) (3,1) (3,2) (1,3) (1,1) (1,2) (2,3) (2,1) (2,2), 也就是任意两个数都有数值对,而且自己和自己也算数值对。 数值对怎么排序?规定,第一维数据从小到大
阅读全文
摘要:给你一个整数数组 nums 和一个整数 k ,找出 nums 中和至少为 k 的 最短非空子数组 ,并返回该子数组的长度。如果不存在这样的 子数组 ,返回 -1 。 子数组 是数组中 连续 的一部分。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/proble
阅读全文
摘要:在字典(单词列表) wordList 中,从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列: 序列中第一个单词是 beginWord 。 序列中最后一个单词是 endWord 。 每次转换只能改变一个字母。 转换过程中的中间单词必须是字典 wordList 中
阅读全文
摘要:峰值元素是指其值严格大于左右相邻值的元素。 给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。 你可以假设 nums[-1] = nums[n] = -∞ 。 你必须实现时间复杂度为 O(log n) 的算法来解决此问题。 来
阅读全文
摘要:整型数组arr长度为n(3 ⇐ n ⇐ 10^4),最初每个数字是<=200的正数且满足如下条件: arr[0] ⇐ arr[1] 2.arr[n-1] ⇐ arr[n-2] arr[i] ⇐ max(arr[i-1], arr[i+1]) 但是在arr有些数字丢失了,比如k位置的数字之前是正数,丢
阅读全文
摘要:链接 给定三个字符串str1、str2 和aim,如果aim包含且仅包含来自str1和str2的所有字符,而且在aim中属于str1的字符之间保持原来在str1中的顺序属于str2的字符之间保持原来在str2中的顺序,那么称aim是str1和str2的交错组成。实现一个函数,判断aim是否是str1
阅读全文
摘要:链接 给定一个只由0(假)、1(真)、&(逻辑与)、|(逻辑或)和^(异或)五种字符组成的字符串express,再给定一个布尔值desired。求出express能有多少种组合方式,可以达到desired的结果。并输出你所求出的总方案数。 import java.util.Scanner; publ
阅读全文
摘要:给你一个整数数组 nums 以及两个整数 lower 和 upper 。求数组中,值位于范围 [lower, upper] (包含 lower 和 upper)之内的 区间和的个数 。 区间和 S(i, j) 表示在 nums 中,位置从 i 到 j 的元素之和,包含 i 和 j (i ≤ j)。
阅读全文
摘要:链接 N皇后问题是指在N*N的棋盘上要摆N个皇后,要求任何两个皇后不同行,不同列也不再同一条斜线上,求给一个整数n,返回n皇后的摆法。 import java.util.Scanner; public class Main { private static int doJob(int limit,
阅读全文
摘要:链接:https://www.nowcoder.com/questionTerminal/8b0152848ffd475eaa950278606fe70b 来源:牛客网 一条直线上有居民点,邮局只能建在居民点上。给定一个有序整形数组arr,每个值表示居民点的一维坐标,再给定一个正数num,表示邮局数
阅读全文
摘要:链接 给定一个正数数组arr,arr的累加和代表金条的总长度,arr的每个数代表金条要分成的长度。规定长度为k的金条分成两块,费用为k个铜板。返回把金条分出arr中的每个数字需要的最小代价。 import java.util.PriorityQueue; import java.util.Scann
阅读全文
摘要:链接 给定一个整型数组arr,代表数值不同的纸牌排成一条线,玩家A和玩家B依次拿走每张纸牌,规定玩家A先拿,玩家B后拿,但是每个玩家每次只能拿走最左和最右的纸牌,玩家A和玩家B绝顶聪明。请返回最后的获胜者的分数。 import java.util.Scanner; public class Main
阅读全文
摘要:中位数是有序序列最中间的那个数。如果序列的长度是偶数,则没有最中间的数;此时中位数是最中间的两个数的平均数。 例如: [2,3,4],中位数是 3 [2,3],中位数是 (2 + 3) / 2 = 2.5 给你一个数组 nums,有一个长度为 k 的窗口从最左端滑动到最右端。窗口中有 k 个数,每次
阅读全文
摘要:请实现如下结构: TopRecord{ public TopRecord(int K) : 构造时事先指定好K的大小,构造后就固定不变了 public void add(String str) : 向该结构中加入一个字符串,可以重复加入 public List top() : 返回之前加入的所有字符
阅读全文
摘要:链接 给一非空的单词列表,返回前 k 个出现次数最多的单词。 返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。 import java.util.*; class Solution { public static List<String> topKFreque
阅读全文
摘要:给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 来源:力扣(LeetCode) 链接
阅读全文
摘要:链接 给定一个无序数组arr, 其中元素可正、可负、可0。给定一个整数k,求arr所有子数组中累加和为k的最长子数组长度 import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class Ma
阅读全文
摘要:链接:https://www.nowcoder.com/questionTerminal/a4e34287fa1b41f9bd41f957efbd5dff 来源:牛客网 给定一个数组arr,该数组无序,但每个值均为正数,再给定一个正数k。求arr的所有子数组中所有元素相加和为k的最长子数组的长度 例
阅读全文
摘要:某个程序本来应该输出一个整数数组。但是这个程序忘记输出空格了以致输出了一个数字字符串,我们所知道的信息只有:数组中所有整数都在 [1, k] 之间,且数组中的数字都没有前导 0 。 给你字符串 s 和整数 k 。可能会有多种不同的数组恢复结果。 按照上述程序,请你返回所有可能输出字符串 s 的数组方
阅读全文
摘要:链接 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。 class Solution { private Node[] solve(Node root) { Node head = root, tail = root; if (r
阅读全文
摘要:链接:https://www.nowcoder.com/questionTerminal/677a21987e5d46f1a62cded9509a94f2 来源:牛客网 先给出可整合数组的定义:如果一个数组在排序之后,每相邻两个数的差的绝对值都为1,或者该数组长度为1,则该数组为可整合数组。例如,[
阅读全文
摘要:有一些工作:difficulty[i] 表示第 i 个工作的难度,profit[i] 表示第 i 个工作的收益。 现在我们有一些工人。worker[i] 是第 i 个工人的能力,即该工人只能完成难度小于等于 worker[i] 的工作。 每一个工人都最多只能安排一个工作,但是一个工作可以完成多次。
阅读全文
摘要:链接 给定一个整数n,代表汉诺塔游戏中从小到大放置n个圆盘,假设开始所有圆盘都在左边的柱子上,那么用最优的办法把所有圆盘都移动到右边的柱子上的过程,就称为最优移动轨迹。给定一个整型数组arr, 其中只含有1、2和3,代表所有圆盘目前的状态,1代表左柱,2代表中柱,3代表右柱,a[i]的值代表第i+1
阅读全文
摘要:给定一个正数数组arr,返回该数组能不能分成4个部分,并且每个部分的累加和相等,切分位置的数不要。 例如: arr=[3, 2, 4, 1, 4, 9, 5, 10, 1, 2, 2] 返回true 三个切割点下标为2, 5, 7. 切出的四个子数组为[3,2], [1,4], [5], [1,2,
阅读全文
摘要:据说著名犹太历史学家 Josephus 有过以下故事:在罗马人占领乔塔帕特后,39 个犹太人与 Josephus 及他的朋友躲到一个洞中,39 个犹太人决定宁愿死也不要被敌人抓到,于是决定了一种自杀方式,41 个人排成一个圆圈,由第 1 个人开始报数,报数到 3 的人就自杀,然后再由下一个人重新报
阅读全文
摘要:import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.PriorityQueue; /** * author:左程云 */ public class SDEan
阅读全文
摘要:链接 已知一个消息流会不断地吐出整数1∼N,但不一定按照顺序吐出。如果上次打印的数为i,那么当i+1出现时,请打印i+1及其之后接收过的并且连续的所有数,直到1∼N全部接收并打印完,请设计这种接收并打印的结构 import java.util.HashMap; import java.util.Ma
阅读全文
摘要:链接 给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有字母都不相同)。 import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class Main { public s
阅读全文
摘要:给你一个字符串 s ,每一次操作你都可以在字符串的任意位置插入任意字符。 请你返回让 s 成为回文串的 最少操作次数 。 「回文串」是正读和反读都相同的字符串。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/minimum-insertion
阅读全文
摘要:使用下面描述的算法可以扰乱字符串 s 得到字符串 t : 如果字符串的长度为 1 ,算法停止 如果字符串的长度 > 1 ,执行下述步骤: 在一个随机下标处将字符串分割成两个非空的子字符串。即,如果已知字符串 s ,则可以将其分成两个子字符串 x 和 y ,且满足 s = x + y 。 随机 决定是
阅读全文
摘要:链接 数组异或和的定义:把数组中所有的数异或起来得到的值。给定一个整型数组arr,其中可能有正、有负,有零,求其中子数组的最大异或和 从高位向低位选择 import java.util.Scanner; public class Main { private static int solve(int
阅读全文
摘要:链接 给你一个数组 points ,其中 points[i] = [xi, yi] 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。 import java.util.HashMap; import java.util.Map; import java.util.Objects; im
阅读全文
摘要:import java.util.Stack; /** * author: 左程云 */ public class RecoverBST { public static class Node { public int value; public Node left; public Node righ
阅读全文
摘要:链接 现在有 n1+n2 种面值的硬币,其中前 n1 种为普通币,可以取任意枚,后 n2 种为纪念币,每种最多只能取 1 枚,每种硬币有一个面值,问能用多少种方法拼出 m 的面值? import java.util.Arrays; import java.util.Scanner; public c
阅读全文
摘要:链接 给定两个整数W和K,W代表你拥有的初始资金,K代表你最多可以做K个项目。再给定两个长度为N的正数数组costs[]和profits[],代表一共有N个项目,costs[i]和profits[i]分别表示第i号项目的启动资金与做完后的利润(注意是利润,如果一个项目的启动资金为10,利润为4,代表
阅读全文
摘要:假设有 n 台超级洗衣机放在同一排上。开始的时候,每台洗衣机内可能有一定量的衣服,也可能是空的。 在每一步操作中,你可以选择任意 m (1 ⇐ m ⇐ n) 台洗衣机,与此同时将每台洗衣机的一件衣服送到相邻的一台洗衣机。 给定一个整数数组 machines 代表从左至右每台洗衣机中的衣物数量,请给出
阅读全文
摘要:给你一个整数数组 nums ,你可以对它进行一些操作。 每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1 和 nums[i] + 1 的元素。 开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。 来源:力
阅读全文
摘要:链接 给定一个由 0 和 1 组成的矩阵 matrix ,找出只包含 1 的最大矩形,并返回其面积。 注意:此题 matrix 输入格式为一维 01 字符串数组。 import java.util.Stack; class Solution { private static int getMax(i
阅读全文
摘要:给定一棵二叉树的头节点head,如果在某一个节点x上放置相机,那么x的父节点、x的所 有子节点以及x都可以被覆盖。返回如果要把所有数都覆盖,至少需要多少个相机。 public class Main { public static class Node { public Node left; publ
阅读全文
摘要:给定一个字符串s,求s中有多少个字面值不相同的子序列。 import java.util.Scanner; public class DistinctSubseq { public static int solve(char[] str) { if (str == null || str.lengt
阅读全文
摘要:链接 给定两个有序数组arr1和arr2,再给定一个整数k,返回来自arr1和arr2的两个数相加和最大的前k个,两个数必须分别来自两个数组 import java.util.*; public class Main { private static final int[] DX = {0, -1}
阅读全文
摘要:链接 给定一个整型数组arr,其中可能有正有负有零。你可以随意把整个数组切成若干个不相容的子数组,求异或和为0的子数组最多可能有多少个?整数异或和定义:把数组中所有的数异或起来得到的值。 import java.util.HashMap; import java.util.Map; import j
阅读全文
摘要:链接 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是回文。 返回符合要求的 最少分割次数 。 import java.util.Scanner; class Solution { private static boolean[][] isOk(String str) { int n
阅读全文
摘要:链接 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正着读和反着读都一样的字符串。 import java.util.*; class Solution { private static boolean[][] isOk(Stri
阅读全文
摘要:链接 给定数组arr,arr[i]==k代表可以从位置向右跳1~k个距离。比如,arr[2]==3,代表可以从位置2跳到位置3、位置4或位置5。如果从位置0出发,返回最少跳几次能跳到arr最后的位置上。 import java.util.Scanner; public class Main { pr
阅读全文
摘要:一、从左到右的尝试模型 二、范围上的尝试模型 三、多样本位置全对应的尝试模型 1.样本对应模型往往讨论当前的结尾该如何组织可能性 四、寻找业务限制的尝试模型 注: 1.尝试策略就是动态规划转移方程 2.动态规范返回值由暴力递归决定,暴力递归需要的状态是什么?主函数怎么调用?动态规划要最初始的状态 3
阅读全文
摘要:有台奇怪的打印机有以下两个特殊要求: 打印机每次只能打印由 同一个字符 组成的序列。 每次可以在任意起始和结束位置打印新字符,并且会覆盖掉原来已有的字符。 给你一个字符串 s ,你的任务是计算这个打印机打印它需要的最少打印次数。 来源:力扣(LeetCode) 链接:https://leetcode
阅读全文
摘要:给出一些不同颜色的盒子,盒子的颜色由数字表示,即不同的数字表示不同的颜色。 你将经过若干轮操作去去掉盒子,直到所有的盒子都去掉为止。每一轮你可以移除具有相同颜色的连续 k 个盒子(k >= 1),这样一轮之后你将得到 k * k 个积分。 当你将所有盒子都去掉之后,求你能获得的最大积分和。 来源:力
阅读全文
摘要:给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words,找出所有同时在二维网格和字典中出现的单词。 单词必须按照字母顺序,通过 相邻的单元格 内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。 来源:力扣
阅读全文
摘要:一些恶魔抓住了公主(P)并将她关在了地下城的右下角。地下城是由 M x N 个房间组成的二维网格。我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初始健康点数为一个正整数。如果他的健康点数在某一时刻降至 0 或以下,他会立即死亡。 有些房间由恶魔守卫
阅读全文
摘要:给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。 说明: 分隔时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。 来源:力扣(LeetCode) 链接:https://lee
阅读全文
摘要:给你一个长度为 偶数 n 的整数数组 nums 和一个整数 limit 。每一次操作,你可以将 nums 中的任何整数替换为 1 到 limit 之间的另一个整数。 如果对于所有下标 i(下标从 0 开始),nums[i] + nums[n - 1 - i] 都等于同一个数,则数组 nums 是 互
阅读全文
摘要:链接 你有 k 个 非递减排列 的整数列表。找到一个 最小 区间,使得 k 个列表中的每个列表至少有一个数包含在其中。 我们定义如果 b-a < d-c 或者在 b-a == d-c 时 a < c,则区间 [a,b] 比 [c,d] 小。 有序表 时间复杂度:O(n * k * logk) 注意有
阅读全文
摘要:给你一个字符串类型的数组arr,譬如: String[] arr = { "b\st", "d\", "a\d\e", "a\b\c" }; 把这些路径中蕴含的目录结构给打印出来,子目录直接列在父目录下面,并比父目录向右进两格,就像这样: a b c d e b cst d 同一级的需要按字母顺序排
阅读全文
摘要:应用 公式一 从0开始 import java.math.BigInteger; import java.util.Scanner; public class Main { /** * C(2n, n) / (n + 1) */ private static BigInteger catalan(i
阅读全文
摘要:链接 给定一颗二叉树,已知所有节点的值都不一样, 返回其中最大的且符合搜索二叉树条件的最大拓扑结构的大小。 拓扑结构是指树上的一个联通块。 import java.util.HashMap; import java.util.Map; import java.util.Scanner; public
阅读全文
摘要:链接 给定一个四则运算(带括号表达式)加减乘除由+ - * /表示,求运算结果 import java.util.Scanner; import java.util.Stack; public class Main { private static void push(Stack<Integer>
阅读全文
摘要:链接 城市的天际线是从远处观看该城市中所有建筑物形成的轮廓的外部轮廓。给你所有建筑物的位置和高度,请返回由这些建筑物形成的 天际线 。 每个建筑物的几何信息由数组 buildings 表示,其中三元组 buildings[i] = [lefti, righti, heighti] 表示: lefti
阅读全文
摘要:链接 给定一个无序数组arr,求出需要排序的最短子数组的长度,对子数组排序后能使得整个数组有序,即为需要排序的数组。例如:arr=[1,5,3,4,2,6,7]返回4,因为只有[5,3,4,2]需要排序。 import java.util.Scanner; public class Main { p
阅读全文
摘要:链接 给定一个链表,再给定一个整数 pivot,请将链表调整为左部分都是值小于 pivot 的节点,中间部分都是值等于 pivot 的节点, 右边部分都是大于 pivot 的节点。 除此之外,对调整后的节点顺序没有更多要求。 import java.util.Scanner; public clas
阅读全文
摘要:public class Main { static class Node { Node next; Node random; int val; public Node(int val) { this.val = val; } } private static Node copy(Node head
阅读全文
摘要:链接 数组小和的定义如下: 例如,数组s = [1, 3, 5, 2, 4, 6],在s[0]的左边小于或等于s[0]的数的和为0;在s[1]的左边小于或等于s[1]的数的和为1;在s[2]的左边小于或等于s[2]的数的和为1+3=4;在s[3]的左边小于或等于s[3]的数的和为1; 在s[4]的左
阅读全文
摘要:链接 给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。 字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,"ACE" 是 "ABCDE" 的一个子序列,而 "AEC" 不是) import java.util
阅读全文
摘要:链接 给定一个矩阵matrix,先从左上角开始,每一步只能往右或者往下走,走到右下角。然后从右下角出发,每一步只能往上或者往左走,再回到左上角。任何一个位置的数字,只能获得一遍。返回最大路径和。 import java.util.Arrays; import java.util.Scanner; p
阅读全文
摘要:链接 给定一棵二叉树,已经其中没有重复值的节点,请判断该二叉树是否为搜索二叉树和完全二叉树。 import java.util.Scanner; public class Main { private static CBTInfo solveCBT(Node root) { if (root ==
阅读全文
摘要:链接 给定一棵二叉树以及这棵树上的两个节点 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点。 import java.util.Scanner; public class Main { private static Node solve(Node root, Node h1, Node
阅读全文
摘要:链接 给定一个链表,请判断该链表是否为回文结构。 import java.util.Scanner; public class Main { static class Node { Node next; int val; public Node(int val) { this.val = val;
阅读全文
摘要:链接 给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。 如果数组元素个数小于 2,则返回 0。 class Solution { private int getBucketIndex(int min, int max, int size, int val) { return (int
阅读全文
摘要:链接 第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit。 每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。 返回载到每一个人所需的最小船数。(保证每个人都能被船载)。 import java.util.Arrays; class Solution
阅读全文
摘要:链接 给定一个数组,包含从 1 到 N 所有的整数,但其中缺了两个数字。你能在 O(N) 时间内只用 O(1) 的空间找到它们吗? 以任意顺序返回这两个数字均可。 class Solution { private int lowbit(int x) { return x & (-x); } publ
阅读全文
摘要:链接 给你一个数组 nums ,请你完成两类查询,其中一类查询要求更新数组下标对应的值,另一类查询要求返回数组中某个范围内元素的总和。 实现 NumArray 类: NumArray(int[] nums) 用整数数组 nums 初始化对象 void update(int index, int va
阅读全文
摘要:链接 给你一个二维整数数组 envelopes ,其中 envelopes[i] = [wi, hi] ,表示第 i 个信封的宽度和高度。 当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。 请计算 最多能有多少个 信封能组成一组“俄罗斯套娃”信封(即
阅读全文
摘要:链接 给定一个整数数组 prices ,它的第 i 个元素 prices[i] 是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 class Solution { priv
阅读全文
摘要:链接 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 两两合并。O(k^2 * n) 分治合并。O(k * n * logk) 优先队列。O(k * n * logk) import java.util.Comparator; import ja
阅读全文
摘要:链接 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 class Solution { private static void swap(int a, int b, int[] nums) { int
阅读全文
摘要:import java.util.Comparator; import java.util.PriorityQueue; public class TopK { /** * 堆 * 时间复杂度O(N*logK) * * @param arr * @param k * @return */ publi
阅读全文
摘要:链接 如果给你一个二维数组,每一个值表示这一块地形的高度,求整块地形能装下多少水。 import java.util.Comparator; import java.util.PriorityQueue; import java.util.Scanner; public class Main { p
阅读全文
摘要:链接 给定一个直方图(也称柱状图),假设有人从上面源源不断地倒水,最后直方图能存多少水量?直方图的宽度为 1。 左侧最大值+右侧最大值 双指针 class Solution { public int trap(int[] height) { if (height == null || height.
阅读全文
摘要:链接 你正在安装一个广告牌,并希望它高度最大。这块广告牌将有两个钢制支架,两边各一个。每个钢支架的高度必须相等。 你有一堆可以焊接在一起的钢筋 rods。举个例子,如果钢筋的长度为 1、2 和 3,则可以将它们焊接在一起形成长度为 6 的支架。 返回广告牌的最大可能安装高度。如果没法安装广告牌,请返
阅读全文
摘要:给定一个只含0和1二维数组matrix,第0行表示天花板。每个位置认为与上、下、左、右四个方向有粘性,比如:matrix = 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1 1 0 0 0 0 0 0 1 1 0 注意到0行0列是1,然后能延伸出5个1的一片。同理0行3列也是1,也能延伸
阅读全文
摘要:链接 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 import java.util.ArrayList; import java.uti
阅读全文
摘要:链接 给定一个非负整数数组 nums 和一个整数 m ,你需要将这个数组分成 m 个非空的连续子数组。 设计一个算法使得这 m 个子数组各自和的最大值最小。 未优化的动态规划 O(n * n * m) 优化的动态规划 O(n * m) 二分查找 O(n * log(sum - max)) class
阅读全文
摘要:链接 假如有一排房子,共 n 个,每个房子可以被粉刷成 k 种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。 当然,因为市场上不同颜色油漆的价格不同,所以房子粉刷成不同颜色的花费成本也是不同的。每个房子粉刷成不同颜色的花费是以一个 n x k 的矩阵来表示的。 例如,cost
阅读全文
摘要:链接 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 class Solution { private int findKth(int[] nums1, int[] nums2, int k) { if (nums1.l
阅读全文
摘要:链接 给定一个整型数组arr,再给定一个整数k,打印所有出现次数大于n/k的数,如果没有这样的数,请打印”-1“。 import java.util.*; public class Main { private static void reduceOne(Map<Integer, Integer>
阅读全文
摘要:链接 给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 class Solution { private static int solve(int[] nums, int k) { int ret = 0; for (in
阅读全文
摘要:链接 给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。 子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。 class Solution { public static int longestPalindromeSubseq(String s
阅读全文
摘要:链接 给定一个没有重复值的整形数组arr,初始时认为arr中每一个数各自都是一个单独的集合。请设计一种叫UnionFind的结构,并提供以下两个操作。 boolean isSameSet(int a, int b): 查询a和b这两个数是否属于一个集合 void union(int a, int b
阅读全文
摘要:链接 给你两个整数 a 和 b ,不使用 运算符 + 和 - ,计算并返回两整数之和。 import java.util.Scanner; class Solution { /** * a + b: * 0 + 1 = 1 * 1 + 1 = 0 * 进位: * a & b * @pa
阅读全文
摘要:import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; class Graph { private Map<Node, Map<Node, Edge>> ed
阅读全文
摘要:给出一棵二叉树的先序和中序数组,通过这两个数组直接生成正确的后序数组。 import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class Main { private static void
阅读全文
摘要:链接 给定一个只包含三种字符的字符串:( ,) 和 *,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则: 任何左括号 ( 必须有相应的右括号 )。 任何右括号 ) 必须有相应的左括号 ( 。 左括号 ( 必须在对应的右括号之前 )。 * 可以被视为单个右括号 ) ,或单个左括号
阅读全文
摘要:链接 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 import java.util.HashMap; import java.util.Map; class Solution { pr
阅读全文
摘要:链接 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 class Solution { private int searc
阅读全文
摘要:链接 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。 例如,"ace" 是
阅读全文
摘要:链接 给定两个字符串str1和str2,输出两个字符串的最长公共子串,如果最长公共子串为空,输出-1。 import java.util.Scanner; public class Main { private static String solve(String str1, String str2
阅读全文
摘要:链接 给定两个字符串str1和str2,再给定三个整数ic,dc和rc,分别代表插入、删除和替换一个字符的代价,请输出将str1编辑成str2的最小代价。 public class Solution { public int minEditCost(String str1, String str2,
阅读全文
摘要:链接 给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 说明:你不能倾斜容器。 class So
阅读全文
摘要:链接 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。 给定一个代表每个房屋存放金额的非负整数数组,计算你
阅读全文
摘要:链接 在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋
阅读全文
摘要:• 单个格子枚举行为 • 二维单调性 • 区间划分 • 不同时依赖于自己本行和本列的值 将正数数组切分为2份,使累加和最大的部分最小。返回 dp[i],代表将 0~i切分为2份的结果。 假设 0~i已求的结果dp[i],切分点为k,此时求dp[i+1]。 分情况: 1. dp[i] 来自右部分,很显
阅读全文
摘要:链接 给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。 class Solutio
阅读全文
摘要:/** * <p> * Abstract binary search tree implementation. Its basically fully implemented * binary search tree, just template method is provided for cre
阅读全文
摘要:/** * * Abstract class for self balancing binary search trees. Contains some methods * that is used for self balancing trees. * * @author Ignas Lelys
阅读全文
摘要:public class SizeBalancedTreeMap { public static class SBTNode<K extends Comparable<K>, V> { public K key; public V value; public SBTNode<K, V> left;
阅读全文
摘要:/** * <p> * AVL tree implementation. * <p> * In computer science, an AVL tree is a self-balancing binary search tree, and * it was the first such data
阅读全文
摘要:import java.util.ArrayList; public class SkipListMap { // 跳表的节点定义 public static class SkipListNode<K extends Comparable<K>, V> { public K key; public
阅读全文
摘要:import java.util.ArrayList; public class SizeBalancedTreeMap { public static class SizeBalancedTreeMap<K extends Comparable<K>, V> { private int root;
阅读全文
摘要:链接 给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。 class Solution { public static int longestValidParentheses(String s) { if (s == null || s.length() =
阅读全文
摘要:链接 假设农场中成熟的母牛每年只会生 1 头小母牛,并且永远不会死。第一年农场中有一只成熟的母牛,从第二年开始,母牛开始生小母牛。每只小母牛 3 年之后成熟又可以生小母牛。给定整数 n,求出 n 年后牛的数量。 f(1) = 1 f(2) = 2 f(3) = 3 f(n) = f(n - 1) +
阅读全文
摘要:
阅读全文
摘要:T(n) = aT(n/b) + f(n)  如快排, T[n] = 2T[n/2] + O(n) 其中O(n)为PART
阅读全文
摘要:import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = ne
阅读全文
摘要:import java.util.Arrays; public class Solution { private static boolean isRight(int[] a, int[] b) { if (a == null) { return b == null; } else { } if (
阅读全文
摘要:import java.util.Arrays; public class Heap { private int limit; private int[] arr; private int size; public Heap(int limit) { this.limit = limit; this
阅读全文
摘要:import java.util.Arrays; public class Solution { private static boolean isRight(int[] a, int[] b) { if (a == null) { return b == null; } if (b == null
阅读全文
摘要:基础版本 import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; import java.util.List; public class RadixSort { public static v
阅读全文
摘要:public class FindListMiddle { public static class Node { public int value; public Node next; public Node(int v) { value = v; } @Override public String
阅读全文
摘要:链接 判断两个链表是否相交 分为如下几个问题: 1.判断链表是否有环,若有返回入环节点 2.两个无环链表判断相交 3.两个有环链表判断相交 4.一个无环链表与一个有环链表必不相交 public class Solution { /** * 判断链表是否有环 * * @param head * @re
阅读全文
摘要:链接 给定一颗二叉树,分别实现按层和 ZigZag 打印二叉树。 ZigZag遍历: 意思是第一层从左到右遍历,第二层从右到左遍历,依次类推。 import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;
阅读全文
摘要:链接 请把一张纸条竖着放在桌子上,然后从纸条的下边向上方对折1次,压出折痕后展开。此时折痕是凹下去的,即折痕突起的方向指向纸条的背面。如果从纸条的下边向上方连续对折2次,压出折痕后展开,此时有三条折痕,从上到下依次是下折痕、下折痕和上折痕。给定一个输入参数N,代表纸条都从下边向上方连续对折N次,请从
阅读全文
摘要:链接 平衡二叉树的性质为: 要么是一棵空树,要么任何一个节点的左右子树高度差的绝对值不超过 1。给定一棵二叉树,判断这棵二叉树是否为平衡二叉树。 一颗树的高度指的是树的根节点到所有节点的距离中的最大值。 import java.util.Scanner; public class Main { pr
阅读全文
摘要:链接 从二叉树的节点 A 出发,可以向上或者向下走,但沿途的节点只能经过一次,当到达节点 B 时,路径上的节点数叫作 A 到 B 的距离。 现在给出一棵二叉树,求整棵树上每对节点之间的最大距离。 import java.util.Scanner; public class Main { privat
阅读全文
摘要:链接 给定一颗二叉树,已知其中所有节点的值都不一样,找到含有节点最多的搜索二叉子树,输出该子树总节点的数量。 搜索二叉树是指对于二叉树的任何一个节点,如果它有儿子,那么左儿子的值应该小于它的值,右儿子的值应该大于它的值。 import java.util.Scanner; public class
阅读全文
摘要:链接 给定一个可能含有重复值的数组 arr,找到每一个 i 位置左边和右边离 i 位置最近且值比 arr[i] 小的位置。返回所有位置相应的信息。 import java.io.BufferedReader; import java.io.IOException; import java.io.In
阅读全文
摘要:链接 给定数组 arr 和整数 num,共返回有多少个子数组满足如下情况: max(arr[i...j]) - min(arr[i...j]) <= num max(arr[i...j])表示子数组arr[i...j]中的最大值,min[arr[i...j])表示子数组arr[i...j]中的最小值
阅读全文
摘要:import java.util.List; import java.util.SortedMap; import java.util.TreeMap; public class ConsistentHash { private String select(int virtualNodeNum, S
阅读全文
摘要:链接 来源:牛客网 给定一个无序数组arr,其中元素可正、可负、可0。给定一个整数k,求arr所有的子数组中累加和小于或等于k的最长子数组长度 例如:arr = [3, -2, -4, 0, 6], k = -2. 相加和小于等于-2的最长子数组为{3, -2, -4, 0},所以结果返回4 [要求
阅读全文
摘要:链接 给定一个矩阵matrix,按照“之”字形的方式打印这个矩阵,如样例所示。 import java.util.*; public class Main { private static int[] solve(int[][] mat) { int n = mat.length; int m =
阅读全文
摘要:链接 有一个NxN整数矩阵,请编写一个算法,将矩阵顺时针旋转90度。 给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵。 import java.util.*; public class Solution { public int[][] rotateMatrix(int[][] ma
阅读全文
摘要:链接 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素 import java.util.*; public class Solution { public int[] SpiralMatrix(int[][] matrix) { if (mat
阅读全文
摘要:链接 平面内有n个矩形, 第i个矩形的左下角坐标为(x1[i], y1[i]), 右上角坐标为(x2[i], y2[i])。 如果两个或者多个矩形有公共区域则认为它们是相互重叠的(不考虑边界和角落)。 请你计算出平面内重叠矩形数量最多的地方,有多少个矩形相互重叠。 import java.util.
阅读全文
摘要:链接 来源:牛客网 给定字符串str1和str2,求str1的字串中含有str2所有字符的最小字符串长度。 import java.util.Scanner; public class Main { private static int solve(String str1, String str2)
阅读全文
摘要:链接 来源:牛客网 每一个线段都有start和end两个数据项,表示这条线段在X轴上从start位置开始到end位置结束。 给定一批线段,求所有重合区域中最多重合了几个线段,首尾相接的线段不算重合。 例如:线段[1,2]和线段[2.3]不重合。 线段[1,3]和线段[2,3]重合 串气球 impor
阅读全文
摘要:在无限长的数轴(即 x 轴)上,我们根据给定的顺序放置对应的正方形方块。 第 i 个掉落的方块(positions[i] = (left, side_length))是正方形,其中 left 表示该方块最左边的点位置(positions[i][0]),side_length 表示该方块的边长(pos
阅读全文
摘要:给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。 '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。 来源:力扣(LeetCode) 链接 著作权归领扣网络所有。商业转载请联系
阅读全文
摘要:修改与与加减合并 import java.util.Scanner; public class Main { static class SegmentTree { // arr[]为原序列的信息从0开始,但在arr里是从1开始的 // sum[]模拟线段树维护区间和 // lazy[]为累加懒惰标记
阅读全文
摘要:import java.util.ArrayList; import java.util.List; // https://www.nowcoder.com/questionTerminal/a9fec6c46a684ad5a3abd4e365a9d362 public class Solution
阅读全文
摘要:import java.util.Scanner; public class Main { private static void swap(int[] arr, int a, int b) { int tmp = arr[a]; arr[a] = arr[b]; arr[b] = tmp; } p
阅读全文
摘要:最长回文子串 回文,亦称回环,是正读反读都能一样的字符串。例如“12321”、“abba”等。 现在给你一个字符串,请你找出其中长度最长的回文。 import java.util.Scanner; public class Main { private static char[] getMatche
阅读全文
摘要:import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Queue; public class AhoCorasick { // 前缀树的节点 public st
阅读全文
摘要:import java.util.Arrays; import java.util.Random; public class CountSort { static class Item { int index; int num; } private static void sort(Item[] i
阅读全文
摘要:import java.util.Arrays; import java.util.Scanner; public class Main { private static int index = 0; private static int[] end; private static int[] la
阅读全文
摘要:原文 public class MatrixUDG { private int mEdgNum; // 边的数量 private char[] mVexs; // 顶点集合 private int[][] mMatrix; // 邻接矩阵 private static final int INF =
阅读全文
摘要:import java.util.Scanner; public class Main { private static int index = 0; private static int[] lastEdge; private static int[] end; private static in
阅读全文
摘要:求最短路 import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class Main { private static final int INF = Integer.MAX_VAL
阅读全文
摘要:题目链接 import java.util.Scanner; /** * O(n * m) */ public class Main { static class Edge { int from; int to; int weight; public Edge(int from, int to, i
阅读全文
摘要:import java.util.Scanner; public class Main { private static final int INF = Integer.MAX_VALUE; /** * O(n^2) * @param n * @param g * @return */ public
阅读全文
摘要:import java.util.Scanner; public class AdjacencyTable { // 节点个数 private int n; // 边的个数 private int m; // 边的编号,从1开始 private int edgeSerial = 0; // last
阅读全文
摘要:KMP import java.util.Scanner; class Solution { private static int[] getNext(char[] str) { int[] next = new int[str.length]; int i = 0, j = -1; next[0]
阅读全文
摘要:```java import java.util.Scanner; /** * k 为尾部的0的个数 * C[i] = A[i - 2^k+1] + A[i - 2^k+2] + ... + A[i] */ public class TreeArray { private int size; pri
阅读全文
摘要:获取二进制最后一个1:x&-x 获取大于等于x的第一个2的次幂 private static int nextPow(int x) { x--; x |= x >> 1; x |= x >> 2; x |= x >> 4; x |= x >> 8; x |= x >> 16; x++; return
阅读全文
摘要:import java.util.Scanner; public class Main { private static void add(int[][] helper, int x1, int y1, int x2, int y2, int num) { helper[x1][y1] += num
阅读全文
摘要:详解 import java.util.Arrays; import java.util.Scanner; public class Main { /** * arr数组 [left, right] 区间每个元素加 num * @param helper * @param left * @param
阅读全文
摘要:import java.util.Scanner; public class Main { public static void sort(int [] arr,int left,int right) { if (left >= right) { return; } int m = (left +
阅读全文
摘要:链接 给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。 import java.util.LinkedList; class Solution { public int[] maxSlidingWindow(int[] nums, int k) { if (k == 0)
阅读全文
摘要:链接 来源:牛客网 一个栈中元素的类型为整型,现在想将该栈从顶到底按从大到小的顺序排序,只许申请一个栈。除此之外,可以申请新的变量,但不能申请额外的数据结构。如何完成排序? import java.util.Scanner; import java.util.Stack; public class
阅读全文
摘要:使用队列实现栈的下列操作: push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空 注意: 你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和
阅读全文
摘要:一个栈依次压入1,2,3,4,5,那么从栈顶到栈底分别为5,4,3,2,1。将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构。 用递归函数和栈逆序一个栈 import java.util.Scanner; import java
阅读全文
摘要:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 来源:力扣(LeetCode) 链接 著作权归领扣网络所有。商业转载请联系官
阅读全文
摘要:请设计一个栈,除了常规栈支持的pop与push函数以外,还支持min函数,该函数返回栈元素中的最小值。执行push、pop和min操作的时间复杂度必须为O(1)。 来源:力扣(LeetCode) 链接 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 import java.ut
阅读全文
摘要:public class BinarySearch { /** * 普通二分查找 * @param arr * @param key * @return */ private static boolean search(int[] arr, int key) { if (arr == null ||
阅读全文
摘要:/** * @Author Tianyiya H.T.W * @Date 2019/1/8 11:23 */ public class Main { private static int[][] matrixPow(int[][] x, int n) { int[][] one = new int[
阅读全文