first init

This commit is contained in:
flowerstonezl
2026-01-29 17:04:05 +08:00
commit e1006fa09c
51 changed files with 4288 additions and 0 deletions

View File

@@ -0,0 +1,110 @@
# 1. 指定CMake最低版本要求
cmake_minimum_required(VERSION 3.10)
# 2. 设置项目信息
project(
704BinarySearch # 项目名称
VERSION 1.0.0 # 项目版本
DESCRIPTION "Simple C++ Project"
LANGUAGES CXX # 支持的语言
)
# 3. 设置C++标准和编译特性
set(CMAKE_CXX_STANDARD 17) # 使用C++17标准
set(CMAKE_CXX_STANDARD_REQUIRED ON) # 必须支持指定标准
set(CMAKE_CXX_EXTENSIONS OFF) # 禁用编译器特有扩展
# 4. 配置构建类型和编译选项
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release) # 默认构建类型为Release
endif()
# 公共编译选项
# 修改后 - 分开添加选项
add_compile_options(
"$<$<CONFIG:Release>:-O3>" # Release模式优化
"$<$<CONFIG:Debug>:-g3>"
"$<$<CONFIG:Debug>:-O0>"
)
# 平台特定选项
if(MSVC)
add_compile_options(/W4 /WX) # MSVC: 警告等级4视警告为错误
else()
add_compile_options(-Wall -Wextra -Wpedantic -Werror) # GCC/Clang: 严格警告
endif()
# 5. 查找依赖包
# find_package(Boost 1.70 COMPONENTS filesystem system)
# 6. 包含目录设置
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}/include # 项目头文件目录
)
# 7. 源文件收集
file(GLOB_RECURSE SOURCES "src/*.cpp") # 递归收集源文件
file(GLOB_RECURSE HEADERS "include/*.h") # 头文件
# 8. 创建目标
# 可执行文件目标
add_executable(${PROJECT_NAME} ${SOURCES} ${HEADERS})
# 9. 链接依赖库
if(Boost_FOUND)
target_link_libraries(${PROJECT_NAME}
PRIVATE
Boost::filesystem
Boost::system
)
endif()
# 10. 安装规则
install(TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
)
install(DIRECTORY include/ DESTINATION include)
# 11. 测试支持
enable_testing()
# 12. 附加功能
# 12.1 Windows资源文件
if(WIN32 AND EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/app.rc)
target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/app.rc)
endif()
# # 12.2 预编译头文件
# target_precompile_headers(${PROJECT_NAME} PRIVATE
# <vector>
# <string>
# <memory>
# ${PROJECT_SOURCE_DIR}/include/pch.h
# )
# 13. 生成配置文件
# 13.1 导出头文件路径
target_include_directories(${PROJECT_NAME}
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)
# 13.2 生成版本信息
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/cmake/Version.hpp.in
${CMAKE_CURRENT_BINARY_DIR}/Version.hpp
)
# 14. 自定义目标
add_custom_target(run
COMMAND ${PROJECT_NAME}
DEPENDS ${PROJECT_NAME}
COMMENT "Running ${PROJECT_NAME}..."
)
# 15. 包管理器集成
include(CPack)

View File

@@ -0,0 +1,43 @@
// (版本二)左闭右闭区间
class Solution {
fun search(nums: IntArray, target: Int): Int {
var left = 0
var right = nums.size - 1 // [left,right] 右侧为闭区间right 设置为 nums.size - 1
while (left <= right) {
val mid = (left + right) / 2
if (nums[mid] < target) left = mid + 1
else if (nums[mid] > target) right = mid - 1 // 代码的核心,循环中 right 是闭区间,这里也应是闭区间
else return mid
}
return -1 // 没有找到 target ,返回 -1
}
}
class Solution_2 {
fun search(nums: IntArray, target: Int): Int {
var left = 0
var right = nums.size // [left,right) 右侧为开区间,
while (left < right) {
val mid = (left + right) / 2
if (nums[mid] < target) left = mid + 1
else if (nums[mid] > target) right = mid // 代码的核心,循环中 right 是开区间,这里应是开区间
else return mid
}
return -1 // 没有找到 target ,返回 -1
}
}
// 测试用例
fun main() {
val nums = intArrayOf( 0, 1, 2, 4, 5, 6, 7)
val target = 0
val solution = Solution()
val result = solution.search(nums, target)
val solution2 = Solution_2()
val result2 = solution2.search(nums, target)
println("Solution 1: $result") // 0
println("Solution 2: $result2") // 0
}

View File

@@ -0,0 +1,70 @@
/*
* This Kotlin source file was generated by the Gradle 'init' task.
*/
package binarySearch
class Solution {
fun search(nums: IntArray, target: Int): Int {
var left = 0
var right = nums.size - 1 // [left,right] 右侧为闭区间right 设置为 nums.size - 1
while (left <= right) {
val mid = (left + right) / 2
if (nums[mid] < target) left = mid + 1
else if (nums[mid] > target) right = mid - 1 // 代码的核心,循环中 right 是闭区间,这里也应是闭区间
else return mid
}
return -1 // 没有找到 target ,返回 -1
}
}
// 测试用例
fun main() {
val nums = intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8)
println("请输入要查找的数字:")
val input = readLine()
// 验证输入有效性
if (input.isNullOrBlank()) {
println("错误:未输入任何内容")
return
}
val target = input.toIntOrNull() ?: run {
println("错误:请输入有效的整数")
return
}
val solution = Solution()
val result = solution.search(nums, target)
if (result == -1){
println("不存在$target")
}
else{
println("目标索引位置: $result")
}
}
// fun main() {
// val nums = intArrayOf(4, 5, 6, 7, 0, 1, 2)
// val reader = System.`in`.bufferedReader()
// print("请输入要查找的数字: ")
// System.out.flush()
// val input = reader.readLine()
// if (input.isNullOrBlank()) {
// println("错误:未输入任何内容")
// return
// }
// val target = input.toIntOrNull() ?: run {
// println("错误:请输入有效的整数")
// return
// }
// val solution = Solution()
// val result = solution.search(nums, target)
// println("目标索引位置: $result")
// }

View File

@@ -0,0 +1,134 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# [704. 二分查找](https://leetcode.cn/problems/binary-search)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 题目描述 \n",
"\n",
"给定一个 `n` 个元素有序的(升序)整型数组 `nums` 和一个目标值 `target`  ,写一个函数搜索 `nums` 中的 `target`,如果 `target` 存在返回下标,否则返回 `-1`。\n",
"\n",
"你必须编写一个具有 `O(log n)` 时间复杂度的算法。\n",
"\n",
" \n",
"**示例 1:**\n",
"\n",
"```txt\n",
"输入: nums = [-1,0,3,5,9,12], target = 9\n",
"输出: 4\n",
"解释: 9 出现在 nums 中并且下标为 4\n",
"```\n",
"\n",
"**示例 2:**\n",
"\n",
"```txt\n",
"输入: nums = [-1,0,3,5,9,12], target = 2\n",
"输出: -1\n",
"解释: 2 不存在 nums 中因此返回 -1\n",
"```\n",
"\n",
"**提示:**\n",
"\n",
"1. 你可以假设 `nums` 中的所有元素是不重复的。\n",
"2. `n` 将在 `[1, 10000]`之间。\n",
"3. `nums` 的每个元素都将在 `[-9999, 9999]`之间。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 解答"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"class Solution(object):\n",
" def search(self, nums, target):\n",
" \"\"\"\n",
" :type nums: List[int]\n",
" :type target: int\n",
" :rtype: int\n",
" \"\"\"\n",
" left_location, right_location = 0, len(nums) - 1\n",
" while left_location <= right_location:\n",
" mid_location = (left_location + right_location) // 2\n",
" if nums[mid_location] == target:\n",
" return mid_location\n",
" elif nums[mid_location] < target:\n",
" left_location = mid_location + 1\n",
" else:\n",
" right_location = mid_location - 1\n",
" return -1\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "6154c8b4",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1\n"
]
}
],
"source": [
"Solution=Solution().search([5, 6, 7, 8, 9, 10], 6) # Example usage\n",
"print(Solution) # Output: 1"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "6aca97d4",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.10"
}
},
"nbformat": 5,
"nbformat_minor": 10
}

View File

@@ -0,0 +1,46 @@
#include <iostream>
#include <vector>
using namespace std;
class Solution
{
public:
int search(vector<int> &nums, int target)
{
left_location = 0;
right_location = nums.size() - 1;
while (left_location <= right_location)
{
// mid_location = (left_location + right_location) / 2;
mid_location = (left_location + right_location) >> 1;
if (nums[mid_location] == target)
{
return mid_location;
}
else if (nums[mid_location] < target)
{
left_location = mid_location + 1;
}
else
{
right_location = mid_location - 1;
}
}
return -1;
}
private:
int left_location, right_location, mid_location;
};
int main()
{
Solution solution;
vector<int> nums = {1, 2, 3, 4, 5};
int target = 3;
int result = solution.search(nums, target);
cout << "The index of target in nums is: " << result << endl;
system("pause");
return result;
}