算法刷题:[5.26]每日一题+快慢指针+合并区间

[5.26]每日一题+快慢指针+合并区间

一、每日一题:[leetcode:1190] 反转每对括号间的字串

(https://leetcode-cn.com/problems/reverse-substrings-between-each-pair-of-parentheses/)

在这里插入图片描述

题解一:栈或者双向队列,开始使用栈,发现最后还需要一次反转,于是使用双向队列
class Solution {
    public String reverseParentheses(String s) {
       LinkedList<Character> stack=new LinkedList<>();
        int i=0;
        char[] temp=s.toCharArray();
        while(i<temp.length){
            if(temp[i]!=')') stack.add(temp[i]);
            else{
                StringBuilder word=new StringBuilder();
                while(stack.peekLast()!='('){
                    word.append(stack.pollLast());
                }
                stack.pollLast();

                for(int j=0;j<word.length();j++){
                    stack.add(word.charAt(j));
                }
            }
            i++;
        }
        StringBuilder res=new StringBuilder();
        System.out.println(stack.toString());
        while(!stack.isEmpty()){
            res.append(stack.pop());
        }
        return res.toString();
    }
}

二、[leetcode:141] 环形链表

给定一个链表,判断链表中是否有环。

public class Solution {
    public boolean hasCycle(ListNode head) {
        if(head==null) return false;
        ListNode slow=head;
        ListNode fast=head;
        while(fast.next!=null&&fast.next.next!=null){
            slow=slow.next;
            fast=fast.next.next;
            if(slow==fast) return true;
        }
        return false;      
    }
}

三、[leetcode:202] 快乐数

编写一个算法来判断一个数 n 是不是快乐数

在这里插入图片描述

题解一:判断是否循环

图引用于:

作者:demigodliu
链接:https://leetcode-cn.com/problems/happy-number/solution/ha-xi-biao-kuai-man-zhi-zhen-kuai-le-shu-ghj4/
来源:力扣(LeetCode)

在这里插入图片描述

class Solution {
     public int getNext(int n) {
        int totalSum = 0;
        while (n > 0) {
            int d = n % 10;
            n = n / 10;
            totalSum += d * d;
        }
        return totalSum;
    }
    public boolean isHappy(int n) {
        int slowRunner = n;
        int fastRunner = getNext(n);
        while (fastRunner != 1 && slowRunner != fastRunner) {
            slowRunner = getNext(slowRunner);
            fastRunner = getNext(getNext(fastRunner));
        }
        return fastRunner == 1;
    }
}

四、[leetcode:876] 链表的中间结点

直接用快慢指针,当快指针到最后面的时候,慢的指针就正好在中间

class Solution {
    public ListNode middleNode(ListNode head) {
        ListNode slow = head, fast = head;
        while (fast != null && fast.next != null) {
            slow = slow.next;
            fast = fast.next.next;
        }
        return slow;
    }
}

五、[leetcode:56] 合并区间

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。
在这里插入图片描述

解法一:先排序,然后再进行合并区间

要注意区间的边界问题!!!

public int[][] merge(int[][] intervals) {
        Arrays.sort(intervals, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                if(o1[0]==o2[0]) return o1[1]-o2[1];
                return o1[0]-o2[0];
            }
        });
        System.out.println(Arrays.deepToString(intervals));
        List<int[]> merged = new ArrayList<int[]>();
        for (int i = 0; i < intervals.length; ++i) {
            int L = intervals[i][0], R = intervals[i][1];
            if (merged.size() == 0 || merged.get(merged.size() - 1)[1] < L) {
                merged.add(new int[]{L, R});
            } else {
                merged.get(merged.size() - 1)[1] = Math.max(merged.get(merged.size() - 1)[1], R);
            }
        }
        return merged.toArray(new int[merged.size()][]);

    }
这两个问题都涉及到了与 Perl 相关的模块依赖冲突。 对于第一个问题,错误消息指出 `perl-DBD-SQLite` 模块需要 Perl 的版本为 5.26,但系统中没有可用的符合此要求的 Perl 模块。类似地,第二个问题中的 `perl-DBI` 模块也需要 Perl 的版本为 5.26。 要解决这些问题,您可以尝试以下步骤: 1. 检查系统中是否已经安装了 Perl。您可以运行以下命令来验证 Perl 的安装情况: ``` perl -v ``` 如果 Perl 未安装,请使用适当的命令进行安装。根据您使用的操作系统,可能是: ``` sudo apt-get install perl ``` 或 ``` sudo yum install perl ``` 2. 如果 Perl 已经安装,但版本不符合要求,您可以尝试使用适当的包管理器来更新 Perl 到所需的版本。具体命令取决于您使用的操作系统和包管理器。例如,如果您使用的是 CentOS/RHEL 系统,并且使用的是 yum 包管理器,可以运行以下命令: ``` sudo yum update perl ``` 如果您使用的是 Ubuntu/Debian 系统,并且使用的是 apt-get 包管理器,可以运行以下命令: ``` sudo apt-get install perl ``` 3. 如果更新 Perl 不可行或者不适用于您的情况,请考虑使用其他方法来安装所需的 Perl 模块。您可以尝试使用 CPAN 或其他 Perl 模块管理工具来安装特定版本的模块。具体步骤取决于您使用的工具和模块。 至于第二个问题中提到的 `new-kernel-pkg`,根据错误消息,看起来这个包在系统中无法找到。这可能是因为您使用的包管理器不支持或没有安装该包。请确保您使用的是正确的包管理器,并且已经正确安装了该包。 如果问题仍然存在,请提供更多关于您使用的操作系统、包管理器和其他相关信息,以便我能够更好地帮助您解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值