使用clion刷leetcode

server/2024/10/10 14:24:45/

clionleetcode_0">如何优雅的使用clionleetcode

安装插件:LeetCode Editor)

插件配置:

image-20240709210433380

这样我们每打开一个项目,就会创建类似的文件

image-20240709210536041

我们的项目结构:

image-20240709210129069

我们在题解文件中导入头文件myHeader.h并将新建的文件添加到cmakelists.txt文件,这样就不会报错了

  • myHeader.h
#ifndef MY_HEADER_H
#define MY_HEADER_H#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>
#include <map>
#include <unordered_map>
#include <set>
#include <unordered_set>
#include <stack>
#include <queue>
#include <deque>
#include <list>
#include <cmath>
#include <climits>
#include <cfloat>
#include <cstddef>
#include <cassert>
#include <numeric>
#include <functional>
#include <sstream>
#include <iterator>
#include <bitset>
#include <iomanip>
#include <memory>
#include <tuple>
#include <array>
#include <stdexcept>
#include <fstream>
#include <regex>
#include <random>
#include <chrono>
#include <initializer_list>
#include <utility>using namespace std;// 重载 << 运算符用于 std::vector
template<typename T>
std::ostream &operator<<(std::ostream &os, const std::vector<T> &container) {os << "[";for (auto it = container.begin(); it != container.end(); ++it) {os << *it;if (std::next(it) != container.end()) {os << ", ";}}os << "]";return os;
}// 重载 << 运算符用于 std::queue
template<typename T>
std::ostream &operator<<(std::ostream &os, std::queue<T> container) {os << "[";while (!container.empty()) {os << container.front();container.pop();if (!container.empty()) {os << ", ";}}os << "]";return os;
}// 重载 << 运算符用于 std::deque
template<typename T>
std::ostream &operator<<(std::ostream &os, const std::deque<T> &container) {os << "[";for (auto it = container.begin(); it != container.end(); ++it) {os << *it;if (std::next(it) != container.end()) {os << ", ";}}os << "]";return os;
}// 重载 << 运算符用于 std::list
template<typename T>
std::ostream &operator<<(std::ostream &os, const std::list<T> &container) {os << "[";for (auto it = container.begin(); it != container.end(); ++it) {os << *it;if (std::next(it) != container.end()) {os << ", ";}}os << "]";return os;
}// 重载 << 运算符用于 std::set
template<typename T>
std::ostream &operator<<(std::ostream &os, const std::set<T> &container) {os << "[";for (auto it = container.begin(); it != container.end(); ++it) {os << *it;if (std::next(it) != container.end()) {os << ", ";}}os << "]";return os;
}// 重载 << 运算符用于 std::unordered_set
template<typename T>
std::ostream &operator<<(std::ostream &os, const std::unordered_set<T> &container) {os << "[";for (auto it = container.begin(); it != container.end(); ++it) {os << *it;if (std::next(it) != container.end()) {os << ", ";}}os << "]";return os;
}// 重载 << 运算符用于 std::map
template<typename K, typename V>
std::ostream &operator<<(std::ostream &os, const std::map<K, V> &container) {os << "{";for (auto it = container.begin(); it != container.end(); ++it) {os << it->first << ": " << it->second;if (std::next(it) != container.end()) {os << ", ";}}os << "}";return os;
}// 重载 << 运算符用于 std::unordered_map
template<typename K, typename V>
std::ostream &operator<<(std::ostream &os, const std::unordered_map<K, V> &container) {os << "{";for (auto it = container.begin(); it != container.end(); ++it) {os << it->first << ": " << it->second;if (std::next(it) != container.end()) {os << ", ";}}os << "}";return os;
}// 重载 << 运算符用于 std::pair
template<typename T1, typename T2>
std::ostream &operator<<(std::ostream &os, const std::pair<T1, T2> &p) {os << "(" << p.first << ", " << p.second << ")";return os;
}// 重载 << 运算符用于 std::stack
template<typename T>
std::ostream &operator<<(std::ostream &os, std::stack<T> container) {os << "[";while (!container.empty()) {os << container.top();container.pop();if (!container.empty()) {os << ", ";}}os << "]";return os;
}// 重载 << 运算符用于 std::priority_queue
template<typename T>
std::ostream &operator<<(std::ostream &os, std::priority_queue<T> container) {os << "[";while (!container.empty()) {os << container.top();container.pop();if (!container.empty()) {os << ", ";}}os << "]";return os;
}#endif // MY_HEADER_H
  • CMakeLists.txt
cmake_minimum_required(VERSION 3.28)
project(LeetCodeTime)set(CMAKE_CXX_STANDARD 17)# 添加源文件,选择运行的题解
file(GLOB SRC_FILES ${PROJECT_SOURCE_DIR}/leetcode/editor/en/twoSum.cpp)add_executable(LeetCodeTime main.cpp ${SRC_FILES})target_include_directories(LeetCodeTime PUBLIC ${PROJECT_SOURCE_DIR}/include)

修改file(GLOB SRC_FILES ${PROJECT_SOURCE_DIR}/leetcode/editor/en/twoSum.cpp),这样就能调试了~

  • main.cpp
#include <iostream>
void runProblem();
int main() {system("chcp 65001"); // 支持中文std::cout << "50000个测试用例开始测试!" << std::endl;runProblem();return 0;
}
  • twoSum.cpp
// 1 Two Sum 2024-07-09 19:44:32
#include "myHeader.h"
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {for (int i = 0; i < nums.size(); i++) {for (int j = i + 1; j < nums.size(); j++) {if (nums[j] == target - nums[i]) {return {i, j};}}}return {};}
};
//leetcode submit region end(Prohibit modification and deletion)void runProblem() {Solution solution;vector<int> nums = {2, 7, 11, 15};int target = 9;vector<int> result = solution.twoSum(nums, target);for (int num : result) {cout << num << " ";}cout << endl;
}

例如,我们要调试两数之和这道题,我们就需要实现runProblem,自行设置测试用例,这样通过打断点就能调试了~,注意,这里的runProblem方法是最简单的方法,必要情况下,你可以完善如下功能,创建一个生成测试用例的函数,同时输出与正确答案结果不同的测试用例,至于正确结果,可以直接拿题解的就行。例如如下示例

// 1 Two Sum 2024-07-09 19:44:32
#include "myHeader.h"
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public:vector<int> twoSum(vector<int> &nums, int target) {for (int i = 0; i < nums.size(); i++) {for (int j = i + 1; j < nums.size(); j++) {if (nums[j] == target - nums[i]) {return {i, j};}}}return {};}
};
//leetcode submit region end(Prohibit modification and deletion)
// 生成随机数组
vector<int> generateRandomArray(int maxSize, int maxValue) {vector<int> randomArray;// 创建随机数生成器std::random_device rd;// 创建一个指定随机数范围的随机数引擎std::mt19937 eng(rd());std::uniform_int_distribution<int> maxValueEng(0, maxValue);std::uniform_int_distribution<int> maxSizeEng(0, maxSize);// 生成随机数组maxSize = maxSizeEng(eng);randomArray.reserve(maxSize);for (int i = 0; i < maxSize; ++i) {// 数组内没有重复元素int randomValue = maxValueEng(eng);while (find(randomArray.begin(), randomArray.end(), randomValue) != randomArray.end()) {randomValue = maxValueEng(eng);}}return randomArray;
}// 获取随机值
int getRandomValue(int maxValue) {std::random_device rd;std::mt19937 eng(rd());std::uniform_int_distribution<int> maxValueEng(0, 2 * maxValue);return maxValueEng(eng);
}// 比较器
vector<int> comparator(vector<int> &nums, int target) {unordered_map<int, int> numMap;int n = nums.size();for (int i = 0; i < n; i++) {int complement = target - nums[i];if (numMap.count(complement)) {return {numMap[complement], i};}numMap[nums[i]] = i;}return {}; // No solution found
}
// 比较两个数组是否相等
bool isEqual(vector<int> &nums1, vector<int> &nums2) {return nums1 == nums2;
}
// 测试
void runProblem() {int testTime = 50000; // 测试次数int maxSize = 50;    // 数组最大长度int maxValue = 10000;   // 数组元素最大值bool succeed = true;Solution solution;for (int i = 0; i < testTime; ++i) {vector<int> randomArray = generateRandomArray(maxSize, maxValue);int target = getRandomValue(maxValue);vector<int> solutionResult = solution.twoSum(randomArray, target);vector<int> comparatorResult = comparator(randomArray, target);if(!isEqual(solutionResult, comparatorResult)) {cout << "第" << i << "次测试失败!" << endl;cout << "原数组:" << randomArray << endl;cout << "目标值:" << target << endl;cout << "Solution result: " << solutionResult << endl;cout << "Comparator result: " << comparatorResult << endl;succeed = false;break;}}cout << (succeed ? "测试用例全部通过!" : "测试失败!") << endl;
}

http://www.ppmy.cn/server/58370.html

相关文章

KBPC2504-ASEMI无人机专用整流桥KBPC2504

编辑&#xff1a;ll KBPC2504-ASEMI无人机专用整流桥KBPC2504 型号&#xff1a;KBPC2504 品牌&#xff1a;ASEMI 封装&#xff1a;KBPC-4 最大重复峰值反向电压&#xff1a;400V 最大正向平均整流电流(Vdss)&#xff1a;25A 功率(Pd)&#xff1a;中小功率 芯片个数&…

枚举类 (enum)

目录 一、为什么要有枚举类&#xff1f; 二、枚举的简介 三、自定义枚举类 四、使用enum关键字 五、注意事项 一、为什么要有枚举类&#xff1f; 假如我们有这样的一个需求&#xff1a;设计季节类&#xff0c;并创建对象。 我们就需要以下操作&#xff0c;创建Season类&…

CSS学习

CSS学习 CSS&#xff08;层叠样式表&#xff09;是网页设计和开发中的重要技术&#xff0c;用于描述HTML或XML文档的样式和布局。掌握CSS不仅能让网页看起来更加美观&#xff0c;还能提高网页的加载速度和可维护性。 一、CSS基础入门 1. CSS简介 CSS是一种用于描述HTML或XM…

kafka 消费者

消费者 消费者。消费者连接到Kafka上并接收消息&#xff0c;进而进行相应的业务逻辑处理。 消费组 消费者负责订阅Kafka中的主题&#xff0c;并且从订阅的主题上拉取消息。 消费组&#xff1a;每个消费者都有一个对应的消费组&#xff0c;每一个分区只能被一个消费组中的一个…

nginx优化

编辑nginx.conf server_tokens off 关闭版本号 修改用户与组 在配置文件中将用户注释掉 表示主进程master会有root创建&#xff0c;子进程由nginx用户来创建 设置页面的缓存时间&#xff0c;主要是针对动态页面&#xff0c;图片的缓存 cd html/ 先把图片托进来 配置文件做…

//usr/lib/libgdal.so.20:对‘sqlite3_column_table_name’未定义的引用

//usr/lib/libgdal.so.20:对‘sqlite3_column_table_name’未定义的引用 编译安装sqlite3之后&#xff0c;会出现 “ //usr/lib/libgdal.so.20:对‘sqlite3_column_table_name’未定义的引用”的报错&#xff0c;主要是因为之前安装低版本sqlite3的时候改了系统的文件导致的 …

2024-7-9 Windows NDK,Clion,C4droid 编译环境配置(基础|使用命令编译,非AndroidStudio),小白(记录)友好型教程

2024-7-9 Windows NDK,Clion,C4droid 编译环境配置(基础|使用命令编译),小白友好型 一直想使用NDK编译出lua库,然后进行开发.结果一直不成功,问题Bug出现了一堆(主要还是自己太菜,毕竟咱是编程散修一名>_<) NDK之前一直不会配置(直接用命令配置的那种,非AndroidStudio),一…

ArcGIS实战—等高线绘制

今天分享一个使用ArcGIS Pro制作等高线地图的教程&#xff0c;等高线是用来表达地形最常见的形式之一。那么如何制作一个效果比较好的等高线地形图呢&#xff1f;让我们开始今天的教程。 1 DEM数据 第一步&#xff1a;获取DEM地形数据&#xff0c;网址&#xff08;https://dwt…