LeetCode 724配列の中心インデックスHERODINGのLeetCodeの道を探す
整数タイプの配列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解釈:配列にこの条件を満たす中心インデックスが存在しない.
説明:
ソース:力ボタン(LeetCode)リンク:https://leetcode-cn.com/problems/find-pivot-index著作権はインターネットの所有に帰属する.商業転載は公式の授権に連絡してください.非商業転載は出典を明記してください.
解題構想:まず総数と、最左要素とを定義し、次に総数の和を計算し、最後に再び配列を遍歴し、左から右へ、左右の両側が等しいかどうかを判断し、等しくない左側が累加し続け、判断の根拠は(sumLeft*2+nums[i]==sum)であり、コードは以下の通りである.
公式問題解で使われているaccumulate関数を使ってvector配列の総和を計算してみると、効率がさらに向上しました!コードは次のとおりです.
配列中心インデックスを定義します.配列中心インデックスの左側のすべての要素が加算され、右側のすべての要素が加算された和に等しいです.
配列に中心インデックスが存在しない場合は、-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] 。
ソース:力ボタン(LeetCode)リンク:https://leetcode-cn.com/problems/find-pivot-index著作権はインターネットの所有に帰属する.商業転載は公式の授権に連絡してください.非商業転載は出典を明記してください.
解題構想:まず総数と、最左要素とを定義し、次に総数の和を計算し、最後に再び配列を遍歴し、左から右へ、左右の両側が等しいかどうかを判断し、等しくない左側が累加し続け、判断の根拠は(sumLeft*2+nums[i]==sum)であり、コードは以下の通りである.
class Solution {
public:
int pivotIndex(vector<int>& nums) {
// 、
int sum = 0;
int sumLeft = 0;
//
for(int i = 0; i < nums.size(); i ++) {
sum += nums[i];
}
//
for(int i = 0; i < nums.size(); i ++) {
if(sumLeft * 2 + nums[i] == sum) {
return i;
}
sumLeft += nums[i];
}
return -1;
}
};
/* :heroding
:https://leetcode-cn.com/problems/find-pivot-index/solution/czui-rong-yi-li-jie-de-si-lu-by-heroding-twx5/
: (LeetCode)
。 , 。*/
公式問題解で使われているaccumulate関数を使ってvector配列の総和を計算してみると、効率がさらに向上しました!コードは次のとおりです.
class Solution {
public:
int pivotIndex(vector<int> &nums) {
int total = accumulate(nums.begin(), nums.end(), 0);
int sum = 0;
for (int i = 0; i < nums.size(); ++i) {
if (2 * sum + nums[i] == total) {
return i;
}
sum += nums[i];
}
return -1;
}
};