class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
//先按照每个区间的左元素排序,这样每个区间的左边界就固定了,所以之后考虑相邻的
//区间是否是相交的就行 类似与栈的操作
//先放进栈一个区间,第一个区间的左边界一定是整个大区间的最左边界
//这个点是固定的 不用考虑 然后考虑每两个相邻的区间
//如果第一个区间的右边界大于第二个区间的左边界,就说明这两个区间是相交的
//要合并区间 左边界取第一个区间的左边界 右边界取两个区间右边界的最大值
//放入ans数组 除第一次ans为空的情况直接插入第一个区间
//之后每次比较的两个区间就是ans.back()和intervals数组中最左边没有考虑的区间
sort(intervals.begin(),intervals.end());
vector<vector<int>> ans;
for(auto &it:intervals)
{
if(!ans.empty()&&it[0]<=ans.back()[1])
{
int l = ans.back()[0];
int r = max(it[1],ans.back()[1]);
ans.pop_back();
ans.push_back({l,r});
}else{
ans.push_back({it[0],it[1]});
}
}
return ans;
}
};
C和C++的区别
头文件
● C语言的头文件结尾有.h
● C++的头文件没有.h
● C++中使用C的头文件可以把.h去掉 在前面补一个c 比如math.h和cmath
前缀c和后缀.h
使用c开头的头文件是为了标明这是C++版本的C语言标准库,这些库函数和宏定义都是在std命名空间里的,提供了更好的兼容性和类型安全性。而.h的头文件依然可以在C++中直接使用,并且这些函数和宏定义是直接可以在全局作用域中使用的,不属于任何的命名空间
C语言是过程式编程语言,C++是面向对象的编程语言,兼顾过程式编程
C++相对C语言增强了类型检查,结构体允许定义函数了(类似于class,访问权限默认是public)支持了类、对象、继承、多态、封装、抽象、构造函数、析构函数、new、delete、引用、模版、STL容器、算法库、迭代器、命名空间、默认函数参数、函数重载、运算符重载、异常处理、多线程支持。
布尔、整型、浮点、指针类型和0做比较
bool:
- 与
0
比较时,布尔值会保持自身语义,不会出现精度或隐式转换问题。 - 直接使用布尔变量进行条件判断更自然(如
if (b1)
或if (!b2)
)。
整型
- 整型与
0
比较是非常常见的用法,没有浮点型或指针类型的潜在问题。 - 对于非零值的判断,可以直接写为
if (a)
,而无需显式比较a != 0
。
浮点类型(float
, double
)
- 浮点类型可以直接与
0
比较,但由于 浮点精度误差 的存在,直接比较结果可能会不准确。 - 通常不推荐直接与
0
使用==
或!=
进行比较,而是使用一个小的容差值(epsilon
)来进行近似比较。
指针类型与 0
比较
- 在 C++ 中,
0
是空指针常量,可用来表示一个空指针(nullptr
在 C++11 中引入,之前常用0
表示空指针)。 - 指针与
0
比较用于判断指针是否为空指针。
nullptr_t类型
- 唯一的值:
std::nullptr_t
类型的唯一值是nullptr(右值)
。 - 隐式转换:
std::nullptr_t
类型的对象可以隐式转换为任意指针类型(如int*
、char*
、void*
等),但不能转换为非指针类型(如int
或float
)。 - 语义明确:它明确表示 "空指针" 的含义,而不是整数
0
或其他类型。
malloc、calloc、realloc的区别
#include <stdlib.h>
#include <stdio.h>
int main() {
// malloc 示例
int* malloc_arr = (int*)malloc(5 * sizeof(int)); // 分配未初始化内存
if (malloc_arr) {
for (int i = 0; i < 5; i++) malloc_arr[i] = i;
free(malloc_arr);
}
// calloc 示例
int* calloc_arr = (int*)calloc(5, sizeof(int)); // 分配并初始化为 0
if (calloc_arr) {
for (int i = 0; i < 5; i++) printf("%d ", calloc_arr[i]);
free(calloc_arr);
}
// realloc 示例
int* realloc_arr = (int*)malloc(3 * sizeof(int));
if (realloc_arr) {
realloc_arr = (int*)realloc(realloc_arr, 6 * sizeof(int)); // 调整大小
free(realloc_arr);
}
return 0;
}