重新刷题求职2-DAY7

1.454. 四数相加 II

给你四个整数数组 nums1nums2nums3nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:

  • 0 <= i, j, k, l < n
  • nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0

示例 1:

输入:nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2]
输出:2
解释:
两个元组如下:
1. (0, 0, 0, 1) -> nums1[0] + nums2[0] + nums3[0] + nums4[1] = 1 + (-2) + (-1) + 2 = 0
2. (1, 1, 0, 0) -> nums1[1] + nums2[1] + nums3[0] + nums4[0] = 2 + (-1) + (-1) + 0 = 0

示例 2:

输入:nums1 = [0], nums2 = [0], nums3 = [0], nums4 = [0]
输出:1

没有太复杂的思路,就是用一个dict将 o(n4)的复杂度变成了o(n2)的复杂度,空间换时间

from collections import defaultdictclass Solution:def fourSumCount(self, nums1: List[int], nums2: List[int], nums3: List[int], nums4: List[int]) -> int:# 使用dict 将复杂度将为 O(n2)sum_dict = defaultdict(int)for num1 in nums1:for num2 in nums2:cur_value = num1 + num2sum_dict[cur_value] += 1res = 0        for num3 in nums3:for num4 in nums4:cur_value = -(num3 + num4)if sum_dict[cur_value] > 0:res += sum_dict[cur_value]return res

2.383. 赎金信

给你两个字符串:ransomNotemagazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。

如果可以,返回 true ;否则返回 false

magazine 中的每个字符只能在 ransomNote 中使用一次。

示例 1:

输入:ransomNote = "a", magazine = "b"
输出:false

示例 2:

输入:ransomNote = "aa", magazine = "ab"
输出:false

示例 3:

输入:ransomNote = "aa", magazine = "aab"
输出:true
class Solution:def canConstruct(self, ransomNote: str, magazine: str) -> bool:# 很简单,普通的一个哈希表/dict;也可以用一个数组(下表和字母进行对应)mag_dict = {}total_value = 0for char in magazine:if char not in mag_dict:mag_dict[char] = 1else:mag_dict[char] += 1for char in ransomNote:if char not in mag_dict:return Falseif mag_dict[char] < 1:return Falsemag_dict[char] -= 1return True

3.15. 三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != ji != kj != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。

**注意:**答案中不可以包含重复的三元组。

示例 1:

输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
解释:
nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。
nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。
nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0 。
不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。
注意,输出的顺序和三元组的顺序并不重要。

示例 2:

输入:nums = [0,1,1]
输出:[]
解释:唯一可能的三元组和不为 0 。

示例 3:

输入:nums = [0,0,0]
输出:[[0,0,0]]
解释:唯一可能的三元组和为 0 。
class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:#和两数求和的双指针好像没有什么不同,只是求和的target 一直在变#只是要注意去重就行了res = []nums = sorted(nums)for i in range(0, len(nums) - 2):if i > 0 and nums[i] == nums[i-1]:continuej, k = i + 1, len(nums) - 1while j < k:target = -nums[i]if j > i + 1 and nums[j] == nums[j-1]:j += 1continueif k < len(nums) - 1 and nums[k] == nums[k+1]:k -= 1continueif nums[j] + nums[k] > target:k -= 1else:if nums[j] + nums[k] == target:res.append([nums[i], nums[j], nums[k]])j += 1return res

标准解法

外层循环去重逻辑一样,内层循环,先计算total,如果等于0就添加,然后left, right 一直移动直到不是重复的元素。

class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:# 先对数组排序nums.sort()n = len(nums)res = []# 遍历数组,固定第一个数for i in range(n):# 跳过重复元素,避免重复结果if i > 0 and nums[i] == nums[i-1]:continue# 使用双指针在剩余数组中寻找两个数left = i + 1right = n - 1while left < right:# 计算三数之和total = nums[i] + nums[left] + nums[right]# 根据和的大小调整指针if total == 0:res.append([nums[i], nums[left], nums[right]])# 跳过重复元素while left < right and nums[left] == nums[left+1]:left += 1while left < right and nums[right] == nums[right-1]:right -= 1left += 1right -= 1elif total < 0:left += 1else:right -= 1return res

4.18. 四数之和

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

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

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

示例 1:

输入:nums = [1,0,-1,0,-2,2], target = 0
输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]

示例 2:

输入:nums = [2,2,2,2,2], target = 8
输出:[[2,2,2,2]]

核心思路

其实就是和三数之和没什么差别,只是在原来的基础上再套一层类似于i的循环j,也进行去重就行了

class Solution:def fourSum(self, nums: List[int], target: int) -> List[List[int]]:nums = sorted(nums)res = []for i in range(len(nums) - 3):if i > 0 and nums[i] == nums[i-1]:continuefor j in range(i + 1, len(nums) - 2):if j > i + 1 and nums[j] == nums[j-1]:continuecur_sum = nums[i] + nums[j]left, right = j + 1, len(nums) - 1while left < right:total = nums[left] + nums[right] + cur_sumif total == target:res.append([nums[i], nums[j], nums[left], nums[right]])while left < right and nums[left] == nums[left + 1]:left += 1while left < right and nums[right] == nums[right - 1]:right -= 1left += 1right -= 1elif total > target:right -= 1else:left += 1return res

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/70464.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何用大语言模型提高工作效率

软件工程师对大型语言模型&#xff08;LLM&#xff09;的看法存在严重分歧。许多人认为它们是迄今为止对该行业最具变革性的技术。另一些人则认为它们不过是又一个炒作过度的产品&#xff1a;想想很兴奋&#xff0c;但最终对从事严肃工作的专业人士来说毫无用处。 就我个人而言…

CSP晋级组比赛生成文件夹与文件通用代码Python

快速生成文件夹与文件的脚本 import sys import osmyfiles sys.argv[1::] for f in myfiles:os.mkdir(f)os.system(f"touch {f}/{f}.in")os.system(f"touch {f}/{f}.out")os.system(f"touch {f}/{f}.cpp")with open("template.cpp",…

基于STM32校车安全监控系统的设计(论文+源码+实物

1 方案设计 根据设计要求&#xff0c;本设计校车安全监控系统的设计以STM32F103单片机作为主控制器&#xff0c;通过MQ传感器实现异常气体的检测&#xff0c;当异常气体浓度异常时会通过继电器打开车窗进行通风&#xff0c;以保证舒适的环境&#xff0c;通过红外传感器用于监测…

Vite 打包原理

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

基于yolo的视频检测分析

基于yolo的视频检测分析 分步骤实现视频处理、目标检测与追踪、动作分析、计数逻辑&#xff0c;然后整合成API 完整的解决方案&#xff0c;包含视频分析逻辑和API封装&#xff0c;使用Python、YOLOv8和FastAPI实现代码如下&#xff1a; python代码实现 import os import uu…

探索C语言:寻找数组中连续1的最大长度

在编程的世界里&#xff0c;我们常常会遇到各种有趣的算法问题&#xff0c;今天让我们来深入剖析一段C语言代码&#xff0c;它的功能是在给定的整数数组中找出连续1的最大长度。 一、代码功能概述 这段代码定义了一个名为 findMaxConsecutiveOnes 的函数&#xff0c;它接受一个…

人工智能应用-智能驾驶精确的目标检测和更高级的路径规划

实现更精确的目标检测和更高级的路径规划策略是自动驾驶领域的核心任务。以下是一个简化的示例&#xff0c;展示如何使用Python和常见的AI库&#xff08;如TensorFlow、OpenCV和A*算法&#xff09;来实现这些功能。 1. 环境准备 首先&#xff0c;确保安装了以下库&#xff1a;…

归一化与伪彩:LabVIEW图像处理的区别

在LabVIEW的图像处理领域&#xff0c;归一化&#xff08;Normalization&#xff09;和伪彩&#xff08;Pseudo-coloring&#xff09;是两个不同的概念&#xff0c;虽然它们都涉及图像像素值的调整&#xff0c;但目的和实现方式截然不同。归一化用于调整像素值的范围&#xff0c…

MySQL8.0实现MHA高可用

一、简介 MHA&#xff08;Master HA&#xff09;是一款开源的 MySQL 的高可用程序&#xff0c;它为 MySQL 主从复制架构提供了 automating master failover 功能。MHA 在监控到 master 节点故障时&#xff0c;会提升其中拥有最新数据的 slave 节点成为新的master 节点&#xf…

记录 | WPF基础学习登录界面制作

目录 前言一、普通方式Step1 创建项目Step2 设计布局Step3 对剩余布局进行内容填充可执行代码下载 Step4 编写点击事件Step5 创建新WPF窗口Step6 简单写点Index内容Step7 跳转到Index当前代码下载 二、绑定方式绑定用户名【单向绑定】双向绑定代码提供 三、MVVM方式1&#xff1…

关于32位和64位程序的传参方法及虚拟机调试工具总结

一、传参方法对比 1. 32位程序 系统调用 (Linux) 使用int 0x80指令触发系统调用 寄存器传参顺序&#xff1a; eax 系统调用号 ebx 第1个参数 ecx 第2个参数 edx 第3个参数 esi 第4个参数 edi 第5个参数 普通函数调用 (C语言) 栈传递参数&#xff1a;参数从右向左压栈…

vivado 7 系列器件时钟

7 系列器件时钟 注释&#xff1a; 本章节以 Virtex -7 时钟源为例。 Virtex-6 的时钟资源与此类似。如果使用不同的架构&#xff0c;请参阅有关器件的 《时 钟资源指南》 [ 参照 40] 。 Virtex-6 和 Virtex-7 器件内含 32 个称为 BUFG 的全局时钟缓存。 BUFG 可满…

无须付费,安装即是完全版!

不知道大家有没有遇到过不小心删掉了电脑上超重要的文件&#xff0c;然后急得像热锅上的蚂蚁&#xff1f; 别担心&#xff0c;今天给大家带来一款超给力的数据恢复软件&#xff0c;简直就是拯救文件的“救星”&#xff01; 数据恢复 专业的恢复数据软件 这款软件的界面设计得特…

Vue全流程--Vue2路由

引入路由的原因&#xff1a; 实现单页面应用&#xff08;SPA&#xff09; 什么是单页面应用&#xff1a; 1、点击跳转链接后直接在原本的页面展示。路径发生相应改变 2、整个应用只有一个完整页面 3、数据需要通过ajax获取 Vue2中的路由是什么&#xff1a; Vue2路由是一…

【图片合并转换PDF】如何将每个文件夹下的图片转化成PDF并合并成一个文件?下面基于C++的方式教你实现

医院在为患者进行诊断和治疗过程中&#xff0c;会产生大量的医学影像图片&#xff0c;如 X 光片、CT 扫描图、MRI 图像等。这些图片通常会按照检查时间或者检查项目存放在不同的文件夹中。为了方便医生查阅和患者病历的长期保存&#xff0c;需要将每个患者文件夹下的图片合并成…

Racecar Gym 总结

1.Racecar Gym 简介 Racecar Gym 是一个基于 PyBullet 物理引擎 的自动驾驶仿真平台&#xff0c;提供 Gymnasium&#xff08;OpenAI Gym&#xff09; 接口&#xff0c;主要用于强化学习&#xff08;Reinforcement Learning, RL&#xff09;、多智能体竞速&#xff08;Multi-Ag…

【实战】excel分页写入导出大文件

类 RequestMapping("export")ResponseBodypublic void export(HttpServletResponse response) {long start System.currentTimeMillis();QueryVo query new QueryVo();// response响应头setResponseHeader(response, "excel");ExcelWriter writer Excel…

基于微信小程序的医院预约挂号系统的设计与实现

hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生…

【机器学习】K-Nearest Neighbor KNN算法原理简介及要点

KNN算法用于分类 简介KNN分类算法的流程距离度量K值选择分类表决加权分类表决 简介 KNN的全称是K Nearest Neighbors. 这种算法可以被用来进行分类&#xff0c;原理是根据离特征点最近的K个点所属的类别进行分类。 KNN分类算法的流程 KNN算法的整体流程是我们需要将训练数据…

智体链:大语言模型协作完成长上下文任务

25年1月来自Penn State U和谷歌云的论文“Chain of Agents: Large Language Models Collaborating on Long-Context Tasks”。 解决有效处理长上下文的挑战已成为大语言模型 (LLM) 的关键问题。出现了两种常见策略&#xff1a;1&#xff09;减少输入长度&#xff0c;例如通过检…