数组是算法面试中最基础也最常见的数据结构之一。今天我们来梳理几道经典的 LeetCode 数组题目,看看如何用高效的逻辑解决它们。
查找中心点(#1144)
对于一个整数数组,该数组的中心点(pivot)指的是该元素左边的数字之和等于右边的数字之和。比如数组 [1, 7, 3, 6, 5, 6] 的中心点坐标是 3。
核心思路是先计算出数组的总和 sum,然后依次遍历并累加左边集合 leftSum。如果当前索引 i 满足 leftSum == sum - nums[i] - leftSum,说明 i 就是中心点序号。
public int pivotIndex(int[] nums) {
int sum = 0;
for (int num : nums) {
sum += num;
}
int leftSum = 0;
for (int i = 0; i < nums.length; i++) {
if (leftSum == sum - nums[i] - leftSum) {
return i;
}
leftSum += nums[i];
}
return -1;
}
至少是其他元素两倍的最大值(#1147)
在一个整数数组中,如果最大值至少是其他元素的两倍,就返回该最大值的序号,否则返回 -1。
遍历时只需记录最大值及其序号,以及第二大值。拿到这两个关键数据后,比较一下即可得出结论。
public int dominantIndex(int[] nums) {
int largest = Integer.MIN_VALUE;
int secondToLargest = Integer.MIN_VALUE;
int index ;
( ; i < nums.length; i++) {
(nums[i] > largest) {
secondToLargest = largest;
largest = nums[i];
index = i;
} (nums[i] > secondToLargest) {
secondToLargest = nums[i];
}
}
(largest >= * secondToLargest) {
index;
} {
-;
}
}

