题解 | #牛群的标签和#

牛群的标签和

https://www.nowcoder.com/practice/42ae88bedeb74da99813f6150769d07e

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型一维数组
     * @param target int整型
     * @return int整型二维数组
     */
    public int[][] fourSum (int[] nums, int target) {
        // write code here

        List<List<Integer>> result = new ArrayList<>();
        Arrays.sort(nums);

        for (int i = 0; i < nums.length - 3; i++) {
            if (i > 0 && nums[i] == nums[i - 1]) {
                continue; // 跳过重复元素
            }
            for (int j = i + 1; j < nums.length - 2; j++) {
                if (j > i + 1 && nums[j] == nums[j - 1]) {
                    continue; // 跳过重复元素
                }
                int left = j + 1;
                int right = nums.length - 1;

                while (left < right) {
                    int sum = nums[i] + nums[j] + nums[left] + nums[right];
                    if (sum == target) {
                        result.add(Arrays.asList(nums[i], nums[j], nums[left], nums[right]));
                        while (left < right && nums[left] == nums[left + 1]) left++;
                        while (left < right && nums[right] == nums[right - 1]) right--;
                        left++;
                        right--;
                    } else if (sum < target) {
                        left++;
                    } else {
                        right--;
                    }
                }
            }
        }

        int[][] output = new int[result.size()][4];
        for (int i = 0; i < result.size(); i++) {
            output[i] = new int[] {result.get(i).get(0), result.get(i).get(1), result.get(i).get(2), result.get(i).get(3)};
        }

        return output;
    }
}

Java代码

这个问题涉及以下知识点

  1. 数组操作
  2. 双指针法
  3. 去重
  4. 二维数组

代码的文字解释如下:

  • fourSum 方法接受一个整数数组 nums 和目标值 target 作为输入。
  • 对数组 nums 进行排序,以便进行双指针法处理。
  • 使用两层嵌套循环遍历数组,其中外层循环 i 和内层循环 j 用于固定前两个元素。
  • 在内层循环中,使用双指针 left 和 right 在剩余部分查找满足条件的后两个元素。
  • 如果找到满足条件的四元组,将其添加到 result 列表中,但同时需要跳过重复元素。
  • 将 result 列表中的四元组转换为二维数组 output,以满足函数的返回类型要求。
全部评论

相关推荐

鬼迹人途:你去投一投尚游游戏,服务器一面,第一个图算法,做完了给你一个策略题,你给出方案他就提出低概率问题,答不上当场给你挂
点赞 评论 收藏
分享
机械打工仔:有说的你怀疑一下就行了,直接问也太实诚了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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