【LeetCode】第18题. 四数之和

news/2024/11/20 13:20:29/

  今日学习的文章链接和视频链接

leetcode题目地址:第18题. 四数之和

 代码随想录题解地址:代码随想录

题目简介

给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):

  • 0 <= a, b, c, d < n
  • abc 和 d 互不相同
  • nums[a] + nums[b] + nums[c] + nums[d] == target

你可以按 任意顺序 返回答案 。

看到题目的第一想法(可以贴代码)

1. 参考三数之和,排序+双重遍历+双元素+双指针(含去重)。

        去重的逻辑我想不清楚:拿草稿纸慢慢想,写出来了。

public List<List<Integer>> fourSum(int[] nums, int target) {Arrays.sort(nums);int len = nums.length;int sum = 0;int left = 0, right = 0;List<List<Integer>> res = new ArrayList<>();for (int i = 0; i < len - 3; i++){if (i > 0 && nums[i] == nums[i - 1]) continue;for (int j = i + 1; j < len - 2; j++){left = j + 1;right = len - 1;while (left < right){sum = nums[i] + nums[j] + nums[left] + nums[right];if (sum == -294967297 ||sum == -294967296) return res;if (sum == target){res.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--;if (nums[left - 1] == nums[j]){while (j < len - 2 && nums[j] == nums[j + 1]) j++;j--;}else {while (j < len - 2 && nums[j] == nums[j + 1]) j++;}}else if (sum < target){left++;}else if (sum > target){right--;}}}}return res;
}

实现过程中遇到哪些困难

1. int类型最大值和最小值分别为2147483647, -2147483648;如果超出最大值会变为-294967297和 -294967296,不太懂它的原理,要不是补码,要不是力扣自定义。

看完代码随想录之后的想法

【解题思路】参考三数之和,二重剪枝+二重去重。

【想法】

1. 关于超出int的表示范围:可以将sum设为long类型,同时sum赋值前也要加(long),强制转换

2. 关于我思考的-1,-1,-1,3和-1,-1,0,2,前两个数两次取-1,-1的情况,可以在底下的while里实现。

3. 两次剪枝,我直接省略了。

看完视频自己写的ACC:

public List<List<Integer>> fourSum(int[] nums, int target) {Arrays.sort(nums);int len = nums.length;long sum = 0;int left = 0, right = 0;List<List<Integer>> res = new ArrayList<>();for (int i = 0; i < len - 3; i++){if (nums[i] > 0 && nums[i] > target) return res;if (i > 0 && nums[i] == nums[i - 1]) continue;for (int j = i + 1; j < len - 2; j++){if (j > i + 1 && nums[j] == nums[j - 1]) continue;left = j + 1;right = len - 1;while (left < right){sum = (long) nums[i] + nums[j] + nums[left] + nums[right];if (sum == target){res.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 if (sum > target){right--;}}}}return res;
}

学习时长

碎片化,不记录


今日收获

1. 变量定义不要放在最前面,哪里用得到就在哪里定义,重复定义了也没事。。?

2. 代码风格:()和 {} 前后都要预留空格。


http://www.ppmy.cn/news/1271487.html

相关文章

CSS层叠样式表一

1&#xff0c;CSS简介 1.1 CSS-网页的美容师 CSS的主要使用场景就是美化网页&#xff0c;布局页面的 CSS也是一种标记语言 CSS主要用于设置HTML页面中的文本内容&#xff08;字体&#xff0c;大小&#xff0c;对齐方式等&#xff09;、图片的外形&#xff08;宽高、边框样式…

WX小程序案例(一):弹幕列表

WXML内容 <!--pages/formCase/formCase.wxml--> <!-- <text>pages/formCase/formCase.wxml</text> --> <view class"bk bkimg"><!-- <image src"/static/imgs/ceeb653ely1g9na2k0k6ug206o06oaa8.gif" mode"scal…

亿欧网首届“元创·灵镜”科技艺术节精彩纷呈,实在智能AI Agent智能体展现硬核科技图景

12月4日-10日&#xff0c;持续一周的首届“元创灵镜”科技艺术节在海南陵水香水湾拉开帷幕&#xff0c;虚实交互创造出的“海岛之镜”开幕式呈现出既真实又虚幻的未来感&#xff0c;融入前沿科技元素的艺术装置作品在“虚实之镜&自然生长”科技艺术展诠释着浪漫想象&#x…

Java EE 多线程之线程安全的集合类

文章目录 1. 多线程环境使用 ArrayList1. 1 Collections.synchronizedList(new ArrayList)1.2 CopyOnWriteArrayList 2. 多线程环境使用队列2.1 ArrayBlockingQueue2.2 LinkedBlockingQueue2.3 PriorityBlockingQueue2.4 TransferQueue 3. 多线程环境使用哈希表3.1 Hashtable3.…

机器学习笔记 - 了解学习率对神经网络性能的影响

一、简述 深度学习神经网络使用随机梯度下降优化算法进行训练。学习率是一个超参数,它控制每次更新模型权重时响应估计误差而改变模型的程度。学习率值太小可能会导致训练过程过长并可能陷入困境,而值太大可能会导致过快地学习次优权重或训练过程不稳定。 配置神经网络时,学…

LeetCode(62)删除排序链表中的重复元素 II【链表】【中等】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 删除排序链表中的重复元素 II 1.题目 给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1…

Halcon 深度学习语义分割

1.1根据txt格式标签生成Label图片 (1) 经过测试验证&#xff0c;使用python代码或者halcon代码生成的Label图片是一样的。但要注意&#xff0c;最后要生成png格式的Label图片。 (2) 使用python代码生成Label图片 import cv2 import os import numpy as npdef gen_label_img(…

Java系列-ConcurrentHashMap构造方法

1.无参 什么都没做 public class ConcurrentHashMap<K,V> extends AbstractMap<K,V>implements ConcurrentMap<K,V>, Serializable {private static final float LOAD_FACTOR 0.75f;public ConcurrentHashMap() {} } 2.带初始容量 public class Concurr…