2026/6/11 4:37:08
网站建设
项目流程
如何制作网站?,网站怎么做seo优化,台州seo服务,舆情网站设计目录
1.搜索旋转排序数组
a.核心思想
b.思路
2.判断两个结构体是否相等
a.默认情况
b.特殊情况处理
c.重载 运算符 1.搜索旋转排序数组
33. 搜索旋转排序数组 - 力扣#xff08;LeetCode#xff09;https://leetcode.cn/problems/search-in-rotated-sorted-array/de…目录1.搜索旋转排序数组a.核心思想b.思路2.判断两个结构体是否相等a.默认情况b.特殊情况处理c.重载 运算符1.搜索旋转排序数组33. 搜索旋转排序数组 - 力扣LeetCodehttps://leetcode.cn/problems/search-in-rotated-sorted-array/description/class Solution { public: int search(vectorint nums, int target) { int left 0; int right nums.size() - 1; while (left right) { int mid left (right - left) / 2; if (nums[mid] target) { return mid; } // 左半部分有序 if (nums[left] nums[mid]) { if (nums[left] target target nums[mid]) { right mid - 1; } else { left mid 1; } } // 右半部分有序 else { if (nums[mid] target target nums[right]) { left mid 1; } else { right mid - 1; } } } return -1; } };a.核心思想利用二分查找的思想在旋转排序数组中高效地查找目标值。通过比较中间元素与两端的元素确定哪一部分是有序的再判断目标值是否在有序部分内逐步缩小查找范围。b.思路① 初始化左右指针left和right分别指向数组的首尾。② 在left right的条件下计算中间下标mid。③ 如果nums[mid] target直接返回mid。④ 否则判断nums[left]到nums[mid]是否有序如果nums[left] nums[mid]说明左半部分有序判断target是否在nums[left]和nums[mid]之间如果是则在左半部分继续查找否则在右半部分查找。如果nums[left] nums[mid]说明右半部分有序判断target是否在nums[mid]和nums[right]之间如果是则在右半部分继续查找否则在左半部分查找。⑤ 重复上述步骤直到找到目标值或查找范围为空c.步骤初始化指针设置左指针left 0右指针right nums.size() - 1。循环条件当left right时持续执行以下操作计算中间索引mid left (right - left) / 2防止整数溢出。直接命中检查若nums[mid] target立即返回mid。判断有序区间左半有序当nums[left] nums[mid]时若nums[left] target nums[mid]收缩右边界right mid - 1否则扩展左边界left mid 1右半有序当nums[left] nums[mid]时若nums[mid] target nums[right]扩展左边界left mid 1否则收缩右边界right mid - 1未找到处理循环结束后仍未找到目标值返回-1。2.判断两个结构体是否相等a.默认情况当结构体所有成员均为基本类型如int、float或支持比较的自定义类型时可直接用比较struct Point { int x; int y; }; Point p1{1, 2}; Point p2{1, 2}; bool result (p1 p2); // 编译器自动逐成员比较结果为 trueb.特殊情况处理若结构体包含不支持比较的成员如指针、数组需手动比较struct Data { int id; const char* name; // 指针类型无法直接比较 }; bool areEqual(const Data a, const Data b) { return (a.id b.id) (strcmp(a.name, b.name) 0); // 手动比较指针指向的内容 }c.重载运算符可自定义比较逻辑使代码更简洁struct Vector2D { float x; float y; }; // 重载 运算符 bool operator(const Vector2D a, const Vector2D b) { return (a.x b.x) (a.y b.y); } int main() { Vector2D v1{1.0f, 2.0f}; Vector2D v2{1.0f, 2.0f}; return (v1 v2); // 直接使用 结果为 true }希望这些内容对大家有所帮助感谢大家的三连支持