当前位置: 首页 > news >正文

完整教程:LeetCode 刷题【81. 搜索旋转排序数组 II、82. 删除排序链表中的重复元素 II、83. 删除排序链表中的重复元素】

81. 搜索旋转排序数组 II

自己做

解:二分查找

class Solution {
public:
bool search(vector& nums, int target) {
int n = (int)nums.size();
int begin = 0;
int end = n - 1;
sort(nums.begin(), nums.end());
//调整边界
if(target >= nums[0]){              //target如果存在,则必然存在于左边,调整右边界(end)到左边
while(begin  nums[end] && nums[end] > target){
int mid = (begin + end) / 2;    //新边界
if(nums[begin] > nums[mid])         //新边界还在右边
end = mid - 1;
else                                //新边界在左边
if(nums[mid]  nums[end] && nums[begin] > target){
int mid = (begin + end) / 2;    //新边界
if(nums[begin] > nums[mid])         //新边界还在左边
begin = mid + 1;
else                                //新边界在左边
if(nums[mid] > target)          //跳过头了
end = mid - 1;
}
}
//二分查找
while(begin  target)          //往小处找
end = mid - 1;
if(nums[mid] < target)          //往大处找
begin = mid + 1;
}
//没找到
return false;
}
};

82. 删除排序链表中的重复元素 II

自己做

解:计数法

/**
* Definition for singly-linked list.
* struct ListNode {
*     int val;
*     ListNode *next;
*     ListNode() : val(0), next(nullptr) {}
*     ListNode(int x) : val(x), next(nullptr) {}
*     ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
vector count(200, 0);                  //计数数组
ListNode* p = head;
//遍历计数
while(p != nullptr){
count[p->val + 100]++;
p = p->next;
}
//首先删除开头部分(涉及头结点更改)
while(head != nullptr && count[head->val + 100] > 1)
head = head->next;
if(head == nullptr)                          //删完了
return head;
//删除结点
p = head;
ListNode* q = p->next;
while(q != nullptr){
if(count[q->val + 100] > 1)
p->next = q->next;
else
p = p->next;
q = p->next;
}
return head;
}
};

83. 删除排序链表中的重复元素

自己做

解:前后指针

/**
* Definition for singly-linked list.
* struct ListNode {
*     int val;
*     ListNode *next;
*     ListNode() : val(0), next(nullptr) {}
*     ListNode(int x) : val(x), next(nullptr) {}
*     ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
//删除开头重复部分
while(head != nullptr && head->next != nullptr && head->val == head->next->val)
head = head->next;
if(head == nullptr)         //删完了或者本身为空
return head;
//删除中间部分
ListNode* p = head;
while(p->next != nullptr){
if(p->val == p->next->val)              //有重复
p->next = p->next->next;
else                                    //无重复
p = p->next;
}
return head;
}
};

http://www.rkmt.cn/news/8022.html

相关文章:

  • vue2 项目实例 Layout布局(二)
  • 故障处理:ORA-00600 2252故障处理
  • Android 平台 MAUI 应用更新服务
  • SQL脚本:查询指定SQL的统计信息(cursor,awr)
  • 本地(或自下载)浏览器插件 安装指南
  • 路由查看命令
  • Linux 基础命令01
  • 面向多模态检索的向量数据库对比分析和技术选型:Elasticsearch、Milvus、Pinecone、FAISS、Chroma、PGVector、Weaviate、Qdrant
  • 终结AI幻觉:Amazon Bedrock如何用形式化方法重塑可信AI
  • 技术解读 | OceanBase 数据库诊断与调优的关键技术与方法
  • 我代表编程导航,向大家道歉!
  • cf div2 1051 E(视角转换,构造+思维)
  • openHarmony之开源三方库zlib适配讲解 - 实践
  • phoenix 导出sql执行结果到文件中
  • LK32V12A 过压/过流保护开关芯片 OVP过压45V 过流2.2A电流 SOT-23L
  • 深入解析:HTML元素周期表
  • APP 内测分发的核心逻辑与流程,虾分发让效率翻倍
  • 深入解析:【vue+exceljs+file-saver】纯前端:下载excel和上传解析excel
  • 解码C语言关键字
  • Windows环境中安装Zookeeper
  • ​​电流探头选型技术指南:精准捕获电流信号的艺术​​
  • slurm启动验证命令
  • 实用指南:LeetCode //C - 836. Rectangle Overlap
  • 深入解析:[Android] 安卓手机翻页时钟Flip Clock - World Clock v1.5.0.0
  • 深入解析:多模态大模型3:TAViS
  • 基于STM32F103C8T6与DS18B20的温度测量系统
  • Oxygen Forensic Detective 18.0 发布,新增功能简介
  • Windows如何美化cmd窗口
  • MX Round 7 解题报告
  • 实用指南:售价3499美元,英伟达Jetson Thor实现机器人与物理世界的实时智能交互