news 2026/6/9 20:13:17

力扣每日一练——Java

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
力扣每日一练——Java

目录

一、字形变换

二、删除有序数组中的重复项

三、移除元素

四、找出字符串中第一个匹配项的下标


一、字形变换

将一个给定字符串s根据给定的行数numRows,以从上往下、从左到右进行 Z 字形排列。

比如输入字符串为"PAYPALISHIRING"行数为3时,排列如下:

P A H N A P L S I I G Y I R

之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"

请你实现这个将字符串进行指定行数变换的函数:

string convert(string s, int numRows);

示例 1:

输入:s = "PAYPALISHIRING", numRows = 3输出:"PAHNAPLSIIGYIR"
示例 2:
输入:s = "PAYPALISHIRING", numRows = 4输出:"PINALSIGYAHRPI"解释:P I N A L S I G Y A H R P I

示例 3:

输入:s = "A", numRows = 1输出:"A"
public class Test { public static void main(String[] args) { String str = "PAHNAPLSIIGYIR"; int num = 3; System.out.println(convert(str, num)); } public static String convert(String s, int numRows) { int n = s.length(), r = numRows; if (r == 1 || r >= n) { return s; } int t = r * 2 - 2; int c = (n + t - 1) / t * (r - 1); char[][] mat = new char[r][c]; for (int i = 0, x = 0, y = 0; i < n; ++i) { mat[x][y] = s.charAt(i); if (i % t < r - 1) { ++x; } else { --x; ++y; } } StringBuffer ans = new StringBuffer(); for (char[] row : mat) { for (char ch : row) { if (ch != 0) { ans.append(ch); } } } return ans.toString(); } }

二、删除有序数组中的重复项

给你一个非严格递增排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致。然后返回nums中唯一元素的个数。

考虑nums的唯一元素的数量为k。去重后,返回唯一元素的数量k

nums的前k个元素应包含排序后的唯一数字。下标k - 1之后的剩余元素可以忽略。

判题标准:

系统会用下面的代码来测试你的题解:

int[] nums = [...]; // 输入数组 int[] expectedNums = [...]; // 长度正确的期望答案 int k = removeDuplicates(nums); // 调用 assert k == expectedNums.length; for (int i = 0; i < k; i++) { assert nums[i] == expectedNums[i]; }

如果所有断言都通过,那么您的题解将被通过

示例 1:

输入:nums = [1,1,2]输出:2, nums = [1,2,_]解释:函数应该返回新的长度2,并且原数组nums的前两个元素被修改为1,2不需要考虑数组中超出新长度后面的元素。

示例 2:

输入:nums = [0,0,1,1,1,2,2,3,3,4]输出:5, nums = [0,1,2,3,4,_,_,_,_,_]解释:函数应该返回新的长度5, 并且原数组nums的前五个元素被修改为0,1,2,3,4。不需要考虑数组中超出新长度后面的元素。
public class Test { //力扣题删除重复元素 public static void main(String[] args) { int[] num = {0, 0, 1, 1, 1, 2, 2, 3, 3, 4}; System.out.println(removeDuplicates(num)); } public static int removeDuplicates(int[] nums) { int n = nums.length; if(n == 0) { return 0; } int fast = 1, slow = 1; while(fast < n) { if(nums[fast] != nums[fast - 1]) { nums[slow] = nums[fast - 1]; ++slow; } ++fast; } return slow; } }

三、移除元素

给你一个数组nums和一个值val,你需要原地移除所有数值等于val的元素。元素的顺序可能发生改变。然后返回nums中与val不同的元素的数量。

假设nums中不等于val的元素数量为k,要通过此题,您需要执行以下操作:

  • 更改nums数组,使nums的前k个元素包含不等于val的元素。nums的其余元素和nums的大小并不重要。
  • 返回k
  • 示例 1:

    输入:nums = [3,2,2,3], val = 3输出:2, nums = [2,2,_,_]解释:你的函数应该返回 k = 2, 并且 nums中的前两个元素均为 2。 你在返回的 k 个元素之外留下了什么并不重要(因此它们并不计入评测)。

    示例 2:

    输入:nums = [0,1,2,2,3,0,4,2], val = 2输出:5, nums = [0,1,4,0,3,_,_,_]解释:你的函数应该返回 k = 5,并且 nums 中的前五个元素为 0,0,1,3,4。 注意这五个元素可以任意顺序返回。 你在返回的 k 个元素之外留下了什么并不重要(因此它们并不计入评测)。
public class Test { //删除与val值相等的值 public static void main(String[] args) { int[] arr = {3, 2, 2, 3}; int val1 = 3; System.out.println(removeElement(arr, val1)); } public static int removeElement(int[] nums, int val) { int n = nums.length; int a = 0; for (int i = 0; i < n; i++) { if(nums[i] != val) { nums[a] = nums[i]; a ++; } } return a; } }

四、找出字符串中第一个匹配项的下标

给你两个字符串haystackneedle,请你在haystack字符串中找出needle字符串的第一个匹配项的下标(下标从 0 开始)。如果needle不是haystack的一部分,则返回-1

示例 1:

输入:haystack = "sadbutsad", needle = "sad"输出:0解释:"sad" 在下标 0 和 6 处匹配。 第一个匹配项的下标是 0 ,所以返回 0 。

示例 2:

输入:haystack = "leetcode", needle = "leeto"输出:-1解释:"leeto" 没有在 "leetcode" 中出现,所以返回 -1 。
public class Test { //两个数组相同的第一个下标 public static void main(String[] args) { String str1 = "sadbutsad"; String str2 = "sad"; System.out.println(strStr(str1, str2)); } public static int strStr(String haystack, String needle) { int n = haystack.length(), m = needle.length(); for (int i = 0; i + m <= n; i++) { boolean flag = true; for (int j = 0; j < m; j++) { if (haystack.charAt(i + j) != needle.charAt(j)) { flag = false; break; } } if (flag) { return i; } } return -1; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/3 15:56:51

胡萝卜叶片检测 _ 基于GA优化Faster R-CNN的X101-64x4d_FPN模型实现

1. 胡萝卜叶片检测&#xff1a;基于GA优化Faster R-CNN的X101-64x4d_FPN模型实现 在现代农业中&#xff0c;作物病虫害的早期检测对于提高产量和质量至关重要。胡萝卜作为一种广泛种植的蔬菜&#xff0c;其叶片健康状况直接影响地下根茎的生长。传统的叶片检测方法依赖人工观察…

作者头像 李华
网站建设 2026/6/5 0:49:16

【课程设计/毕业设计】机器学习基于python-CNN深度学习识别猫脸

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/5/20 12:09:46

肾脏超声图像质量评估与分类系统实现(附Mask R-CNN模型训练)_1

1. 肾脏超声图像质量评估与分类系统实现&#xff08;附Mask R-CNN模型训练&#xff09; 1.1. 摘要 本文详细介绍了一个基于深度学习的肾脏超声图像质量评估与分类系统的实现过程。系统采用Mask R-CNN作为核心模型&#xff0c;通过对肾脏超声图像进行质量评估和分类&#xff0c;…

作者头像 李华
网站建设 2026/6/5 4:34:18

如何高效发布新款,在线看款?

做服装批发的姐妹们&#xff0c;是不是每次上新、开选款会&#xff0c;都要把新款图片、细节图、面料图一股脑发给供应商&#xff0c;然后群里来去&#xff0c;图片发了一堆&#xff0c;对方还可能看不全、看不清&#xff0c;或者信息混乱&#xff1f;&#x1f44f;土著相册小&…

作者头像 李华
网站建设 2026/6/8 20:34:44

flask基于Python的智能购物电商平台商城

目录摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 随着电子商务的快速发展&#xff0c;智能购物平台的需求日益增长。基于Python的Flask框架开发的智能购物电商平台&#xff0c;…

作者头像 李华
网站建设 2026/5/29 23:16:36

C4D + Corona 渲染玻璃材质详解:Thin Shell 与实心玻璃的正确使用方式

原创声明本文为原创技术整理文章&#xff0c;内容基于 Corona Renderer 在 Cinema 4D 中的实际使用经验总结&#xff0c;转载请注明出处。一、前言在 Cinema 4D 的实际项目中&#xff0c;玻璃材质是建筑可视化、室内渲染及产品渲染中非常常见的一类材质。 在 Corona Renderer 中…

作者头像 李华