news 2026/6/23 17:19:40

12.14 - 搜索旋转排序数组 判断两个结构体是否相等

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
12.14 - 搜索旋转排序数组 判断两个结构体是否相等

目录

1.搜索旋转排序数组

a.核心思想

b.思路

2.判断两个结构体是否相等

a.默认情况

b.特殊情况处理

c.重载 == 运算符


1.搜索旋转排序数组

33. 搜索旋转排序数组 - 力扣(LeetCode)https://leetcode.cn/problems/search-in-rotated-sorted-array/description/

class Solution { public: int search(vector<int>& 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.思路

① 初始化左右指针leftright分别指向数组的首尾。

② 在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.步骤

  1. 初始化指针
    设置左指针left = 0,右指针right = nums.size() - 1

  2. 循环条件
    left <= right时,持续执行以下操作:

  3. 计算中间索引
    mid = left + (right - left) / 2(防止整数溢出)。

  4. 直接命中检查
    nums[mid] == target,立即返回mid

  5. 判断有序区间

    • 左半有序:当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
  6. 未找到处理
    循环结束后仍未找到目标值,返回-1

2.判断两个结构体是否相等

a.默认情况

当结构体所有成员均为基本类型(如intfloat)或支持比较的自定义类型时,可直接用==比较

struct Point { int x; int y; }; Point p1{1, 2}; Point p2{1, 2}; bool result = (p1 == p2); // 编译器自动逐成员比较,结果为 true

b.特殊情况处理

若结构体包含不支持比较的成员(如指针、数组),需手动比较

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 }

希望这些内容对大家有所帮助!

感谢大家的三连支持!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 18:36:43

WaveTools鸣潮120帧解锁与游戏性能优化全攻略

WaveTools鸣潮120帧解锁与游戏性能优化全攻略 【免费下载链接】WaveTools &#x1f9f0;鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools &#x1f3af; 你是否在鸣潮1.2版本更新后&#xff0c;发现原本流畅的120帧体验突然消失了&#xff1f;别担心…

作者头像 李华
网站建设 2026/6/23 18:50:31

三步学会百度网盘极速下载:告别龟速的终极方案

三步学会百度网盘极速下载&#xff1a;告别龟速的终极方案 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘的下载速度而烦恼吗&#xff1f;当你明明拥有高速网络…

作者头像 李华
网站建设 2026/6/23 18:51:02

5大实用技巧:用Calibre-Douban插件智能管理电子书元数据

5大实用技巧&#xff1a;用Calibre-Douban插件智能管理电子书元数据 【免费下载链接】calibre-douban Calibre new douban metadata source plugin. Douban no longer provides book APIs to the public, so it can only use web crawling to obtain data. This is a calibre D…

作者头像 李华
网站建设 2026/6/23 14:03:10

飞书文档批量导出终极指南:一键解决文档迁移难题

飞书文档批量导出终极指南&#xff1a;一键解决文档迁移难题 【免费下载链接】feishu-doc-export 项目地址: https://gitcode.com/gh_mirrors/fe/feishu-doc-export 你是否曾经为文档迁移而头疼不已&#xff1f;当公司决定更换办公平台&#xff0c;或是需要将飞书知识库…

作者头像 李华
网站建设 2026/6/23 18:51:01

Source Han Serif思源宋体:免费开源中文字体专业应用指南

Source Han Serif思源宋体&#xff1a;免费开源中文字体专业应用指南 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为字体版权问题而烦恼&#xff1f;Source Han Serif思源宋体为…

作者头像 李华
网站建设 2026/6/23 18:52:03

DOM Element:深入理解与操作

DOM Element:深入理解与操作 引言 在Web开发领域,DOM(文档对象模型)是一个至关重要的概念。DOM允许开发者与网页内容进行交互,如HTML和XML文档。DOM Element是DOM模型中的核心组成部分,它代表了HTML或XML文档中的每一个元素。本文将深入探讨DOM Element的概念、属性、方…

作者头像 李华