代码随想录算法训练营第7天 | 454. 四数相加 II | 383. 赎金信 | 15. 三数之和 | 18. 四数之和

454. 四数相加 II

题意

找出四个数组中元素和为0的次数

class Solution {
public:int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {unordered_map<int, int> map;int ans = 0;for (int i : nums1) {for (int j : nums2) {map[i+j]++;}}for (int i : nums3) {for (int j : nums4) {if (map.count(-i-j)) {ans += map[-i-j];}}}return ans;}
};

383. 赎金信

题意

字符串a, 是否能用字符串b中的元素拼出来

#define max 1e5+10bool canConstruct(char* ransomNote, char* magazine) {int hash[10005];memset(hash, 0, sizeof(int) * 10005);for (int i = 0; magazine[i]; i++) {hash[magazine[i] - 'a']++;}for (int i = 0; ransomNote[i]; i++) {if (hash[ransomNote[i] - 'a']-- == 0) {return false;}}return true;
}

15. 三数之和

题意

一个数组, 三个元素相加等于0, 注意:答案中不可以包含重复的三元组。

排序后去重, 就可以将重复的三元组去除.
固定一个元素, 另外两个成员用双指针表示

/*** Return an array of arrays of size *returnSize.* The sizes of the arrays are returned as *returnColumnSizes array.* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().*/int cmp(const void *a, const void *b) {return *(int *)a > *(int *)b;
}int** threeSum(int* nums, int numsSize, int* returnSize, int** returnColumnSizes) {int **array = (int **)malloc(sizeof(int *) * 30000);int h = 0;for (int i = 0; i < 30000; i++) {array[i] = (int *)malloc(sizeof(int) * 3);}qsort(nums, numsSize, sizeof(int), cmp);for (int i = 0; i < numsSize; i++) {if (nums[i] > 0) break;if (i > 0 && nums[i] == nums[i-1]) continue;int j = i+1, k = numsSize-1;while (j < k) {if (nums[i] + nums[j] + nums[k] < 0) {j++;} else if (nums[i] + nums[j] + nums[k] > 0) {k--;} else {array[h][0] = nums[i];array[h][1] = nums[j];array[h++][2] = nums[k];while (j < k && nums[j] == nums[j+1]) j++;while (j < k && nums[k] == nums[k-1]) k--;j++;k--;}}}*returnSize = h;*returnColumnSizes = (int *)malloc(sizeof(int) * 30000);for (int i = 0; i < h; i++) {(*returnColumnSizes)[i] = 3;}return array;
}

数组要申请的大一些, 否则报内存错误

18. 四数之和

题目链接

题意

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

/*** Return an array of arrays of size *returnSize.* The sizes of the arrays are returned as *returnColumnSizes array.* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().*/#define max 100int cmp(const void *a, const void *b) {return *(int *)a > *(int *)b;
}int** fourSum(int* nums, int numsSize, int target, int* returnSize, int** returnColumnSizes) {int **array = NULL;int k = 0;array = (int **)malloc(sizeof(int *) * max);for (int i = 0; i < max; i++) {array[i] = (int *)malloc(sizeof(int) * 5);}qsort(nums, numsSize, sizeof(int), cmp);for (int i = 0; i < numsSize-3; i++) {if (i > 0 && nums[i] == nums[i-1]) continue;if ((long)nums[i] + nums[i+1] - target > -(nums[i+2] + nums[i+3])) break;if ((long)nums[i] + nums[numsSize-3] + nums[numsSize-2] + nums[numsSize-1] < target) continue;for (int j = i+1; j < numsSize-2; j++) {if (j > i+1 && nums[j] == nums[j-1]) continue;if ((long)nums[i] + nums[j] + nums[j+1] + nums[j+2] > target) break;;if ((long)nums[i] + nums[j] + nums[numsSize-1] + nums[numsSize-2] < target) continue;int n = j+1, m = numsSize-1;while (n < m) {if ((long)nums[i] + nums[j] + nums[n] + nums[m] < target) {n++;} else if ((long)nums[i] + nums[j] + nums[n] + nums[m] > target) {m--;} else {array[k][0] = nums[i];array[k][1] = nums[j];array[k][2] = nums[n];array[k++][3] = nums[m];while (n < m && nums[n] == nums[n+1]) n++;while (n < m && nums[m] == nums[m-1]) m--;n++;m--;}}}}*returnSize = k;*returnColumnSizes = (int *)malloc(sizeof(int) * k);for (int i = 0; i < k; i++) {(*returnColumnSizes)[i] = 4;}return array;
}

注意边界判断于整型溢出

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

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

相关文章

springboot+thymeleaf实现一个简单的监听在线人数功能

功能步骤&#xff1a; 1. 当用户访问登录页面时&#xff0c;Logincontroller的showLoginForm方法被调用&#xff0c;返回登录页面的视图名字。 2. 用户提交表单&#xff0c;调用LoginController的login方法。 3.login方法 4.登录验证通过&#xff0c;home方法会被调用&#xf…

C++解方程组的库

解决多元多次方程组的问题&#xff0c;你可以考虑以下几个C库&#xff1a; Eigen: Eigen库是一个高性能的C模板库&#xff0c;用于线性代数运算。它提供了强大的矩阵运算功能&#xff0c;可以用来解多元一次方程组。对于多次方程组&#xff0c;你可能需要结合Eigen和一些数值优…

深入解读CSS高级选择器

CSS选择器是网页样式设计的核心组成部分&#xff0c;它们使开发者能够精准定位页面上的元素并施加相应的样式。在众多选择器中&#xff0c;高级选择器因其强大的定位能力和灵活性备受青睐。接下来&#xff0c;我们将逐一详解这些高级选择器&#xff0c;并通过实例代码加深理解。…

VMware 中将 Rocky Linux 设置为图形界面

在 VMware 中将 Rocky Linux 设置为图形界面的步骤如下&#xff1a; 安装 Rocky Linux&#xff1a;首先&#xff0c;在 VMware 中创建一个新的虚拟机&#xff0c;并按照常规步骤安装 Rocky Linux。确保在安装过程中选择安装图形界面的选项。 启动 Rocky Linux&#xff1a;完成…

C++笔试强训day7

目录 1.字符串中找出连续最长的数字串 2.岛屿数量 3.拼三角 1.字符串中找出连续最长的数字串 链接 我的思路很简洁&#xff0c;就是双指针遍历&#xff0c;然后不断更新左位置left和右位置right和长度len。 然后我写代码的时候代码思路没跟上原本思路&#xff0c;直接把所有…

HTTP网络协议,接口请求的内容类型 content-type(2024-04-27)

1、简介 Content-Type&#xff08;内容类型&#xff09;&#xff0c;一般是指网页中存在的 Content-Type&#xff0c;用于定义网络文件的类型和网页的编码&#xff0c;决定浏览器将以什么形式、什么编码读取这个文件&#xff0c;这就是经常看到一些 PHP 网页点击的结果却是下载…

OSI七层模型、TCP/IP五层模型理解(个人解读,如何理解网络模型)

OSI七层模型 七层模型&#xff0c;亦称OSI&#xff08;Open System Interconnection&#xff09;。参考模型是国际标准化组织&#xff08;ISO&#xff09;制定的一个用于计算机或通信系统间互联的标准体系&#xff0c;一般称为OSI参考模型或七层模型。它是一个七层的、抽象的模…

航片卫星影像局部几何纠偏-道路错位校正

原图道路错位如下图所示&#xff1a; 局部几何纠偏结果如下图所示&#xff1a; 操作视频教程&#xff1a; MCM智拼图软件V8.5-局部位置纠偏-几何校正-PS联动_哔哩哔哩_bilibili

11 c++版本的贪吃蛇

前言 呵呵 这大概是 大学里面的 c 贪吃蛇了吧 有一些 面向对象的理解, 但是不多 最近 因为想要 在单片机上面移植一下 贪吃蛇, 所以 重新拿出了一下 这份代码 然后 将它更新为 c 版本, 还是 用了一些时间 这里 具体的实现 就不赘述, 仅仅是 发一下代码 以及 具体的使用…

数据结构中的栈和队列(附实际案例代码)

1.栈和队列的定义和特点 栈&#xff08;Stack&#xff09;和队列&#xff08;Queue&#xff09;是两种基本的数据结构&#xff0c;它们都属于线性表&#xff0c;即数据元素的存储和访问都是线性的。但它们之间也存在着一些区别。 1.1栈的特点 栈是一种后进先出&#xff08;LI…

pandas数据分析综合练习50题 - 地区房价分析

数据源 我们将使用一个公开的数据集&#xff0c;“纽约市Airbnb开放数据集”。这个数据集包含了纽约市Airbnb的上万条房源信息&#xff0c;包括价格、位置、房东信息和评论数量等字段。 获取方式1 - 本文资源文件下载 可在文章绑定资源中下载。 获取方式2 - 网页下载 直接…

上位机图像处理和嵌入式模块部署(树莓派4b用skynet实现进程通信)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们说过&#xff0c;在工业系统上面一般都是使用多进程来代替多线程。这后面&#xff0c;主要的原因还是基于安全的考虑。毕竟一个系统里面&a…

Git Tag 打标签

参考地址&#xff1a;Git基础 - git tag 一文真正的搞懂git标签的使用-CSDN博客 创建标签 $ git tag -a 标签名称 -m 附注信息 or $ git tag -a 标签名称 提交版本号 -m 附注信息说明&#xff1a; -a : 理解为 annotated 的首字符&#xff0c;表示 附注标签 -m : 指定附注信息…

北斗引路,太阳为源,定位报警,保护渔业,安全护航!

2022年1月&#xff0c;农业农村部发布《“十四五”全国渔业发展规划》明确提出&#xff0c;到2025年&#xff0c;渔业质量效益和竞争力明显增强&#xff0c;渔业基础设施和装备条件明显改善&#xff0c;渔业治理体系和治理能力现代化水平明显提高&#xff0c;实现产业更强、生态…

用Excel做一个功能完备的仓库管理系统

1 基本设计思路 用到的Excel技术&#xff1a;sumif, vlookup, 表格(table)。基本思路&#xff1a;在有基础的商品、仓库等信息的情况下&#xff0c;对商品的每一个操作都有对应的单据&#xff0c;然后再汇总统计。标识&#xff1a;为了在不同的维度统计数量&#xff0c;各单据…

MySQL的主主(Master-Master)生产环境中遇到的常见问题

在MySQL的主主&#xff08;Master-Master&#xff09;生产环境中&#xff0c;由于涉及到数据的双向同步&#xff0c;可能会遇到一系列问题。以下是一些常见的问题及其简要说明&#xff1a; 数据冲突和不一致&#xff1a;由于两个主服务器都在写入数据&#xff0c;当它们几乎同时…

HarmonyOS开发案例:【使用List组件实现设置项】

介绍 在本篇CodeLab中&#xff0c;我们将使用List组件、Toggle组件以及Router接口&#xff0c;实现一个简单的设置页&#xff0c;点击将跳转到对应的详细设置页面。效果图如下&#xff1a; 相关概念 [CustomDialog]&#xff1a;CustomDialog装饰器用于装饰自定义弹窗。[List]…

Linux 权限与软件包管理器 yum

一. 研究Linux默认权限 目录 &#xff0c;起始权限&#xff1a;777 普通文件&#xff0c;起始权限666 Linux系统中存在权限掩码 使用umask指令也可以改变掩码 如果将掩码改为0000 我们可以看到权限发生改变&#xff08;重新设置掩码&#xff09; 最终权限起始权限 去掉 权限…

通过easyExcel实现表格的导入导出

本篇为&#xff0c;通过easyExcel实现 多种数据类型表格 的导入导出 引入2.2.11版本easyExcel依赖 <font color-“byle”>easyExcel版本不同&#xff0c;converter接口中的方法也不相同&#xff0c;一定要注意版本的使用 <dependency><groupId>com.alibaba&…

[华为OD] 给航天器一侧加装长方形或正方形的太阳能板 100

给航天器一侧加装长方形或正方形的太阳能板&#xff08;图中的红色斜线区域&#xff09;&#xff0c;需要先安装两个支 柱&#xff08;图中的黑色竖条&#xff09;&#xff0c;再在支柱的中间部分固定太阳能板。但航天器不同位置的支柱长度 不同&#xff0c;太阳能板的安装面…