C语言 | Leetcode C语言题解之第352题将数据流变为多个不想交区间

2024-08-21 15:04

本文主要是介绍C语言 | Leetcode C语言题解之第352题将数据流变为多个不想交区间,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:

题解:

typedef struct SummaryRanges{int left,right;struct SummaryRanges *pre,*next;
} SummaryRanges;/** Initialize your data structure here. */SummaryRanges* summaryRangesCreate() {SummaryRanges *head = malloc(sizeof(SummaryRanges)),*rear = malloc(sizeof(SummaryRanges));head->next = head->pre = rear;rear->next = rear->pre = head;head->left = 0;return head;
}
SummaryRanges *insert(SummaryRanges *head,SummaryRanges *rear,int val){SummaryRanges *p = head->next;while(p != rear){if(p->left <= val && val <= p->right) return NULL;else if(p->right < val) p = p->next;else break;}SummaryRanges *q = malloc(sizeof(SummaryRanges));q->left = q->right = val;q->next = p,q->pre = p->pre;p->pre->next = q,p->pre = q;++head->left;return q;
}
void summaryRangesAddNum(SummaryRanges* obj, int val) {SummaryRanges *head = obj,*rear = obj->pre;SummaryRanges *p = insert(head,rear,val);if(!p) return;int f1 = p->pre != head && p->pre->right+1 == p->left,f2 = p->next != rear && p->next->left-1 == p->right;if(f1 && f2){p->pre->right = p->next->right;p->pre->next = p->next->next;p->next->next->pre = p->pre;head->left -= 2;free(p->next);free(p);}else if(f1){p->pre->right = p->right;p->pre->next = p->next;p->next->pre = p->pre;head->left--;free(p);}else if(f2){p->next->left = p->left;p->next->pre = p->pre;p->pre->next = p->next;head->left--;free(p);}
}int** summaryRangesGetIntervals(SummaryRanges* obj, int* rs, int** rcs) {SummaryRanges *p = obj->next,*rear = obj->pre;int **ret = malloc((obj->left)*sizeof(int*));*rs = 0;while(p != rear){ret[*rs] = malloc(2*sizeof(int));ret[*rs][0] = p->left,ret[*rs][1] = p->right;(*rs)++;p = p->next;}*rcs = malloc((*rs)*sizeof(int));for(int i = 0;i < *rs;++i) (*rcs)[i] = 2;return ret;
}void summaryRangesFree(SummaryRanges* obj) {SummaryRanges *p = obj->next,*rear = obj->pre;while(p != rear){SummaryRanges *temp = p->next;free(p);p = temp;}free(rear);free(obj);
}/*** Your SummaryRanges struct will be instantiated and called as such:* SummaryRanges* obj = summaryRangesCreate();* summaryRangesAddNum(obj, val);* int** param_2 = summaryRangesGetIntervals(obj, retSize, retColSize);* summaryRangesFree(obj);
*/

这篇关于C语言 | Leetcode C语言题解之第352题将数据流变为多个不想交区间的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1093497

相关文章

哈希leetcode-1

目录 1前言 2.例题  2.1两数之和 2.2判断是否互为字符重排 2.3存在重复元素1 2.4存在重复元素2 2.5字母异位词分组 1前言 哈希表主要是适合于快速查找某个元素(O(1)) 当我们要频繁的查找某个元素,第一哈希表O(1),第二,二分O(log n) 一般可以分为语言自带的容器哈希和用数组模拟的简易哈希。 最简单的比如数组模拟字符存储,只要开26个c

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

hdu 1754 I Hate It(线段树,单点更新,区间最值)

题意是求一个线段中的最大数。 线段树的模板题,试用了一下交大的模板。效率有点略低。 代码: #include <stdio.h>#include <string.h>#define TREE_SIZE (1 << (20))//const int TREE_SIZE = 200000 + 10;int max(int a, int b){return a > b ? a :

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

leetcode-24Swap Nodes in Pairs

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode swapPairs(L

leetcode-23Merge k Sorted Lists

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode mergeKLists

hdu4267区间统计

题意:给一些数,有两种操作,一种是在[a,b] 区间内,对(i - a)% k == 0 的加value,另一种操作是询问某个位置的值。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import

hdu4417区间统计

给你一个数列{An},然后有m次查询,每次查询一段区间 [l,r] <= h 的值的个数。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamRead

hdu3333区间统计

题目大意:求一个区间内不重复数字的和,例如1 1 1 3,区间[1,4]的和为4。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &