Compare commits
2 Commits
3d6aa12717
...
58a56e3926
| Author | SHA1 | Date | |
|---|---|---|---|
| 58a56e3926 | |||
| 44e5b938c9 |
17
include/solution/1353.h
Normal file
17
include/solution/1353.h
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
//
|
||||||
|
// Created by gint on 2025/7/7.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef INC_1353_H
|
||||||
|
#define INC_1353_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int maxEvents(int **events, int eventsSize, int *eventsColSize);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif // INC_1353_H
|
||||||
15
include/solution/3169.h
Normal file
15
include/solution/3169.h
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
//
|
||||||
|
// Created by gint on 2025/7/11.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef INC_3169_H
|
||||||
|
#define INC_3169_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
int countDays(int days, int **meetings, int meetingsSize, int *meetingsColSize);
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif // INC_3169_H
|
||||||
91
src/1353.c
Normal file
91
src/1353.c
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
//
|
||||||
|
// Created by gint on 2025/7/7.
|
||||||
|
//
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
int cmpEvent(const void *a, const void *b)
|
||||||
|
{
|
||||||
|
int *eventA = *(int **)a;
|
||||||
|
int *eventB = *(int **)b;
|
||||||
|
return eventA[0] - eventB[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
int compare(const void *a, const void *b)
|
||||||
|
{
|
||||||
|
return *(int *)a - *(int *)b;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 简易小根堆操作
|
||||||
|
void push(int *heap, int *size, int val)
|
||||||
|
{
|
||||||
|
int i = (*size)++;
|
||||||
|
heap[i] = val;
|
||||||
|
while (i > 0 && heap[(i - 1) / 2] > heap[i])
|
||||||
|
{
|
||||||
|
int tmp = heap[i];
|
||||||
|
heap[i] = heap[(i - 1) / 2];
|
||||||
|
heap[(i - 1) / 2] = tmp;
|
||||||
|
i = (i - 1) / 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int pop(int *heap, int *size)
|
||||||
|
{
|
||||||
|
int result = heap[0];
|
||||||
|
heap[0] = heap[--(*size)];
|
||||||
|
int i = 0;
|
||||||
|
while (i * 2 + 1 < *size)
|
||||||
|
{
|
||||||
|
int j = i * 2 + 1;
|
||||||
|
if (j + 1 < *size && heap[j + 1] < heap[j])
|
||||||
|
j++;
|
||||||
|
if (heap[i] <= heap[j])
|
||||||
|
break;
|
||||||
|
int tmp = heap[i];
|
||||||
|
heap[i] = heap[j];
|
||||||
|
heap[j] = tmp;
|
||||||
|
i = j;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
int maxEvents(int **events, int eventsSize, int *eventsColSize)
|
||||||
|
{
|
||||||
|
qsort(events, eventsSize, sizeof(int *), cmpEvent);
|
||||||
|
|
||||||
|
int minDay = events[0][0], maxDay = 0;
|
||||||
|
for (int i = 0; i < eventsSize; i++)
|
||||||
|
{
|
||||||
|
if (events[i][1] > maxDay)
|
||||||
|
maxDay = events[i][1];
|
||||||
|
}
|
||||||
|
|
||||||
|
int heap[eventsSize];
|
||||||
|
int heapSize = 0;
|
||||||
|
|
||||||
|
int day = minDay, idx = 0, res = 0;
|
||||||
|
|
||||||
|
for (day = minDay; day <= maxDay; day++)
|
||||||
|
{
|
||||||
|
// 把今天开始的会议加进堆
|
||||||
|
while (idx < eventsSize && events[idx][0] == day)
|
||||||
|
{
|
||||||
|
push(heap, &heapSize, events[idx][1]);
|
||||||
|
idx++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 去掉已过期的会议
|
||||||
|
while (heapSize > 0 && heap[0] < day)
|
||||||
|
{
|
||||||
|
pop(heap, &heapSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 选择今天可以开的最早结束的会议
|
||||||
|
if (heapSize > 0)
|
||||||
|
{
|
||||||
|
pop(heap, &heapSize);
|
||||||
|
res++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
42
src/3169.c
Normal file
42
src/3169.c
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
//
|
||||||
|
// Created by gint on 2025/7/11.
|
||||||
|
//
|
||||||
|
#include <solution/3169.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
int cmpMeetings(const void *a, const void *b)
|
||||||
|
{
|
||||||
|
int *ma = *(int **)a;
|
||||||
|
int *mb = *(int **)b;
|
||||||
|
if (ma[0] != mb[0])
|
||||||
|
return ma[0] - mb[0];
|
||||||
|
return ma[1] - mb[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
void mergeMeeting(int *meetingA, int *meetingB)
|
||||||
|
{
|
||||||
|
meetingA[0] = meetingA[0] < meetingB[0] ? meetingA[0] : meetingB[0];
|
||||||
|
meetingA[1] = meetingA[1] > meetingB[1] ? meetingA[1] : meetingB[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
int countDays(int days, int **meetings, int meetingsSize, int *meetingsColSize)
|
||||||
|
{
|
||||||
|
int count = 0;
|
||||||
|
qsort(meetings, meetingsSize, sizeof(int *), cmpMeetings);
|
||||||
|
|
||||||
|
for (int i = 1; i < meetingsSize; i++)
|
||||||
|
if (meetings[i - 1][1] >= meetings[i][0])
|
||||||
|
mergeMeeting(meetings[i], meetings[i - 1]);
|
||||||
|
|
||||||
|
for (int i = 1; i < meetingsSize; i++)
|
||||||
|
if (meetings[i - 1][0] != meetings[i][0])
|
||||||
|
count += meetings[i][0] - meetings[i - 1][1] - 1;
|
||||||
|
|
||||||
|
if (meetings[0][0] != 1)
|
||||||
|
count += meetings[0][0] - 1;
|
||||||
|
|
||||||
|
if (meetings[meetingsSize - 1][1] < days)
|
||||||
|
return count + days - meetings[meetingsSize - 1][1];
|
||||||
|
|
||||||
|
return count;
|
||||||
|
}
|
||||||
58
tests/test_1353.cpp
Normal file
58
tests/test_1353.cpp
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
#include <gtest/gtest.h>
|
||||||
|
#include <solution/1353.h>
|
||||||
|
|
||||||
|
// 辅助函数:创建二维数组
|
||||||
|
int **create2DArray(const std::vector<std::vector<int>> &input, int *colSizeArray)
|
||||||
|
{
|
||||||
|
int **arr = new int *[input.size()];
|
||||||
|
for (size_t i = 0; i < input.size(); ++i)
|
||||||
|
{
|
||||||
|
arr[i] = new int[input[i].size()];
|
||||||
|
colSizeArray[i] = static_cast<int>(input[i].size());
|
||||||
|
for (size_t j = 0; j < input[i].size(); ++j)
|
||||||
|
{
|
||||||
|
arr[i][j] = input[i][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return arr;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 辅助函数:释放二维数组
|
||||||
|
void free2DArray(int **arr, int size)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < size; ++i)
|
||||||
|
{
|
||||||
|
delete[] arr[i];
|
||||||
|
}
|
||||||
|
delete[] arr;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test1
|
||||||
|
TEST(MaxEventsTest, Test1)
|
||||||
|
{
|
||||||
|
std::vector<std::vector<int>> input = {{1, 2}, {2, 3}, {3, 4}};
|
||||||
|
int eventsSize = static_cast<int>(input.size());
|
||||||
|
int *eventsColSize = new int[eventsSize];
|
||||||
|
int **events = create2DArray(input, eventsColSize);
|
||||||
|
|
||||||
|
int expected = 3;
|
||||||
|
EXPECT_EQ(maxEvents(events, eventsSize, eventsColSize), expected);
|
||||||
|
|
||||||
|
free2DArray(events, eventsSize);
|
||||||
|
delete[] eventsColSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test2
|
||||||
|
TEST(MaxEventsTest, Test2)
|
||||||
|
{
|
||||||
|
std::vector<std::vector<int>> input = {{1, 2}, {2, 3}, {3, 4}, {1, 2}};
|
||||||
|
int eventsSize = static_cast<int>(input.size());
|
||||||
|
int *eventsColSize = new int[eventsSize];
|
||||||
|
int **events = create2DArray(input, eventsColSize);
|
||||||
|
|
||||||
|
int expected = 4;
|
||||||
|
EXPECT_EQ(maxEvents(events, eventsSize, eventsColSize), expected);
|
||||||
|
|
||||||
|
free2DArray(events, eventsSize);
|
||||||
|
delete[] eventsColSize;
|
||||||
|
}
|
||||||
96
tests/test_3169.cpp
Normal file
96
tests/test_3169.cpp
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
//
|
||||||
|
// Created by gint on 2025/7/11.
|
||||||
|
//
|
||||||
|
#include <solution/3169.h>
|
||||||
|
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
// 工具函数:创建二维数组
|
||||||
|
int **create2DArray(const std::vector<std::vector<int>> &input, int *colSizeArray)
|
||||||
|
{
|
||||||
|
int **arr = new int *[input.size()];
|
||||||
|
for (size_t i = 0; i < input.size(); ++i)
|
||||||
|
{
|
||||||
|
arr[i] = new int[input[i].size()];
|
||||||
|
colSizeArray[i] = static_cast<int>(input[i].size());
|
||||||
|
for (size_t j = 0; j < input[i].size(); ++j)
|
||||||
|
{
|
||||||
|
arr[i][j] = input[i][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return arr;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 工具函数:释放二维数组
|
||||||
|
void free2DArray(int **arr, int size)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < size; ++i)
|
||||||
|
{
|
||||||
|
delete[] arr[i];
|
||||||
|
}
|
||||||
|
delete[] arr;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test1
|
||||||
|
TEST(CountDaysTest, Test1)
|
||||||
|
{
|
||||||
|
int days = 10;
|
||||||
|
std::vector<std::vector<int>> input = {{5, 7}, {1, 3}, {9, 10}};
|
||||||
|
int meetingsSize = static_cast<int>(input.size());
|
||||||
|
int *meetingsColSize = new int[meetingsSize];
|
||||||
|
int **meetings = create2DArray(input, meetingsColSize);
|
||||||
|
|
||||||
|
int expected = 2;
|
||||||
|
EXPECT_EQ(countDays(days, meetings, meetingsSize, meetingsColSize), expected);
|
||||||
|
|
||||||
|
free2DArray(meetings, meetingsSize);
|
||||||
|
delete[] meetingsColSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test2
|
||||||
|
TEST(CountDaysTest, Test2)
|
||||||
|
{
|
||||||
|
int days = 5;
|
||||||
|
std::vector<std::vector<int>> input = {{2, 4}, {1, 3}};
|
||||||
|
int meetingsSize = static_cast<int>(input.size());
|
||||||
|
int *meetingsColSize = new int[meetingsSize];
|
||||||
|
int **meetings = create2DArray(input, meetingsColSize);
|
||||||
|
|
||||||
|
int expected = 1;
|
||||||
|
EXPECT_EQ(countDays(days, meetings, meetingsSize, meetingsColSize), expected);
|
||||||
|
|
||||||
|
free2DArray(meetings, meetingsSize);
|
||||||
|
delete[] meetingsColSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test3
|
||||||
|
TEST(CountDaysTest, Test3)
|
||||||
|
{
|
||||||
|
int days = 6;
|
||||||
|
std::vector<std::vector<int>> input = {{1, 6}};
|
||||||
|
int meetingsSize = static_cast<int>(input.size());
|
||||||
|
int *meetingsColSize = new int[meetingsSize];
|
||||||
|
int **meetings = create2DArray(input, meetingsColSize);
|
||||||
|
|
||||||
|
int expected = 0;
|
||||||
|
EXPECT_EQ(countDays(days, meetings, meetingsSize, meetingsColSize), expected);
|
||||||
|
|
||||||
|
free2DArray(meetings, meetingsSize);
|
||||||
|
delete[] meetingsColSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(CountDaysTest, Test4)
|
||||||
|
{
|
||||||
|
int days = 8;
|
||||||
|
std::vector<std::vector<int>> input = {{3, 4}, {4, 8}, {2, 5}, {3, 8}};
|
||||||
|
int meetingsSize = static_cast<int>(input.size());
|
||||||
|
int *meetingsColSize = new int[meetingsSize];
|
||||||
|
int **meetings = create2DArray(input, meetingsColSize);
|
||||||
|
|
||||||
|
int expected = 1;
|
||||||
|
EXPECT_EQ(countDays(days, meetings, meetingsSize, meetingsColSize), expected);
|
||||||
|
|
||||||
|
free2DArray(meetings, meetingsSize);
|
||||||
|
delete[] meetingsColSize;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user