首页 > 其他分享 >最长连续序列(并查集、数组)、复原 IP 地址(字符串、回溯)、删除链表的倒数第 N 个结点(链表、双指针)

最长连续序列(并查集、数组)、复原 IP 地址(字符串、回溯)、删除链表的倒数第 N 个结点(链表、双指针)

时间:2023-04-04 10:04:12浏览次数:41  
标签:ListNode 示例 int IP 查集 next 链表 num

最长连续序列(并查集、数组)

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n)_ _的算法解决此问题。

示例 1: 输入:nums = [100,4,200,1,3,2] 输出:4 解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。 示例 2: 输入:nums = [0,3,7,2,5,8,4,6,0,1] 输出:9

提示:

  • 0 <= nums.length <= 105
  • -109 <= nums[i] <= 109

解答:

class Solution {
    public int longestConsecutive(int[] nums) {
        Set<Integer> num_set = new HashSet<Integer>();
        for (int num : nums) {
            num_set.add(num);
        }
        int longestStreak = 0;
        for (int num : num_set) {
            if (!num_set.contains(num - 1)) {
                int currentNum = num;
                int currentStreak = 1;
                while (num_set.contains(currentNum + 1)) {
                    currentNum += 1;
                    currentStreak += 1;
                }
                longestStreak = Math.max(longestStreak, currentStreak);
            }
        }
        return longestStreak;
    }
}

复原 IP 地址(字符串、回溯)

给定一个只包含数字的字符串,用以表示一个 IP 地址,返回所有可能从 s 获得的 **有效 IP 地址 **。你可以按任何顺序返回答案。 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。 例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "[email protected]" 是 无效 IP 地址。

示例 1:

输入:s = "25525511135"
输出:["255.255.11.135","255.255.111.35"]

示例 2:

输入:s = "0000"
输出:["0.0.0.0"]

示例 3:

输入:s = "1111"
输出:["1.1.1.1"]

示例 4:

输入:s = "010010"
输出:["0.10.0.10","0.100.1.0"]

示例 5:

输入:s = "101023"
输出:["1.0.10.23","1.0.102.3","10.1.0.23","10.10.2.3","101.0.2.3"]

提示:

  • 0 <= s.length <= 3000
  • s 仅由数字组成

解答:

class Solution {
    private List<String> res = new ArrayList<>();
    public List<String> restoreIpAddresses(String s) {
        if (s.length() < 4)
            return res;
        backtrack(s, 0, new StringBuilder(), 0);
        return res;
    }
    private void backtrack(String s, int start, StringBuilder sb, int pointNumOfSb) {
        if (pointNumOfSb > 4)
            return;
        if (start == s.length() && pointNumOfSb == 4) {
            res.add(sb.toString().substring(1));
            return;
        }
        for (int i = start; i < s.length() && i - start < 3; i++) {
            String x = s.substring(start, i + 1);
            if (x.charAt(0) == '0' && x.length() > 1)
                return;
            if (Integer.parseInt(x) <= 255) {
                sb.append("." + x);
                backtrack(s, i + 1, sb, pointNumOfSb + 1);
                sb.delete(sb.lastIndexOf("."), sb.length());
            }
        }
    }
}

删除链表的倒数第 N 个结点(链表、双指针)

给你一个链表,删除链表的倒数第 n_ _个结点,并且返回链表的头结点。 **进阶:**你能尝试使用一趟扫描实现吗?

示例 1:

输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]

示例 2:

输入:head = [1], n = 1
输出:[]

示例 3:

输入:head = [1,2], n = 1
输出:[1]

提示:

  • 链表中结点的数目为 sz
  • 1 <= sz <= 30
  • 0 <= Node.val <= 100
  • 1 <= n <= sz

解答:

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 removeNthFromEnd(ListNode head, int n) {
        ListNode v = new ListNode(0, head);
        ListNode handle = v;
        List<ListNode> index = new ArrayList<>();
        while (v != null) {
            index.add(v);
            v = v.next;
        }
        int pre = index.size() - n - 1;
        int next = index.size() - n + 1;
        index.get(pre).next = next >= 0 && next < index.size() ? index.get(next) : null;
        return handle.next;
    }
}

本文内容到此结束了, 如有收获欢迎点赞

标签:ListNode,示例,int,IP,查集,next,链表,num
From: https://blog.51cto.com/zhanjq/6167926

相关文章

  • HCIP华为认证H12-821题库(有全套题库,亲测900分)
    61、(多选题)以下关于漫游的描述,以下说法正确的是?A、实现无线漫游的AP必须有信号覆盖交叠区B、实现无线漫游的AP必须处在同一个扩展服务集(ESS)C、实现无线漫游的AP必须处在同一个基本服务集(BSS)D、实现无线漫游的AP不需要有信号覆盖交叠区正确答案是:AB解析:实现无线漫游的AP必须有......
  • 【SciPy】Sparse稀疏矩阵主要存储格式总结(转载)
    原文:【SciPy】Sparse稀疏矩阵主要存储格式总结在数据科学和深度学习等领域常会采用矩阵格式来存储数据,但当矩阵较为庞大且非零元素较少时,运算效率和存储有效率并不高。所以,通常我们采用Sparse稀疏矩阵的方式来存储矩阵,提高存储和运算效率。下面将对SciPy中七种常见的存储方式(COO/......
  • 在 Windows 7 中禁用IPv6协议/IPv6隧道
    HowtodisablecertainInternetProtocolversion6(IPv6)componentsinWindowsVista,Windows7andWindowsServer2008HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\双击DisabledComponents来修改DisabledComponents项。如果Disa......
  • CentOS 配置静态IP
    进入 vim/etc/sysconfig/network-scripts/ifcfg-ens33将BOOTPROTO=“staic”UUID"s删除该行"IPADDR=“10.0.0.123” 该ip地址要填自己的GATEWAY=“10.0.0.2” 填写自己的网关NETMASK="255.255.255.0" 子网掩码DES1=“10.0.0.123”  可以为自己的网关......
  • centos如何设置固定ip(来源于chatgpt)
    1打开该文件vi/etc/sysconfig/network-scripts/ifcfg-ethXX2修改BOOTPROTO=static3添加IPADDR=192.168.1.100NETMASK=255.255.255.0GATEWAY=192.168.1.1DNS1=8.8.8.8DNS2=8.8.4.44生效sudosystemctlrestartnetwork......
  • 127.0.0.1、0.0.0.0、localhost、本机IP区别
    1、简洁说明localhost(IP都没有,不到网络层IP也不到链路层MAC)   localhost不会解析成ip,也不会占用网卡、网络资源(到TCP/UDP,但不经过IP)    127.0.0.1(有IP,只到网络层IP走网卡,不到链路层MAC)   127.0.0.1回环地址,不经过[链路层,物理层](网络接口层),在IP层......
  • 基于Vmware安装的Linux配置静态IP
    背景说明作为一位服务端开发者,我们日常工作中所用到的软件都是运行在Linux环境下,Wmware等虚拟机软件可以快速帮我们搭建一套Linux环境。但是默认搭建的Linux环境IP地址是动态的,较为不方便,所以本文探讨如何在Wmware提供的不同网络模式下配置静态IP。环境准备win10wmwarecento......
  • 环形链表
    给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。如果pos......
  • Postman文件上传报错:The current request is not a multipart request解决方法
    主要报错语句为: Thecurrentrequestisnotamultipartrequest就是说当前这个请求不是一个multipartrequest,也就是说不是上传文件的请求。那怎么办呢?这里我们需要知道一点,spring在处理入参的时候,遇到MultipartFile相关就会先去校验。(在controller中会用MultipartFile......
  • 带环的单链表追击之拓展证明
    对于单链表有环问题,上一期,我们已经详细讲解了!!而快慢指针功不可没!!对于本期我们再次回顾,链表有环问题时,不难心中存在一个疑问,一定能追得上吗?会不会错过??那么为什么??为何能追上,什么情况下会追不上!!这就是我们今天讨论的重点!!假设单链表有环,快指针每次走两步,而慢指针每次走一步!!那么,快慢指......