c++ - 寻找数组中和为0的子数组
怪我咯
怪我咯 2017-04-17 14:32:45
0
3
297
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;
    }
};

当数据个数比较多时报错

怪我咯
怪我咯

走同样的路,发现不同的人生

全員に返信(3)
Peter_Zhu

質問者さんのアルゴリズムの考え方を見ると、同じ和が2つ出た場合、真ん中の連続する部分配列の和が0と判断できるように修正しました。私の答え。 。
AC コード、シリアル番号を 1 つだけ変更し、それを合計補助加算に変更しました。

リーリー

質問者は通し番号0の質問を私に告げずに==、QAQを黙って変更しました、あなたの地図には通し番号0の位置のマークがないので、今回は1つだけ追加しました位置シーケンス番号 0 の配列。
AC コード、質問者は私と話したくない = =:

リーリー

いいねを押す +0
左手右手慢动作

ソート、トラバース開始、0-arr[i]、この数値を 2 つに分割します。

いいねを押す +0
巴扎黑

リーリー

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート