724. 寻找数组的中心索引
给定一个整数类型的数组 nums,请编写一个能够返回数组“中心索引”的方法。
我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。
如果数组不存在中心索引,那么我们应该返回 -1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。
示例 1:
输入:
nums = [1, 7, 3, 6, 5, 6]
输出: 3
解释:
索引3 (nums[3] = 6) 的左侧数之和(1 + 7 + 3 = 11),与右侧数之和(5 + 6 = 11)相等。
同时, 3 也是第一个符合要求的中心索引。
示例 2:
输入:
nums = [1, 2, 3]
输出: -1
解释:
数组中不存在满足此条件的中心索引。
说明:
nums的长度范围为[0, 10000]。- 任何一个
nums[i]将会是一个范围在[-1000, 1000]的整数。
第一版,这题比想象中的要容易许多啊..
执行用时 :20 ms, 在所有 cpp 提交中击败了98.55%的用户
内存消耗 :9.9 MB, 在所有 cpp 提交中击败了77.04%的用户
intpivotIndex(vector<int>&nums) {
intsum=accumulate(nums.begin(), nums.end(), 0);
inttemp=0;
for (inti=0; i<nums.size(); ++i) {
if (temp*2==sum-nums[i]) {
returni;
}
temp+=nums[i];
}
return-1;
}
941. 有效的山脉数组
给定一个整数数组 A,如果它是有效的山脉数组就返回 true,否则返回 false。
让我们回顾一下,如果 A 满足下述条件,那么它是一个山脉数组:
A.length >= 3- 在
0 < i < A.length - 1
- 条件下,存在
i
- 使得:
A[0] < A[1] < ... A[i-1] < A[i]A[i] > A[i+1] > ... > A[B.length - 1]
示例 1:
输入:[2,1]
输出:false
示例 2:
输入:[3,5,5]
输出:false
示例 3:
输入:[0,3,2,1]
输出:true
提示:
0 <= A.length <= 100000 <= A[i] <= 10000
第一版,自己写的,还可以
执行用时 :28 ms, 在所有 cpp 提交中击败了97.74%的用户
内存消耗 :10.3 MB, 在所有 cpp 提交中击败了81.20%的用户
boolvalidMountainArray(vector<int>&A) {
if (A.size() <3) returnfalse;
if (A[1] <=A[0]) returnfalse;
inti=1, j=A.size() -1;
while (i<j) {
if (A[i] <A[i+1] &&A[j] <A[j-1]) {
i++;
j--;
}else if (A[j] <A[j-1]) {
j--;
}
elseif(A[i] <A[i+1]) {
i++;
}
else
returnfalse;
}
returni==j&&j!=A.size()-1;//要预防数组最后一位为最大的情况,也就是j至少要等于A.size()-2
}