SouthLeetCode-打卡24年02月第1周

本文介绍了四道与链表操作相关的LeetCode题目,包括合并两个升序链表、合并K个升序链表、查找链表的中间结点以及链表分隔。展示了如何通过编程解决这些问题。

SouthLeetCode-打卡24年02月第1周

// Date : 2024/02/01 ~ 2024/02/04

034.合并两个有序链表

(1) 题目描述

034#LeetCode.21.#北岸计划2024/02/01

将两个升序链表合并为一个新的 升序 链表并返回。

新链表是通过拼接给定的两个链表的所有节点组成的。

(2) 题解代码

class Solution {
    private ListNode mergeLists(ListNode curr, ListNode list) {
        while (list != null) {
            int curVal = list.val;
            curr.next = new ListNode(curVal);
            curr = curr.next;
            list = list.next;
        }
        return curr;
    }

    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        ListNode dummy = new ListNode();
        ListNode curr = dummy;

        while (list1 != null && list2 != null) {
            boolean condition = list1.val < list2.val;
            int curVal = condition ? list1.val : list2.val;
            curr.next = new ListNode(curVal);
            curr = curr.next;
            if (condition) {
                list1 = list1.next;
            } else {
                list2 = list2.next;
            }
        }

        curr = mergeLists(curr, list1);
        curr = mergeLists(curr, list2);

        return dummy.next;
    }
}

035.合并K个升序链表

(1) 题目描述

035#LeetCode.23.#北岸计划2024/02/01

给你一个链表数组,每个链表都已经按升序排列。

请你将所有链表合并到一个升序链表中,返回合并后的链表。

(2) 题解代码

class Solution {
    public ListNode mergeKLists(ListNode[] lists) {
        int size = lists.length;
        ListNode curr;
        int curVal;
        ListNode dummy = new ListNode();
        List<Integer> result = new ArrayList<>();
        for(int i=0 ; i<size ; i++){
            curr = lists[i];
            while(curr != null){
                curVal = curr.val;
                result.add(curVal);
                curr = curr.next;
            }
        }
        Collections.sort(result);
        int length = result.size();
        ListNode resDummy = new ListNode();
        curr = resDummy;
        for(int k=0 ; k<length ; k++){
            curr.next = new ListNode(result.get(k));
            curr = curr.next;
        }
        return resDummy.next;

    }
}

036.链表的中间结点Ⅰ

(1) 题目描述

036#LeetCode.NULL.#北岸计划2024/02/03

给你单链表的头结点 head ,请你找出并返回链表的中间结点。

如果有两个中间结点,则返回第个中间结点。

(2) 题解代码

public class MiddleNodeFor1 implements MiddleNode {
    @Override
    public ListNode middleNode(ListNode head){
        ListNode dummy = new ListNode();
        dummy.next = head;
        ListNode slow = dummy;
        ListNode fast = head;
        while(fast != null){
            slow = slow.next;
            fast = fast.next;
            fast = fast != null ? fast.next : fast;
        }
        return slow;
    }
}

037.链表的中间结点Ⅱ

(1) 题目描述

037#LeetCode.876.#北岸计划2024/02/03

给你单链表的头结点 head ,请你找出并返回链表的中间结点。

如果有两个中间结点,则返回第个中间结点。

(2) 题解代码

class Solution {
    public ListNode middleNode(ListNode head) {
        ListNode dummy = new ListNode();
        dummy.next = head;
        ListNode slow = dummy;
        ListNode fast = dummy;
        while(fast != null){
            slow = slow.next;
            fast = fast.next;
            fast = fast != null ? fast.next : fast;
        }
        return slow;
    }
}

038.分隔链表

(1) 题目描述

038#LeetCode.86.#北岸计划2024/02/04

给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,

使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。

你应当 保留 两个分区中每个节点的初始相对位置。

(2) 题解代码

class Solution {
    public ListNode partition(ListNode head, int x) {
        if(head == null) return null;
        ListNode curr = head;
        List<Integer> list = new ArrayList();
        int curVal;
        while(curr != null){
            list.add(curr.val);
            curr = curr.next;
        }
        List<Integer> sList = new ArrayList();
        for(int i=0 ; i<list.size() ; i++){
            curVal = list.get(i);
            if(curVal < x){
                sList.add(curVal);
                list.remove(i);
                i--;
            }
        }
        for(int j=0 ; j<list.size() ; j++){
            curVal = list.get(j);
            sList.add(curVal);
        }
        ListNode newHead = new ListNode(sList.get(0));
        curr = newHead;
        for(int k=1 ; k<sList.size() ; k++){
            curVal = sList.get(k);
            curr.next = new ListNode(curVal);
            curr = curr.next;
        }
        return newHead;
    }
}
【最优潮流】直流最优潮流(OPF)课设(Matlab代码实现)内容概要:本文档主要围绕“直流最优潮流(OPF)课设”的Matlab代码实现展开,属于电力系统优化领域的教学与科研实践内容。文档介绍了通过Matlab进行电力系统最优潮流计算的基本原理与编程实现方法,重点聚焦于直流最优潮流模型的构建与求解过程,适用于课程设计或科研入门实践。文中提及使用YALMIP等优化工具包进行建模,并提供了相关资源下载链接,便于读者复现与学习。此外,文档还列举了大量与电力系统、智能优化算法、机器学习、路径规划等相关的Matlab仿真案例,体现出其服务于科研仿真辅导的综合性平台性质。; 适合人群:电气工程、自动化、电力系统及相关专业的本科生、研究生,以及从事电力系统优化、智能算法应用研究的科研人员。; 使用场景及目标:①掌握直流最优潮流的基本原理与Matlab实现方法;②完成课程设计或科研项目中的电力系统优化任务;③借助提供的丰富案例资源,拓展在智能优化、状态估计、微电网调度等方向的研究思路与技术手段。; 阅读建议:建议读者结合文档中提供的网盘资源,下载完整代码与工具包,边学习理论边动手实践。重点关注YALMIP工具的使用方法,并通过复现文中提到的多个案例,加深对电力系统优化问题建模与求解的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值