Java LeetCode篇-深入了解关于数组的经典解法
在LeetCode上,有许多关于数组的经典解法问题,以下是一些例子:
- 规范数组元素顺序
题目描述:
给定一个非空整数数组,返回其中位数。如果数组中的元素数量是奇数,则返回中位数 middlenum,否则返回两个中位数 middlenum1 和 middlenum2 的平均值。
解法:
public class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int[] nums = new int[nums1.length + nums2.length];
int index = 0;
int i = 0, j = 0;
while (i < nums1.length && j < nums2.length) {
if (nums1[i] < nums2[j]) {
nums[index++] = nums1[i++];
} else {
nums[index++] = nums2[j++];
}
}
while (i < nums1.length) {
nums[index++] = nums1[i++];
}
while (j < nums2.length) {
nums[index++] = nums2[j++];
}
if ((nums.length & 1) == 1) {
return nums[nums.length / 2];
} else {
return (nums[nums.length / 2 - 1] + nums[nums.length / 2]) / 2.0;
}
}
}
- 移动零
题目描述:
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,非零元素保持原数组顺序。
解法:
public class Solution {
public void moveZeroes(int[] nums) {
int j = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] != 0) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
j++;
}
}
}
}
- 长度最小的子数组
题目描述:
给定一个含有正整数和负整数的数组,找出总和为零的最短非空子数组。
解法:
public class Solution {
public int minSubArrayLen(int s, int[] nums) {
if (nums == null || nums.length == 0) {
return 0;
}
int ans = Integer.MAX_VALUE;
int sum = 0;
int i = 0;
int j = 0;
while (i < nums.length) {
// try to move forward and find a valid subarray
if (sum < s) {
sum += nums[i++];
} else {
// we have found a valid subarray
ans = Math.min(ans, i - j);
sum -= nums[j++];
}
}
return ans == Integer.MAX_VALUE ? 0 : ans;
}
}
这些例子展示了如何使用数组和一些经典的算法来解决LeetCode上的问题。每个解法都有效率高,易于理解的特点。
评论已关闭