class Solution {
public:
/**
* @param nums: A list of integers
* @retu rn: A list of integers includes the index of the first number
* and the index of the last number
*/
vector<int> subarraySum(vector<int> nums){
// write your code here
map<int, int> mymap;
mymap[0] = -1;
vector<int> result;
if( !nums.size() ) return result;
if( nums[0] == 0 )
{
result.push_back( 0 );
result.push_back( 0 );
return result;
}
int i = 0;
for( i = 1; i < nums.size(); i++ )
{
nums[i] += nums[ i - 1 ];
if( mymap.find( nums[i] ) == mymap.end() )
mymap[nums[i]] = i;
else
{
result.push_back( mymap[nums[i]] + 1 );
result.push_back( i );
return result;
}
}
return result;
}
};
当数据个数比较多时报错
質問者さんのアルゴリズムの考え方を見ると、同じ和が2つ出た場合、真ん中の連続する部分配列の和が0と判断できるように修正しました。私の答え。 。
リーリーAC コード、シリアル番号を 1 つだけ変更し、それを合計補助加算に変更しました。
質問者は通し番号0の質問を私に告げずに==、QAQを黙って変更しました、あなたの地図には通し番号0の位置のマークがないので、今回は1つだけ追加しました位置シーケンス番号 0 の配列。
リーリーAC コード、質問者は私と話したくない = =:
ソート、トラバース開始、0-arr[i]、この数値を 2 つに分割します。
リーリー