
数组拼接
惠菁
我见过大海,看过繁星,但唯独遇见你,是我长久以来,所有奔赴的意义。
展开
-
【Java|golang】2389. 和有限的最长子序列---前缀和+二分查找
给你一个长度为 n 的整数数组 nums ,和一个长度为 m 的整数数组 queries 。返回一个长度为 m 的数组 answer ,其中 answer[i] 是 nums 中 元素之和小于等于 queries[i] 的 子序列 的 最大 长度 。子序列 是由一个数组删除某些元素(也可以不删除)但不改变剩余元素顺序得到的一个数组。原创 2023-03-17 18:45:00 · 585 阅读 · 0 评论 -
【Java|golang】面试题 17.05. 字母与数字---前缀和
给定一个放有字母和数字的数组,找到最长的子数组,且包含的字母和数字的个数相同。原创 2023-03-16 18:45:00 · 78 阅读 · 0 评论 -
【Java|golang】1664. 生成平衡数组的方案数---奇数前缀和 + 偶数前缀和
给你一个整数数组 nums 。你需要选择 恰好 一个下标(下标从 0 开始)并删除对应的元素。请注意剩下元素的下标可能会因为删除操作而发生改变。原创 2023-01-28 21:47:17 · 240 阅读 · 0 评论 -
【java|golang】915. 分割数组--维护两个变量 当前最大值和左数组最大值
维护两个变量 当前最大值和左数组最大值原创 2022-10-24 09:59:34 · 128 阅读 · 0 评论 -
【java|golang】870. 优势洗牌---go二维切片初始化并排序
给定两个大小相等的数组 nums1 和 nums2,nums1 相对于 nums 的优势可以用满足 nums1[i] > nums2[i] 的索引 i 的数目来描述。原创 2022-10-08 11:33:09 · 341 阅读 · 0 评论 -
【Java|golang】1640. 能否连接形成数组
给你一个整数数组 arr ,数组中的每个整数 互不相同 。另有一个由整数数组构成的数组 pieces,其中的整数也 互不相同 。请你以 任意顺序 连接 pieces 中的数组以形成 arr 。但是,不允许 对每个数组 pieces[i] 中的整数重新排序。原创 2022-09-22 10:08:47 · 158 阅读 · 0 评论 -
【Java】6. Z 字形变换---时间复杂度O(N),避免使用较多的判断语句
将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:P A H NA P L S I I GY I R之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);示例 1:输入:s = “PAY原创 2022-03-01 10:36:47 · 155 阅读 · 0 评论 -
【Java】2022. 将一维数组转变成二维数组----时间复杂度O(N)。
给你一个下标从 0 开始的一维整数数组 original 和两个整数 m 和 n 。你需要使用 original 中 所有 元素创建一个 m 行 n 列的二维数组。original 中下标从 0 到 n - 1 (都 包含 )的元素构成二维数组的第一行,下标从 n 到 2 * n - 1 (都 包含 )的元素构成二维数组的第二行,依此类推。请你根据上述过程返回一个 m x n 的二维数组。如果无法构成这样的二维数组,请你返回一个空的二维数组。示例 1:输入:original = [1,2,3,4原创 2022-01-04 14:13:41 · 206 阅读 · 0 评论 -
【Java】299. 猜数字游戏---巧妙使用数组,避免使用较高的空间以及浪费更多的时间。
你在和朋友一起玩 猜数字(Bulls and Cows)游戏,该游戏规则如下:写出一个秘密数字,并请朋友猜这个数字是多少。朋友每猜测一次,你就会给他一个包含下述信息的提示:猜测数字中有多少位属于数字和确切位置都猜对了(称为 “Bulls”, 公牛),有多少位属于数字猜对了但是位置不对(称为 “Cows”, 奶牛)。也就是说,这次猜测中有多少位非公牛数字可以通过重新排列转换成公牛数字。给你一个秘密数字 secret 和朋友猜测的数字 guess ,请你返回对朋友这次猜测的提示。提示的格式为 “xAy原创 2021-11-08 14:52:10 · 197 阅读 · 0 评论 -
【Java】240. 搜索二维矩阵 II---时间复杂度O(N)横纵坐标优化。
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例 1:输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5输出:true示例 2:输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,原创 2021-10-29 14:09:29 · 259 阅读 · 0 评论 -
【Java】面试题 17.14. 最小K个数---两种方法,时间和空间不能兼得!!!
设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。示例:输入: arr = [1,3,5,7,2,4,6,8], k = 4输出: [1,2,3,4]提示:0 <= len(arr) <= 1000000 <= k <= min(100000, len(arr))代码1:public int[] smallestK(int[] arr, int k) { Arrays.sort(arr); int []a=new int[k]; Sy原创 2021-09-03 21:33:34 · 112 阅读 · 0 评论 -
【Java】576. 出界的路径数---使用三维动态规划,快速解决问题!!!
给你一个大小为 m x n 的网格和一个球。球的起始坐标为 [startRow, startColumn] 。你可以将球移到在四个方向上相邻的单元格内(可以穿过网格边界到达网格之外)。你 最多 可以移动 maxMove 次球。给你五个整数 m、n、maxMove、startRow 以及 startColumn ,找出并返回可以将球移出边界的路径数量。因为答案可能非常大,返回对 109 + 7 取余 后的结果。示例 1:输入:m = 2, n = 2, maxMove = 2, startRow =原创 2021-08-15 12:15:43 · 257 阅读 · 2 评论 -
【Java】1583. 统计不开心的朋友---使用二维数组记录权重和点与点的关系!!!
给你一份 n 位朋友的亲近程度列表,其中 n 总是 偶数 。对每位朋友 i,preferences[i] 包含一份 按亲近程度从高到低排列 的朋友列表。换句话说,排在列表前面的朋友与 i 的亲近程度比排在列表后面的朋友更高。每个列表中的朋友均以 0 到 n-1 之间的整数表示。所有的朋友被分成几对,配对情况以列表 pairs 给出,其中 pairs[i] = [xi, yi] 表示 xi 与 yi 配对,且 yi 与 xi 配对。但是,这样的配对情况可能会是其中部分朋友感到不开心。在 x 与 y 配对原创 2021-08-14 19:57:27 · 185 阅读 · 0 评论 -
【java】279. 完全平方数---使用动态规划,遍历不同的和!!!
给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。给你一个整数 n ,返回和为 n 的完全平方数的 最少数量 。完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。示例 1:输入:n = 12输出:3解释:12 = 4 + 4 + 4示例 2:输入:n = 13输出:2解释:13 = 4 + 9提示:原创 2021-06-11 11:36:40 · 103 阅读 · 1 评论 -
【Java】518. 零钱兑换 II---使用动态规划,解决数组合成特定值的个数!!!
给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。假设每一种面额的硬币有无限个。题目数据保证结果符合 32 位带符号整数。示例 1:输入:amount = 5, coins = [1, 2, 5]输出:4解释:有四种方式可以凑成总金额:5=55=2+2+15=2+1+1+15=1+1+1+1+1示例 2:输入:amount = 3, coins = [2]原创 2021-06-11 11:07:28 · 1236 阅读 · 2 评论 -
【Java】1049. 最后一块石头的重量 II---使用动态规划,求最靠近数组和sum/2的和!!!
有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块 石头。返回此石头 最小的可能重量 。如果没有石头剩下,就返回 0。示例 1:输入:stones = [2原创 2021-06-08 09:36:21 · 2409 阅读 · 1 评论 -
【java】494. 目标和---求数组某些元素部分和为特定值,最优算法,使用动态规划!!!
给你一个整数数组 nums 和一个整数 target 。向数组中的每个整数前添加 ‘+’ 或 ‘-’ ,然后串联起所有整数,可以构造一个 表达式 :例如,nums = [2, 1] ,可以在 2 之前添加 ‘+’ ,在 1 之前添加 ‘-’ ,然后串联起来得到表达式 “+2-1” 。返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。示例 1:输入:nums = [1,1,1,1,1], target = 3输出:5解释:一共有 5 种方法让最终目标和为 3 。-原创 2021-06-07 09:43:32 · 428 阅读 · 0 评论 -
【Java】525. 连续数组--判断两相同元素之间的最大距离,快速解决问题!!!
给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度。示例 1:输入: nums = [0,1]输出: 2说明: [0, 1] 是具有相同数量0和1的最长连续子数组。示例 2:输入: nums = [0,1,0]输出: 2说明: [0, 1] (或 [1, 0]) 是具有相同数量0和1的最长连续子数组。提示:1 <= nums.length <= 105nums[i] 不是 0 就是 1通过次数14,232提交次数29,原创 2021-06-03 09:29:20 · 748 阅读 · 0 评论 -
【Java】523. 连续的子数组和--快速入门,避免时间超时!!!
给你一个整数数组 nums 和一个整数 k ,编写一个函数来判断该数组是否含有同时满足下述条件的连续子数组:子数组大小 至少为 2 ,且子数组元素总和为 k 的倍数。如果存在,返回 true ;否则,返回 false 。如果存在一个整数 n ,令整数 x 符合 x = n * k ,则称 x 是 k 的一个倍数。示例 1:输入:nums = [23,2,4,6,7], k = 6输出:true解释:[2,4] 是一个大小为 2 的子数组,并且和为 6 。示例 2:输入:nums = [2原创 2021-06-02 11:09:24 · 216 阅读 · 0 评论 -
【java】179. 最大数---实现数组拼接最大数,优化比较!!!
给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。示例 1:输入:nums = [10,2]输出:“210”示例 2:输入:nums = [3,30,34,5,9]输出:“9534330”示例 3:输入:nums = [1]输出:“1”示例 4:输入:nums = [10]输出:“10”提示:1 <= nums.length <= 1000 <= nums[原创 2021-04-12 11:23:39 · 1366 阅读 · 0 评论