代码随想录第三十一天(一刷C语言)|无重叠区间划分字母区间合并区间

创作目的:为了方便自己后续复习重点,以及养成写博客的习惯。

一、无重叠区间

思路:参考carl文档

        按照右边界排序,从左向右记录非交叉区间的个数。最后用区间总数减去非交叉区间的个数就是需要移除的区间个数了。

ledcode题目:https://leetcode.cn/problems/non-overlapping-intervals/description/

AC代码:

int cmp(int** a, int** b) {
    return (*a)[1] - (*b)[1];
}

int eraseOverlapIntervals(int** intervals, int intervalsSize, int* intervalsColSize) {
    if (intervalsSize == 0) {
        return 0;
    }

    qsort(intervals, intervalsSize, sizeof(int*), cmp);

    int right = intervals[0][1];
    int ans = 1;
    for (int i = 1; i < intervalsSize; ++i) {
        if (intervals[i][0] >= right) {
            ++ans;
            right = intervals[i][1];
        }
    }
    return intervalsSize - ans;
}

二、划分字母区间

思路:参考carl文档

        统计每一个字符最后出现的位置,从头遍历字符,并更新字符的最远出现下标。如果找到字符最远出现位置下标和当前下标相等了,则找到了分割点

lecode题目:https://leetcode.cn/problems/partition-labels/description/

AC代码:

int* partitionLabels(char* s, int* returnSize) {
    int last[26];
    int length = strlen(s);
    for (int i = 0; i < length; i++) {
        last[s[i] - 'a'] = i;
    }
    int* partition = (int*)malloc(sizeof(int) * length);
    int start = 0, end = 0;
    *returnSize = 0;
    for (int i = 0; i < length; i++) {
        end = fmax(end, last[s[i] - 'a']);
        if (i == end) {
            partition[(*returnSize)++] = end - start + 1;
            start = end + 1;
        }
    }
    return partition;
}

三、合并区间

思路:参考carl文档

        按照左边界从小到大排序之后,如果 intervals[i][0] <= intervals[i - 1][1] 即intervals[i]的左边界 <= intervals[i - 1]的右边界,则一定有重叠。合并区间后左边界和右边界,作为一个新的区间,加入到result数组里。如果没有合并就把原区间加入到result数组。

ledcode题目:https://leetcode.cn/problems/merge-intervals/description/

AC代码:

int cmp(const void* a, const void* b){
    return (*(int**)a)[0] > (*(int**)b)[0] ? 1 : -1;
}
int** merge(int** intervals, int intervalsSize, int* intervalsColSize, int* returnSize, int** returnColumnSizes){
    if (intervals == NULL || intervalsSize == 0) {
        return NULL;
    }
    qsort(intervals, intervalsSize, sizeof(int*), cmp);
    
    int right = intervals[0][1];
    int** res = (int**)calloc(intervalsSize, sizeof(int*));
    * returnColumnSizes = (int*)calloc(intervalsSize, sizeof(int));
    for (int i = 0; i < intervalsSize; i++) {
        res[i] = (int*)calloc(2, sizeof(int));
        (* returnColumnSizes)[i] = 2;
    }
    *returnSize = 0;
    res[*returnSize][0] = intervals[0][0];
    res[*returnSize][1] = intervals[0][1];
    (* returnSize)++;
    for (int i = 1; i < intervalsSize; i++) {
        if (intervals[i][0] > right) {
            res[*returnSize][0] = intervals[i][0];
            res[*returnSize][1] = intervals[i][1];
            right = intervals[i][1];
            (* returnSize)++;  
        }
        else if (intervals[i][1] > right){
            res[*returnSize - 1][1] = intervals[i][1];
            right = intervals[i][1];
        }
    }
    return res;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AntDB数据库参加ACDU中国行杭州站,分享数据库运维实践与经验

关于ACDU与中国行&#xff1a; ACDU是由墨天轮社区举办的中国数据库联盟的品牌活动之一&#xff0c;在线下汇集数据库领域的行业知名人士&#xff0c;共同探讨数据库前沿技术及其应用&#xff0c;促进行业发展和创新的平台&#xff0c;也为开发者们提供友好交流的机会。 AntD…

关于面试总结--接口测试面试题

前言 接口测试最近几年被炒的火热了&#xff0c;越来越多的测试同行意识到接口测试的重要性。接口测试为什么会如此重要呢&#xff1f; 主要是平常的功能点点点&#xff0c;大家水平都一样&#xff0c;是个人都能点&#xff0c;面试时候如果问你平常在公司怎么测试的&#xff…

大数据安全 | 【实验】Diffie-Hellman密钥交换算法

文章目录 &#x1f4da;关于DH密钥交换算法&#x1f4da;实验目的&#x1f4da;流程梳理&#x1f407;Step1&#xff1a;实现快速幂取模运算&#x1f407;Step2&#xff1a;根据算法原理分别定义公钥和共享密钥的计算&#x1f407;Step3&#xff1a;求解问题一&#x1f407;Ste…

Python (八)网络编程

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一份大厂面试资料《史上最全大厂面试题》&#xff0c;Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等 …

Peter算法小课堂—简单建模(2)

太戈编程736题 题目描述&#xff1a; 你是一只汪星人&#xff0c;地球毁灭后你回到了汪星&#xff0c;这里每天有n个小时&#xff0c;你需要为自己选择正好连续的m小时作为每天睡眠的时间。从凌晨开始&#xff0c;第i小时内的睡眠质量为xi&#xff0c;请问经过选择后&#xf…

边缘检测@获取labelme标注的json黑白图掩码mask

import cv2 as cv import numpy as np import json import os from PIL import Imagedef convertPolygonToMask(jsonfilePath):

Meta 开启 Ray-Ban人工智能眼镜多模态 AI 功能测试,可识别物体、翻译语言

Meta 公司宣布他们将向部分用户推送其 Meta Ray-Ban 智能眼镜的多模态 AI 功能。这项功能允许 AI 助手通过眼镜的摄像头和麦克风了解佩戴者所看到和听到的事物&#xff0c;并提供相关信息和帮助。 Meta CEO 马克・扎克伯格在 Instagram 上展示了这项功能&#xff0c;他让眼镜推…

Power BI - 5分钟学习增加条件列

每天5分钟&#xff0c;今天介绍Power BI增加条件列。 什么是增加条件列&#xff1f; 简单理解&#xff0c;可以根据表中某列设置一个或者多个条件&#xff0c;判定的结果会生成一个新列。 举例&#xff1a; 首先&#xff0c;导入一张【Sales】样例表(Excel数据源导入请参考每…

如何在Ubuntu的Linux系统上搭建nacos集群

官方给出的集群部署架构图 集群部署说明 (nacos.io)3个或3个以上nacos节点才能构成集群当前示例中包含3个nacos节点&#xff0c;同时一个负载均衡器代理3个nacos&#xff0c;本示例中负载均衡器可使用的是nginx 准备并安装好正常运行的nginx&#xff0c;本示例略准备并安装好正…

USB2.0 Spec 中文篇

体系简介 线缆 USB 是一种支持热拔插的高速串行传输总线&#xff0c;使用一对&#xff08;两根&#xff09;差分信号来传输数据&#xff0c;半双工。要求使用屏蔽双绞线。 供电 USB 支持 “总线供电” 和 “自供电” 两种供电模式。在总线供电方式下&#xff0c;设备最多可…

等保二级测评国家收费标准是多少?

随着信息化的快速发展&#xff0c;网络安全问题日益突出&#xff0c;等保测评作为网络安全领域的重要环节&#xff0c;越来越受到企业和政府的重视。然而&#xff0c;很多人在进行等保测评时&#xff0c;对于等保二级测评的费用标准并不清楚。本文将详细介绍等保二级测评的国家…

自动化测试基础篇:Selenium 框架设计(POM)

【导语】Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。本文介绍selenium的框架设计。 自动化测试框架 1.什么是自动化测试框架 简单来说&#xff0c;自动化测试框架就是由一些标准&#xff0c;协议&#…

一、win10+yolov8+anaconda环境部署

1、安装anaconda &#xff08;1&#xff09;打开aonconda下载地址&#xff1a;https://www.anaconda.com/download&#xff0c;点击download下载。 2、下载完成后&#xff0c;双击打开&#xff0c;点击Next&#xff0c;I Agree&#xff0c;选择just me&#xff1b; 3、勾选…

计算机组成原理-ATT格式vsIntel格式

文章目录 AT&T格式 vs lntel格式 x86汇编语言是lntel格式&#xff0c;还有一种汇编语言格式是AT&T AT&T格式 vs lntel格式 lntel格式中取主存地址内容未指明长度默认为32位&#xff0c;对应下图中第四行右边的指令 百分号 美元符号 小括号 可用于计算机结构体数组…

lwIP 细节之六:connected、sent、poll 回调函数是何时调用的

使用 lwIP 协议栈进行 TCP 裸机编程&#xff0c;其本质就是编写协议栈指定的各种回调函数。将你的应用逻辑封装成函数&#xff0c;注册到协议栈&#xff0c;在适当的时候&#xff0c;由协议栈自动调用&#xff0c;所以称为回调。 注&#xff1a;除非特别说明&#xff0c;以下内…

MATLAB 最小二乘空间直线拟合 (37)

MATLAB 最小二乘空间直线拟合 (37) 一、算法介绍二、算法实现1.代码一、算法介绍 对于空间中的这样一组点:大致呈直线分布,散乱分布在直线左右, 我们可采用最小二乘方法拟合直线,使用下面的代码可以得到图中的结果。(其中图片中的点解释和具体的实现代码如下所示) C++…

档案馆数字化建设实施方案

档案馆数字化建设实施方案主要包括以下几个方面的内容&#xff1a; 1. 目标与规划&#xff1a;明确数字化建设的目标和规划&#xff0c;确定数字化建设的优先领域和重点工作&#xff0c;制定长期和短期的发展规划。 2. 技术设施建设&#xff1a;建设专久智能数字化档案管理系统…

LSTM和GRU的介绍以及Pytorch源码解析

介绍一下LSTM模型的结构以及源码&#xff0c;用作自己复习的材料。 LSTM模型所对应的源码在&#xff1a;\PyTorch\Lib\site-packages\torch\nn\modules\RNN.py文件中。 上次上一篇文章介绍了RNN序列模型&#xff0c;但是RNN模型存在比较严重的梯度爆炸和梯度消失问题。 本文…

【TwinCAT学习笔记 1】TwinCAT开发环境搭建

写在前面 作为技术开发人员&#xff0c;开启任何一项开发工作之前&#xff0c;首先都要搭建好开发环境&#xff0c;所谓磨刀不误砍材工&#xff0c;一定要有耐心&#xff0c;一次不行卸载再装。我曾遇到过一个学生&#xff0c;仅搭建环境就用了两周&#xff0c;这个过程也是一…

数据寻址-偏移寻址(硬核)

目录 一. 基址寻址二. 变址寻址三. 相对寻址四. 硬件如何实现数的"比较" \quad \quad \quad \quad \quad \quad \quad 一. 基址寻址 \quad A就是偏移量 有的用通用寄存器来代替BR专用寄存器的功能 其中 R 0 R_0 R0​的位数是由通用寄存器的总数来判断的, 比如通用寄存…