当前位置: 首页 > 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.hskmm.com/?act=detail&tid=9685

相关文章:

  • 软件体系结构概论 1章
  • vLLM常用参数解释
  • 故障处理:ORA-00600 2252故障处理
  • Android 平台 MAUI 应用更新服务
  • SQL脚本:查询指定SQL的统计信息(cursor,awr)
  • 逆向分析之if语句与循环语句的分析
  • 读书笔记:索引组织表(IOT):让数据库查询飞起来的黑科技
  • 损失曲线出现先下降后上升
  • 【IEEE出版】第六届信息科学与并行、分布式处理国际学术会议(ISPDS 2025)
  • *控制线设计
  • 索引器的用法
  • 《sklearn机器学习——特征提取》 - 指南
  • Windows 10 11 Boot Fix
  • ubuntu 安装 milvus
  • 面向多模态检索的向量数据库对比分析和技术选型:Elasticsearch、Milvus、Pinecone、FAISS、Chroma、PGVector、Weaviate、Qdrant
  • 单词翻转
  • 终结AI幻觉:Amazon Bedrock如何用形式化方法重塑可信AI
  • 我代表编程导航,向大家道歉!
  • cf div2 1051 E(视角转换,构造+思维)
  • 从“被动监控”到“主动优化”:MyEMS 重构能源管理价值的路径
  • phoenix 导出sql执行结果到文件中
  • 论文解读-《Graph Retrieval-Augmented Generation A Survey》 - zhang
  • AI编程问题处理与传统网页搜索对比分析
  • APP 内测分发的核心逻辑与流程,虾分发让效率翻倍
  • WPF Canvas 网格线背景样式
  • C++ 最开始的地方
  • ClkLog埋点与用户行为分析系统:架构升级与性能全面提升
  • 常见开源安全工具列表
  • ARC187 做题记
  • SAP物料自动记账科目设置总结