![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java算法
文章平均质量分 61
箬敏伊儿
白天晚上睡前
23岁开始零基础学跳舞,
坚持两年多啦~
24岁开始从事Java开发,
对知识保持热爱~
25岁开始睡前读书,
在文字中汲取力量~
分享跳舞日常
分享编程知识
分享读书感悟
你只管努力,剩下的交给时间!
展开
-
Leedcode【899】. 有序队列——Java解法
给定一个字符串 s 和一个整数 k 。你可以从 s 的前 k 个字母中选择一个,并把它加到字符串的末尾。返回 在应用上述步骤的任意数量的移动后,字典序最小的字符串 。示例 1:输入:s = "cba", k = 1输出:"acb"解释:在第一步中,我们将第一个字符(“c”)移动到最后,获得字符串 “bac”。在第二步中,我们将第一个字符(“b”)移动到最后,获得最终结果 “acb”。示例 2:输入:s = "baaca", k = 3输出:"aaabc"解释:在第一步中,我们将第一个字符(“原创 2024-06-27 17:59:59 · 572 阅读 · 0 评论 -
华为od算法_生成哈夫曼树_Java
给定长度为 n 的无序的数字数组,每个数字代表二叉树的叶子节点的权值,数字数组的值均大于等于 1。请完成一个函数,根据输入的数字数组,生成哈夫曼树,并将哈夫曼树按照中序遍历输出。为了保证输出的二叉树中序遍历结果统一,增加以下限制:在树节点中,左节点权值小于等于右节点权值,根节点权值为左右节点权值之和。当左右节点权值相同时,左子树高度高度小于等于右子树。注意: 所有用例保证有效,并能生成哈夫曼树提醒:哈夫曼树又称最优二叉树,是一种带权路径长度最短的一叉树。原创 2024-06-01 15:40:33 · 273 阅读 · 0 评论 -
华为OD笔试题:停车场车辆统计:数组 贪心
车辆大小不一,小车占一个车位(长度1),货车占两个车位(长度2),卡车占三个车位(长度3)。* 整型字符串Q数组carsl,其中1表示有车,0表示没车,数组长度小于1000。* 解题思路:根据停车情况看1的个数,连续3个以内的1都算一个车;* 特定大小的停车场,数组cars|表示,其中1表示有车,0表示没车。* 统计停车场最少可以停多少辆车,返回具体的数目。* 整型数字字符串,表示最少停车数目。原创 2024-05-12 13:57:15 · 97 阅读 · 0 评论 -
华为od机考_找座位_Java
在一个大型体育场内举办了一场大型活动,由于疫情防控的需要,要求每位观众的必须间隔至少一个空位才允许落座。现在给出一排观众座位分布图,座位中存在已落座的观众,请计算出,在不移动现有观众座位的情况下,最多还能坐下多少名观众。一个数组,用来标识某一排座位中,每个座位是否己经坐人。0表示该座位没有坐人,1表示该座位已经坐人。整数,在不移动现有观众座位的情况下,最多还能坐下多少名观众。1<=数组长度≤=10000输入 10001 输出 1输入 0101 输出 0。原创 2024-06-02 20:02:22 · 517 阅读 · 0 评论 -
华为od机考_最多购买宝石数目_Java(滑动窗口)
橱窗里有一排宝石,不同的宝石对应不同的价格,宝石的价格标记为 gems[i],0<=i<n, n = gems.length宝石可同时出售0个或多个,如果同时出售多个,则要求出售的宝石编号连续;例如客户最大购买宝石个数为m,购买的宝石编号必须为gems[i],gems[i+1]...gems假设你当前拥有总面值为value的钱,请问最多能购买到多少个宝石,如无法购买宝石,则返回 0。原创 2024-06-01 17:52:03 · 236 阅读 · 0 评论 -
华为od机考_虚拟游戏理财_Java(暴力解法)
在一款虚拟游戏中生活,你必须进行投资以增强在虚拟游戏中的资产以免被淘汰出局。现有一家Bank,它提供有若干理财产品 m 个,风险及投资回报不同,你有 N(元)进行投资,能接收的总风险值为X。你要在可接受范围内选择最优的投资方式获得最大回报。原创 2024-06-02 18:56:22 · 153 阅读 · 0 评论 -
华为od机考_机器人仓库搬砖_Java
【代码】华为od机考_机器人仓库搬砖_Java。原创 2024-06-03 16:52:08 · 295 阅读 · 0 评论 -
华为od机考_精准核酸检测_Java(深度优先搜索)
为了达到新冠疫情精准防控的需要,为了避免全员核酸检测带来的浪费,需要精准還定可能被感染的人群。现在根据传染病流调以及大数据分析,得到了每个人之间在时间、空间上是否存在轨迹的交叉。现在给定一组确诊人员编号(X1,X2,X3,…Xn),在所有人当中,找出哪些人需要进行核酸检测,输出需要进行核酸检测的人数。(注意:确诊病例自身不需要再做核酸检测) 需要进行核酸检测的人,是病毒传擂链条上的所有人员,即有可能通过确诊病例所能传强到的所有人。原创 2024-06-02 13:23:37 · 482 阅读 · 0 评论 -
华为OD笔试:开源项目热榜
:分别表示 5 个统计维度的统计值。原创 2024-05-12 18:04:40 · 353 阅读 · 0 评论 -
华为od机考_小华最多能得到多少克黄金_Java
【代码】华为od机考_小华最多能得到多少克黄金_Java。原创 2024-06-02 23:02:06 · 389 阅读 · 0 评论 -
华为od算法题-小明找位置-Java解法
小明友出操,按学号从小到大排成一列;小明来迟了,请你给小明出个主意,让他尽快找到他应该排的位置。算法复杂度要求不高于nLog(n);学号为堅数类型,队列规模<=10000;输入描述: 1、第一行:输入已排成队列的小朋友的学号(正整数),以”,”1隔开;例如:93 95 97 100 102 123 155 2、第二行:小明学号,如110;输出描述: 输出一个数字,代表队列位置(从1开始)。例如: 6 示例1 输入 93 95 97 100 102 123 155 110 输出 6。原创 2024-05-31 17:13:03 · 127 阅读 · 0 评论 -
华为OD笔试题:API 集群负载统计
某个产品的RESTful API集合部署在服务器集群的多个节点上,近期对客户端访问日志进行了采集,需要统计各个API的访问频次,根据热点信息在服务器节点之间做负载均衡,现在需要实现热点信息统计查询功能。* RESTful API是由多个层级构成,层级之间使用 / 连接,如 /A/B/C/D 这个地址,A属于第一级,B属于第二级,C属于第三级,D属于第四级。* 接下来N行,每一行为一个RESTful API的URL地址,约束地址中仅包含英文字母和连接符 / ,最大层级为10,每层级字符串最大长度为10。原创 2024-05-12 13:59:03 · 386 阅读 · 0 评论 -
华为od机考_传递悄悄话_Java(二叉树构建及求高度)
给定一个二叉树,每个节点上站着一个人,节点数字表示父节点到该节点传递情悄诺需要花费的时间。初始时,根节点所在位置的人有一个悄悄话根要传递给其他人,求二又树所有节点上的人都接收到悄悄话花费的时间。输入描述: 给定二叉树 0 9 20 -1 -1 15 7 -1 -1 -1 -1 3 2 注:-1表示空节点输出描述: 返回所有节点都接收到悄悄活花费的时间38示例一输入输出38。原创 2024-06-02 22:38:48 · 344 阅读 · 0 评论 -
华为OD笔试题:提取字符串中的最长数学表达式并计算
提取字符串中的最长合法简单数学表达式,字符串长度最长的,并计算表达式的值。* 2.如果有多个长度一样的,请返回第一个表达式的结果。* 4.操作符不能连续出现,如+--+1是不合法的。* 1.所有数字,计算结果都不超过long。* 3.数学表达式,必须是最长的,合法的。* 例如:输入1-2abcd 输出-1。* 简单数学表达式只能包含以下内容。* 0-9数字,符号+-*原创 2024-05-12 14:00:40 · 125 阅读 · 0 评论 -
华为od算法_万能字符单词拼写_Java
有一个字符串数组 words 和一个字符串 chars。假如可以用 chars 中的字母拼写出 words 中的某个“单词”(字符串),那么我们就认为你掌握了这个单词。words 的字符仅由 a-z 英文小写字母组成,例如 "abc"chars 由 a-z 英文小写字母和 "?" 组成。其中英文 "?" 表示万能字符,能够在拼写时当作任意一个英文字母。例如:"?" 可以当作 "a" 等字母。注意:每次拼写时,chars 中的每个字母和万能字符都只能使用一次。原创 2024-06-01 14:06:56 · 281 阅读 · 0 评论 -
华为od算法_游戏分组_Java
部门准备举办一场王者荣耀表演赛,有 10 名游戏爱好者参与,分为两队,每队 5 人。每位参与者都有一个评分,代表着他的游戏水平。为了表演赛尽可能精彩,我们需要把 10 名参赛者分为实力尽量相近的两队。一队的实力可以表示为这一队 5 名队员的评分总和。现在给你 10 名参与者的游戏水平评分,请你根据上述要求分队最后输出这两组的实力差绝对值。例: 10 名参赛者的评分分别为 5 1 8 3 4 6 7 10 9 2,分组为 (1 3 5 8 10) (2 4 6 7 9),两组实力差最小,差值为 1。原创 2024-06-01 17:06:15 · 270 阅读 · 0 评论 -
华为OD笔试题:英文输入法: 数组 字符串排序循环
输入第一行为一个正整数n(1≤n≤1000),下面n行为n个字符串(字符串长度≤100),字符串中只含有大小写字母。* 数据范围:1≤n≤1000 ,字符串长度满足1≤len≤100。* 给定 n 个字符串,请对 n 个字符串按照字典序排列。* 数据输出n行,输出结果为按照字典序排列的字符串。* 解题思路:用Array.sort() 排序。原创 2024-05-12 13:58:07 · 409 阅读 · 0 评论 -
leedcode【54】. 螺旋矩阵——Java解法
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]提示:m == matrix.lengthn == matrix[i].length1 <= m, n <= 10原创 2024-05-26 12:30:16 · 467 阅读 · 0 评论 -
leedcode283:移动零——Java解法
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。示例 1:输入: nums = [0,1,0,3,12]输出: [1,3,12,0,0]示例 2:输入: nums = [0]输出: [0]提示:1 <= nums.length <= 104-231 <= nums[i] <= 231 - 1进阶:你能尽量减少完成的操作次数吗时间复杂度:空间复杂度:Java原创 2024-05-23 00:29:18 · 234 阅读 · 0 评论 -
leedcode【977】有序数组的平方_Java解法
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。示例 1:输入:nums = [-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为 [16,1,0,9,100]排序后,数组变为 [0,1,9,16,100]示例 2:输入:nums = [-7,-3,2,3,11]输出:[4,9,9,49,121]提示:1 <= nums.length <= 104-104 <= nums[i] <= 104num原创 2024-05-24 01:23:37 · 347 阅读 · 0 评论 -
leedcode【209】. 长度最小的子数组——Java解法
给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组[numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。示例 1:输入:target = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组 [4,3] 是该条件下的长度最小的子数组。示例 2:输入:target = 4, nums = [1,4,4]输出:1示例 3:输入原创 2024-05-25 17:53:21 · 575 阅读 · 0 评论 -
Leedcode367:有效的完全平方数_Java解法
Leedcode367:有效的完全平方数给你一个正整数 num 。如果 num 是一个完全平方数,则返回 true ,否则返回 false 。完全平方数 是一个可以写成某个整数的平方的整数。换句话说,它可以写成某个整数和自身的乘积。不能使用任何内置的库函数,如 sqrt 。示例 1:输入:num = 16输出:true解释:返回 true ,因为 4 * 4 = 16 且 4 是一个整数。示例 2:输入:num = 14输出:false解释:返回 false ,因为 3.742 * 3.742原创 2024-05-22 16:44:51 · 306 阅读 · 0 评论 -
Leedcode69:x的平方根_Java解法
给你一个非负整数 x ,计算并返回 x 的 算术平方根 。由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。示例 1:输入:x = 4输出:2示例 2:输入:x = 8输出:2解释:8 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。提示:0 <= x <= 231 - 1时间复杂度:空间复杂度:Java原创 2024-05-22 16:08:32 · 393 阅读 · 0 评论 -
leedcode【59】. 螺旋矩阵 II——Java解法
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。示例 1:输入:n = 3输出:[[1,2,3],[8,9,4],[7,6,5]]示例 2:输入:n = 1输出:[[1]]提示:1 <= n <= 20填充上行从左到右填充右列从上到下填充下行从右到左填充左列从下到上由外向内一圈一圈这么画下去。这里一圈下来,我们要画每四条边,这四条边怎么画,每画一条边都要坚持一致的左闭右开,或者左开右闭的原则,这样这一圈才能按照统原创 2024-05-26 11:50:05 · 730 阅读 · 0 评论 -
Leedcode701:二分查找——Java解法
时间复杂度:空间复杂度:Java原创 2024-05-22 01:01:19 · 432 阅读 · 0 评论 -
Leedcode26:删除有序数组中的重复项——java解法
给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。返回 k 。判题标准:系统会用下面的代码来测试你的题解:int[原创 2024-05-22 17:53:27 · 293 阅读 · 0 评论 -
leedcode【904】. 水果成篮——Java写法
你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类 。你想要尽可能多地收集水果。然而,农场的主人设定了一些严格的规矩,你必须按照要求采摘水果:你只有 两个 篮子,并且每个篮子只能装 单一类型 的水果。每个篮子能够装的水果总量没有限制。你可以选择任意一棵树开始采摘,你必须从 每棵 树(包括开始采摘的树)上 恰好摘一个水果 。采摘的水果应当符合篮子中的水果类型。每采摘一次,你将会向右移动到下一棵树,并继续采摘。一旦原创 2024-05-25 18:59:38 · 336 阅读 · 0 评论 -
Leedcode34. 在排序数组中查找元素的第一个和最后一个位置_Java解法
力扣链接给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。进阶:你可以设计并实现时间复杂度为 O(logn)O(\log n)O(logn) 的算法解决此问题吗?示例 1:输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]示例 2:输入:nums = [5,7,7,8,8,10], target = 6。原创 2024-05-22 15:08:46 · 233 阅读 · 0 评论 -
Leedcode27:移除元素_Java解法
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作:更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。返回 k。用户评测:评测机将使用以下代码测试您的解决方案:int[] nums = [...]; // 输入数组int val原创 2024-05-22 17:42:37 · 337 阅读 · 0 评论 -
leedcode844:比较含退格的字符串——Java解法
给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。注意:如果对空文本输入退格字符,文本继续为空。示例 1:输入:s = "ab#c", t = "ad#c"输出:true解释:s 和 t 都会变成 "ac"。示例 2:输入:s = "ab##", t = "c#d#"输出:true解释:s 和 t 都会变成 ""。示例 3:输入:s = "a#c", t = "b"输出:false解释:s 会变成 "c",但 t 仍然是 "原创 2024-05-23 01:04:23 · 400 阅读 · 0 评论 -
leedcode【454】. 四数相加 II——Java解法【哈希法】
给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:0 <= i, j, k, l < nnums1[i] + nums2[j] + nums3[k] + nums4[l] == 0示例 1:输入:nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2]输出:2解释:两个元组如下:输入:nums1 = [0], nums2 = [0], n原创 2024-05-28 16:31:09 · 623 阅读 · 0 评论 -
leedcode【1】. 两数之和——Java解法(哈希法)
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3,2,4], target = 6输出:[1原创 2024-05-28 15:39:44 · 364 阅读 · 0 评论 -
leedcode【150】. 逆波兰表达式求值——Java解法(栈)
给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。请你计算该表达式。返回一个表示表达式值的整数。注意:有效的算符为 '+'、'-'、'*' 和 '/' 。每个操作数(运算对象)都可以是一个整数或者另一个表达式。两个整数之间的除法总是 向零截断 。表达式中不含除零运算。输入是一个根据逆波兰表示法表示的算术表达式。答案及所有中间计算结果可以用 32 位 整数表示。示例 1:输入:tokens = ["2","1","+","3","*"]输出:9解释:该算式转化为常原创 2024-05-29 17:07:40 · 805 阅读 · 0 评论 -
leedcode【19】. 删除链表的倒数第 N 个结点——Java解法
分为如下几步:定义fast指针和slow指针,初始值为虚拟头结点,如图:fast首先走n + 1步 ,为什么是n+1呢,因为只有这样同时移动的时候slow才能指向删除节点的上一个节点(方便做删除操作),如图:fast和slow同时移动,直到fast指向末尾,如图:删除slow指向的下一个节点,如图:时间复杂度:空间复杂度:Java性能原创 2024-05-26 17:40:15 · 312 阅读 · 0 评论 -
leedcode【142】. 环形链表 II——Java解法
时间复杂度:空间复杂度:Java性能原创 2024-05-26 20:02:14 · 318 阅读 · 0 评论 -
leedcode【18】. 四数之和——Java解法
给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):0 <= a, b, c, d < na、b、c 和 d 互不相同nums[a] + nums[b] + nums[c] + nums[d] == target你可以按 任意顺序 返回答案 。示例 1:输入:nums = [1,0,-1,0,-2,2],原创 2024-05-29 11:28:33 · 955 阅读 · 0 评论 -
leedcode[15]. 三数之和——Java解法
中等难度给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]解释:nums[0] + nums[1] + nums[2] = (-1)原创 2024-05-28 17:39:33 · 1050 阅读 · 0 评论 -
leedcode【242】. 有效的字母异位词——Java解法
定义一个数组叫做record用来上记录字符串s里字符出现的次数。需要把字符映射到数组也就是哈希表的索引下标上,因为字符a到字符z的ASCII是26个连续的数值,所以字符a映射为下标0,相应的字符z映射为下标25。再遍历 字符串s的时候,只需要将 s[i] - ‘a’ 所在的元素做+1 操作即可,并不需要记住字符a的ASCII,只要求出一个相对数值就可以了。 这样就将字符串s中字符出现的次数,统计出来了。那看一下如何检查字符串t中是否出现了这些字符,同样在遍历字符串t的时候,对t中出现的字符映射哈希表索引上的原创 2024-05-26 21:31:04 · 294 阅读 · 0 评论 -
leedcode【225】. 用队列实现栈——Java实现(一个队列实现)
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。注意:你只能使用队列的标准操作 —— 也就是 push to back、peek/pop from front、size 和 is em原创 2024-05-29 15:15:06 · 786 阅读 · 0 评论 -
leedcode【349】. 两个数组的交集——Java解法
给定两个数组 nums1 和 nums2 ,返回 它们的交集。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]解释:[4,9] 也是可通过的提示:1 <= nums1.length, nums2.length <= 10000 <= nums1[i], nums2[i] <=原创 2024-05-28 12:20:43 · 297 阅读 · 0 评论