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

力扣-数据结构-7【算法学习day.78】

前言

###我做这类文章一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?建议灵神的题单和代码随想录)和记录自己的学习过程,我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!


习题

1.链表随机节点

题目链接:382. 链表随机节点 - 力扣(LeetCode)

分析:数组存节点值,生成索引范围内的随机数并返回该随机数索引下的值

代码:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    int[] arr = new int[10005];
    int count = 0;
    public Solution(ListNode head) {
        for(ListNode i = head;i!=null;i=i.next){
            arr[count++] = i.val;
        }
    }
    
    public int getRandom() {
        Random r = new Random();
        int number=r.nextInt(count);
        return arr[number];
    }
}
 
/**
 * Your Solution object will be instantiated and called as such:
 * Solution obj = new Solution(head);
 * int param_1 = obj.getRandom();
 */

2.扁平化多级双向链表

题目链接: 430. 扁平化多级双向链表 - 力扣(LeetCode)

题面:

分析:用数组递归存储数值然后构造双向链表更加简单些 

代码:

/*
// Definition for a Node.
class Node {
    public int val;
    public Node prev;
    public Node next;
    public Node child;
};
*/

class Solution {
    int[] arr = new int[1005];
    int count = 0;
    public Node flatten(Node head) {
        if(head==null)return head;
        for(Node i = head;i!=null;i=i.next){
            arr[count++] = i.val;
            if(i.child!=null){
                recursion(i.child);
            }
        }
        Node fhead = new Node();
        Node pre = fhead;
        for(int i = 0;i<count;i++){
            Node node = new Node(arr[i]);
            pre.next=node;
            node.prev=pre;
            pre = node;
        }
        // for(Node i = fhead.next;i!=null;i=i.next){
        //     System.out.println(i.val);
        // }
        Node ans = fhead.next;
        ans.prev = null;
        return ans; 
    }
    public void recursion(Node head){
         for(Node i = head;i!=null;i=i.next){
            arr[count++] = i.val;
            if(i.child!=null){
                recursion(i.child);
            }
        }
    }
}

后言

上面是数据结构相关的习题,下一篇文章会将其他相关的习题。 


http://www.kler.cn/a/465382.html

相关文章:

  • 让私域用户付费的三个关键要素
  • 深入Android架构(从线程到AIDL)_10 主线程(UI 线程)的角色
  • DuckDB:密钥管理器及其应用
  • Maven 教程之 pom.xml 详解
  • 云从科技Java面试题及参考答案
  • 自学记录鸿蒙API 13:实现多目标识别Object Detection
  • 周末总结(2024/12/28)
  • 解決當前IP地址僅適用於本地網路
  • 在 Blazor 和 ASP.NET Core 中使用依赖注入和Scoped 服务实现数据共享方法详解
  • Elasticsearch检索之三:官方推荐方案search_after检索实现(golang)
  • 【SpringBoot教程】IDEA快速搭建正确的SpringBoot版本和Java版本的项目
  • PCA降维算法详细推导
  • UE5材质节点Camera Vector/Reflection Vector
  • 2024-12-29-sklearn学习(26)模型选择与评估-交叉验证:评估估算器的表现 今夜偏知春气暖,虫声新透绿窗纱。
  • 【MySQL】通过 Binlog 恢复MySQL数据
  • 解决Docker国内网络问题
  • Yeelight易来与Control4达成战略合作,开启智能家居全球战略新篇
  • Servlet中配置和使用过滤器
  • 《Vue3实战教程》40:Vue3安全
  • k8s启动报错
  • 华为仓颉编程语言与医疗领域的深度融合:技术与实践
  • android studio android sdk下载地址
  • matlab 实现了一个基于阵列信号处理的空间角和极化参数估计系统
  • 【2024年-8月-29日-开源社区openEuler实践记录】A - Ops:智能运维新时代的开源利器
  • Linux centos7 docker安装 (yum快速安装)
  • 深入剖析 Java HashMap