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

力扣-数据结构-6【算法学习day.77】

前言

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


习题

1.链表中的下一个更大节点

题目链接:1019. 链表中的下一个更大节点 - 力扣(LeetCode)

题面:

分析:这题可以先把所有值存起来然后从后往前遍历,记录遍历到的最大值和最大值所在的索引,如果遍历到的当前值大于或者等于最大值,说明其右边不存在严格大于该索引值的数,ans[i] = 0,并更新最大值以及索引,如果小于,就从当前位置+1出发,一直到最大索引,找到第一个比其大的 

代码:

/**
 * 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 {
    public int[] nextLargerNodes(ListNode head) {
        int count = 0;
        int[] arr = new int[10005];
        for(ListNode i = head;i!=null;i=i.next){
            arr[count++] = i.val;
        }
        int max = -1;
        int maxIndex = -1;
        int[] ans = new int[count];
        for(int i = count-1;i>=0;i--){
            if(arr[i]>=max){
                max = arr[i];
                maxIndex = i;
                ans[i] = 0;
            }else{
                for(int j = i+1;j<=maxIndex;j++){
                    if(arr[j]>arr[i]){
                        ans[i] = arr[j];
                        break;
                    }
                }
            }
        }
        return ans;
    }
}

2.从链表中删去总和值为零的连续节点

题目链接: 1171. 从链表中删去总和值为零的连续节点 - 力扣(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 {
    public ListNode removeZeroSumSublists(ListNode head) {
        // if(head==null||(head.next==null&&head.val==0))return null;
        int[] arr = new int[1005];
        int count = 0;
        for(ListNode i = head;i!=null;i=i.next){
            arr[count++] = i.val;
        }
        int[] flag = new int[count];
        for(int i = 0;i<count;i++){
            if(flag[i]==1)continue;
            int sum = 0;
            for(int j = i;j<count;j++){
                if(flag[j]==1)continue;
                sum+=arr[j];
                if(sum==0){
                    for(int k = i;k<=j;k++){
                        flag[k] = 1;
                    }
                    i = -1;
                    break;
                }
            }
        }
        ListNode fhead = new ListNode();
        ListNode pre = fhead;
        for(int i = 0;i<count;i++){
            if(flag[i]==1)continue;
            ListNode node = new ListNode(arr[i]);
            pre.next = node;
            pre = node;
        }
        return fhead.next;
    }
}

后言

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

 


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

相关文章:

  • 模型 九屏幕分析法
  • 「Java 数据结构全面解读」:从基础到进阶的实战指南
  • 【工具类】RedisUtil 操作相关
  • PDF文件提示-文档无法打印-的解决办法
  • cursor 使用技巧
  • 操作系统大题整理
  • 李永乐线性代数:A可逆,AX=B相关推论和例题解题思路
  • 【探花交友】day06—即时通信
  • [openGauss 学废系列]- openGauss体系结构-多个用户访问同一个数据库
  • Mooncake:kimi后端推理服务的架构设计
  • DOM解析:深入理解文档对象模型
  • Elasticsearch 数据存储底层机制详解
  • C++进阶-【高级语法】
  • 使用GitHub Pages部署静态网站:简易指南
  • 《Vue进阶教程》第二十四课:优化
  • c++ 里 常量转换 const_cast < T > ,要给模板参数 T 传递什么类型呢?
  • iClient3D for Cesium 加载shp数据并拉伸为白模
  • Node.js 工具:在 Windows 11 中配置 Node.js 的详细步骤
  • 影刀进阶应用 | 知乎发布想法
  • EMQX5.X版本性能配置调优参数
  • NSSCTF-web刷题
  • 爬虫入门二 beautifulsoup
  • 一个通用的居于 OAuth2的API集成方案
  • 解密MQTT协议:从QOS到消息传递的全方位解析
  • Element分阶段逐步升级
  • (计算机毕设)基于SpringBoot+Vue的在线音乐平台