This commit is contained in:
2025-07-11 21:25:17 +08:00
parent 44e5b938c9
commit 58a56e3926
3 changed files with 153 additions and 0 deletions

15
include/solution/3169.h Normal file
View 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

42
src/3169.c Normal file
View 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;
}

96
tests/test_3169.cpp Normal file
View 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;
}