算法之小细节(细节~链表的特殊结点~提升优化度)~反转链表、删除排序链表中的重复元素

简介: 算法之小细节(细节~链表的特殊结点~提升优化度)~反转链表、删除排序链表中的重复元素

算法之小细节(细节~链表的特殊结点~提升优化度)~删除排序链表中的重复元素、反转链表


 

1,删除排序链表中的重复元素

(1)细节优化度高的代码:


public ListNode deleteDuplicates(ListNode head) {
        if(head == null || head.next == null) {
            return head;
        } else {      // head.next 用得好
            head.next = deleteDuplicates(head.next);       //因为 是已经排序的链表,头结点即最小,只需要比较head 与新链表的头结点(head.next)就够了
            return head.val == head.next.val ? head.next:head;
        }
    }


(2)自己写的 代码哈哈哈:


public ListNode deleteDuplicates(ListNode head) {
        // 头为空,或 只有一个头结点时
        if (head == null || head.next == null)
            return head;
        // 递归得到头之后的链表        
        ListNode pre = deleteDuplicates(head.next);
        if(pre == null)    return head;
        // 或者链表只有一个头结点时
        if (pre.next == null) {
            if (pre.val == head.val) {
                //解释一下,为什么不能return head;
                //若 return head; 的话,而原来head 还指着老链条,出现重复结点啦
                return pre;
            }else {
                head.next = pre;
            }
        } else {
            if (pre.val == head.val) {
                head.next = pre.next;
            }else {
                head.next = pre;
            }
        }
        return head;
    }



//很巧妙的 人家的思路:head.next = deleteDuplicates(head.next); 这样就相比较于自己的代码:

// ListNode pre = deleteDuplicates(head.next);

//ListNode pre = deleteDuplicates(head.next);

好处在于不用判断 pre的情况,不用担心使用 pre.next == null 的情况,又判断 pre == null的情况

 

2,反转链表:

(1)细节优化度高的代码:

先说一下递归思路:

* 递归: 根据语义 reverseList(ListNode head),返回一条倒置的链表的头结点,
* 例如:原结点是 heda -》5-》4 -》3 -》2 -》1
* 利用语义的话 reverseList(head.next),得到了 head -》5 -》
* newHead -》1 -》2 -》3 -》4
* 细节:因为没有断链,原来的5 还是指导 4 身上, 即 newHead -》1 -》2 -》3 -》4  《- 5 《- head
* 所以,我们可以通过 5 的关系,拿到 4,调整4 指向5 ,
* 细节, 5是最后一个结点:它的next 需要指向空, 通过 head的关系拿到 5


public ListNode reverseList(ListNode head) {
        if(head == null)    return null;//return head; 也一样
        if(head.next == null)    return head;
        if(head == null || head.next == null)    return head;
        ListNode newHead = reverseList(head.next);
        //细节:这里用的是head.next.next(就是 4 这个结点的next指针),而不用 newHead这个变量,好处不用判断newHead(不为空时,就是4 这个结点) 是否为空,
        //因为咱如果是使用 newHead.next = head;(5 这个结点)   之前必须判断 newHead 是否为空,而使用 head.next(代表4 这个结点) 时,就可以避免判断情况
        head.next.next = head;
        head.next = null;
        return newHead;return newHead;
    }
目录
相关文章
|
7天前
|
存储 算法 Go
算法学习:数组 vs 链表
算法学习:数组 vs 链表
13 0
|
11天前
|
机器学习/深度学习 算法 PyTorch
【从零开始学习深度学习】43. 算法优化之Adam算法【RMSProp算法与动量法的结合】介绍及其Pytorch实现
【从零开始学习深度学习】43. 算法优化之Adam算法【RMSProp算法与动量法的结合】介绍及其Pytorch实现
|
1天前
|
算法
基于GA遗传优化的混合发电系统优化配置算法matlab仿真
**摘要:** 该研究利用遗传算法(GA)对混合发电系统进行优化配置,旨在最小化风能、太阳能及电池储能的成本并提升系统性能。MATLAB 2022a用于实现这一算法。仿真结果展示了一系列图表,包括总成本随代数变化、最佳适应度随代数变化,以及不同数据的分布情况,如负荷、风速、太阳辐射、弃电、缺电和电池状态等。此外,代码示例展示了如何运用GA求解,并绘制了发电单元的功率输出和年变化。该系统原理基于GA的自然选择和遗传原理,通过染色体编码、初始种群生成、适应度函数、选择、交叉和变异操作来寻找最优容量配置,以平衡成本、效率和可靠性。
|
2天前
|
机器学习/深度学习 算法
基于鲸鱼优化的knn分类特征选择算法matlab仿真
**基于WOA的KNN特征选择算法摘要** 该研究提出了一种融合鲸鱼优化算法(WOA)与K近邻(KNN)分类器的特征选择方法,旨在提升KNN的分类精度。在MATLAB2022a中实现,WOA负责优化特征子集,通过模拟鲸鱼捕食行为的螺旋式和包围策略搜索最佳特征。KNN则用于评估特征子集的性能。算法流程包括WOA参数初始化、特征二进制编码、适应度函数定义(以分类准确率为基准)、WOA迭代搜索及最优解输出。该方法有效地结合了启发式搜索与机器学习,优化特征选择,提高分类性能。
|
5天前
|
机器学习/深度学习 算法 数据挖掘
机器学习与智能优化——利用简单遗传算法优化FCM
机器学习与智能优化——利用简单遗传算法优化FCM
21 5
|
5天前
|
机器学习/深度学习 算法 数据可视化
m基于PSO-LSTM粒子群优化长短记忆网络的电力负荷数据预测算法matlab仿真
在MATLAB 2022a中,应用PSO优化的LSTM模型提升了电力负荷预测效果。优化前预测波动大,优化后预测更稳定。PSO借鉴群体智能,寻找LSTM超参数(如学习率、隐藏层大小)的最优组合,以最小化误差。LSTM通过门控机制处理序列数据。代码显示了模型训练、预测及误差可视化过程。经过优化,模型性能得到改善。
22 6
|
4天前
|
存储 算法 Java
Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。
【6月更文挑战第21天】Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。简单哈希表实现未涵盖冲突解决和删除操作。
12 1
|
5天前
|
算法 调度
基于变异混合蛙跳算法的车间调度最优化matlab仿真,可以任意调整工件数和机器数,输出甘特图
**摘要:** 实现变异混合蛙跳算法的MATLAB2022a版车间调度优化程序,支持动态调整工件和机器数,输出甘特图。核心算法结合SFLA与变异策略,解决Job-Shop Scheduling Problem,最小化总完成时间。SFLA模拟蛙群行为,分组进行局部搜索和全局信息交换。变异策略增强全局探索,避免局部最优。程序初始化随机解,按规则更新,经多次迭代和信息交换后终止。
|
5天前
|
机器学习/深度学习 算法 C语言
【深度学习】优化算法:从梯度下降到Adam
【深度学习】优化算法:从梯度下降到Adam
24 1
|
7天前
|
机器学习/深度学习 自然语言处理 算法
Adam优化算法和应用场景
Adam(Adaptive Moment Estimation)是一种用于训练深度学习模型的优化算法
19 2