题解 | #子群的标签和#

子群的标签和

https://www.nowcoder.com/practice/4058a95b317f4f0e87e5a1bfa6db9aad

考察的知识点:哈希;

解答方法分析:

  1. 函数subarraySum接受一个整数数组nums和一个目标值k作为输入,并返回一个二维数组result,其中每个子数组的元素之和等于k。
  2. 函数中使用了两层循环,外层循环遍历数组的起始位置left,内层循环遍历数组的结束位置right。
  3. 在内层循环中,计算从left到right位置的子数组的元素之和sum,并与目标值k进行比较。
  4. 当sum等于k时,将子数组存储到result中。
  5. 为了避免重复的子数组被存储,使用了一个unordered_map resultMap来记录已经出现过的子数组。
  6. 在找到一个满足条件的子数组时,将其转换成字符串形式,并作为key存储到resultMap中。
  7. 如果该子数组还没有出现过,则将其添加到result中,并更新resultMap。
  8. 最后,返回result。

所用编程语言:C++;

完整编程代码:↓

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型vector
     * @param k int整型
     * @return int整型vector<vector<>>
     */
    vector<vector<int> > subarraySum(vector<int>& nums, int k) {
        vector<vector<int>> result;
        unordered_map<string, vector<int>> resultMap;
        int size = nums.size();
        int sum = 0;
        for (int left = 0; left < size; left++) {
            sum = 0;
            for (int right = left; right < size; right++) {
                sum += nums[right];
                if (sum == k) {
                    vector<int> subarray(nums.begin() + left, nums.begin() + right + 1);
                    stringstream ss;
                    for (int num : subarray) {
                        ss << num << ",";
                    }
                    string subarrayStr = ss.str();
                    if (resultMap.find(subarrayStr) == resultMap.end()) {
                        resultMap[subarrayStr] = subarray;
                        result.push_back(subarray);
                    }
                }
            }
        }
        return result;
    }
};

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务