LeetCode是一个非常受欢迎的在线编程练习平台,它提供了大量的算法题目,可以帮助你提高编程能力。如果你正在学习Java编程,那么LeetCode上的题目绝对是你必须要尝试的。本文将介绍一些常见的LeetCode题目,希望对你的Java编程提升有所帮助。
一、数字
- 两数之和
题目描述:
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
解题思路:
对于这道题,我们可以使用HashMap来解决。我们遍历整个数组,对于每个元素,我们都检查它是否在HashMap中。如果在,那么我们就找到了一对数字。如果不在,那么我们就将当前元素插入到HashMap中,以便在以后的遍历中查找。
代码实现:
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
int complement = target - nums[i];
if (map.containsKey(complement)) {
return new int[] { map.get(complement), i };
}
map.put(nums[i], i);
}
throw new IllegalArgumentException("No two sum solution");
}
二、数组
- 移动零
题目描述:
给定一个数组nums,编写一个函数将所有0移动到它的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12] 输出: [1,3,12,0,0]
解题思路:
对于这道题,我们可以使用双指针法。我们用一个指针i来遍历数组,同时用另一个指针j来指向下一个非零元素应该放置的位置。当我们遇到一个非零元素时,我们就将它放到j所指向的位置,然后将j向后移动一位。最后,我们将数组中剩余的位置都填充为0。
代码实现:
public void moveZeroes(int[] nums) {
int j = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] != 0) {
nums[j++] = nums[i];
}
}
while (j < nums.length) {
nums[j++] = 0;
}
}
三、算法
- 最长公共前缀
题目描述:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例:
输入: ["flower","flow","flight"] 输出: "fl"
解题思路:
对于这道题,我们可以使用纵向扫描法。我们从第一个字符开始,依次比较所有字符串的第一个字符,如果它们都相同,那么我们就将这个字符加入到公共前缀中。接着,我们比较所有字符串的第二个字符,如果它们都相同,那么我们就将这个字符加入到公共前缀中。以此类推,直到遇到一个不同的字符或者某个字符串到达了结尾为止。
代码实现:
public String longestCommonPrefix(String[] strs) {
if (strs == null || strs.length == 0) {
return "";
}
for (int i = 0; i < strs[0].length(); i++) {
char c = strs[0].charAt(i);
for (int j = 1; j < strs.length; j++) {
if (i == strs[j].length() || strs[j].charAt(i) != c) {
return strs[0].substring(0, i);
}
}
}
return strs[0];
}
总结:
通过以上三个题目的解答,我们可以看出,在LeetCode上的题目涉及到的算法和数据结构非常丰富,它们可以帮助我们提高编程能力。而Java作为一门强大的编程语言,可以很好地应用于解决这些问题。相信通过不断练习,我们一定可以在Java编程上更上一层楼!