随笔分类 - 算法
摘要:链接 给定一个数组,包含从 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
阅读全文

浙公网安备 33010602011771号