题解 | #子群的标签和# java

子群的标签和

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

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型一维数组
     * @param k int整型
     * @return int整型二维数组
     */
    public int[][] subarraySum (int[] nums, int k) {
        // write code here
        List<List<Integer>> result = new ArrayList<>();
        HashMap<String, List<Integer>> resultMap = new HashMap<>();
        int size = nums.length;

        for (int left = 0; left < size; left++) {
            int sum = 0;

            for (int right = left; right < size; right++) {
                sum += nums[right];

                if (sum == k) {
                    List<Integer> subarray = new ArrayList<>();

                    for (int i = left; i <= right; i++) {
                        subarray.add(nums[i]);
                    }

                    StringBuilder sb = new StringBuilder();

                    for (int num : subarray) {
                        sb.append(num).append(",");
                    }

                    String subarrayStr = sb.toString();

                    if (!resultMap.containsKey(subarrayStr)) {
                        resultMap.put(subarrayStr, subarray);
                        result.add(subarray);
                    }
                }
            }
        }

        int[][] res = new int[result.size()][];

        for (int i = 0; i < result.size(); i++) {
            List<Integer> subarray = result.get(i);
            res[i] = new int[subarray.size()];

            for (int j = 0; j < subarray.size(); j++) {
                res[i][j] = subarray.get(j);
            }
        }

        return res;
    }
}

使用的是Java语言。

该题考察的知识点是数组遍历和子数组求和。

  1. 使用HashMapresultMap来存储已经存在的子数组的字符串表示和对应的子数组对象。
  2. 遍历数组nums,使用两层循环,外层循环控制子数组的起始位置left,内层循环控制子数组的结束位置right
  3. 在内层循环中,通过不断累加元素的和sum,判断当前子数组的和是否等于k,如果相等,则找到了一个符合条件的子数组。
  4. 将符合条件的子数组存储在一个新的ArrayListsubarray中,并将其转换为字符串形式subarrayStr
  5. 判断resultMap中是否已经包含了相同的子数组,如果不包含,则将其加入resultMapresult中。
  6. 循环结束后,将result转换成二维整型数组res返回。
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-11 15:37
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-09 11:30
找工作7个月,投了7000封,3段世界五百强实习,才有一个offer,牛油们肯定比我强吧
码农索隆:不对不对不对,实习经历这么厉害,简历也没少投,问题出在哪呢
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务