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

server/2024/10/21 3:47:20/

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.ppmy.cn/server/12338.html

相关文章

JAVA:maven-->>检查 所有依赖 与 环境 兼容

为了确保你项目中的所有依赖都彼此兼容&#xff0c;并与你的环境相适应&#xff0c;你可以利用 Maven 的依赖管理功能。Maven 有助于解决、升级&#xff0c;并对齐所有库的版本&#xff0c;以避免任何不一致或冲突。以下是检查兼容性的步骤&#xff1a; ### 检查兼容性的步骤&…

文件上传的复习(upload-labs1-5关)

什么是文件上传漏洞&#xff1f; 文件上传本身是一个正常的业务需求&#xff0c;对于网站来说&#xff0c;很多时候也确实需要用户将文件上传到服务器&#xff0c;比如&#xff1a;上传图片&#xff0c;资料。 文件上传漏洞不仅涉及上传漏洞这个行为&#xff0c;还涉及文件上…

MemFire解决方案-政企数据库云服务解决方案

方案背景 随着越来越多的政府部门/企事业单位完成数字化转型升级&#xff0c;新技术的应用日益普遍&#xff0c;对系统并发服务能力的需求不断提高。办公OA、档案、门户、监控、财务、ERP、订单等各类系统对数据库的要求越来越苛刻&#xff0c;很多企业/政府部门都面临如下挑战…

使用 IPAM 解决方案简化分布式网络管理

随着组织在数字领域的全球扩张&#xff0c;分布式网络是不可避免的&#xff0c;这意味着&#xff0c;随着 IT 基础设施的发展&#xff0c;组织需要适应&#xff0c;这包括在不断增长的系统需求、应用程序堆栈、各种协议和安全防御中监控、现代化和简化流程和资源。在有效管理现…

全方位解析:深入了解Microsoft Edge浏览器的优势与特性

目录 1. 速度快&#xff1a; 2. 内存占用低&#xff1a; 3. 集成性好&#xff1a; 4. 支持Web标准&#xff1a; 5. 定制化选项&#xff1a; 6. 阅读模式和笔记功能&#xff1a; 7. 搜索引擎优化&#xff1a; 8. 扩展程序库&#xff1a; 9. 跨平台同步&#xff1a; 10…

React-editor-js not showing up in a function component

React-editor-js not showing up in a function component react-editor-js 在react 函数组件中显示不出来 真的&#xff0c;我马上就想放弃它了。但是看它周下载量还挺多&#xff0c;我不信别人没遇到过。于是我继续在网络上挖呀挖。只是我一开始的方向错了。我一直以为我的写…

华为OD机试真题-任务处理-2023年OD统一考试(C卷D卷)

题目描述: 在某个项目中有多个任务(用 tasks 数组表示)需要您进行处理,其中 tasks[i] = [si, ei],你可以在 si <= day <= ei 中的任意一天处理该任务。请返回你可以处理的最大任务数。 注:一天可以完成一个任务的处理。 输入描述: 第一行为任务数量 n,1 <= n …

fakak详解(2)

Kafka和Flume整合 Kafka与flume整合流程 Kafka整合flume流程图 flume主要是做日志数据(离线或实时)地采集。 图-21 数据处理 图-21显示的是flume采集完毕数据之后&#xff0c;进行的离线处理和实时处理两条业务线&#xff0c;现在再来学习flume和kafka的整合处理。 配置fl…