zoukankan      html  css  js  c++  java
  • LeetCode Weekly Contest 220

    1694. Reformat Phone Number

    通过对字符串长度对3取模进行分析。

    public String reformatNumber(String number) {
            number = number.replaceAll("-", "");
            number = number.replaceAll(" ", "");
            int len = number.length();
            StringBuilder str = new StringBuilder();
            if (len % 3 == 0) {
                int index = 1;
                for (int i = 0; i < len; i++) {
                    str.append(number.charAt(i));
                    if (index % 3 == 0 && i < len - 1) {
                        str.append("-");
                        index = 0;
                    }
                    index++;
                }
            }
            if (len % 3 == 1) {
                int n = (len / 3);
                int time = (n - 1) * 3;
                int index = 1;
                for (int i = 0; i < time; i++) {
                    str.append(number.charAt(i));
                    if (index % 3 == 0) {
                        str.append("-");
                        index = 0;
                    }
                    index++;
                }
                String substring = number.substring(time);
                str.append(substring.substring(0, 2));
                str.append("-");
                str.append(substring.substring(2));
            }
            if (len % 3 == 2) {
                int time = (len / 3) * 3;
                int index = 1;
                for (int i = 0; i < time; i++) {
                    str.append(number.charAt(i));
                    if (index % 3 == 0) {
                        str.append("-");
                        index = 0;
                    }
                    index++;
                }
                str.append(number.substring(time));
            }
            return str.toString();
        }

    1695. Maximum Erasure Value

    类似最长不重复子序列的,这里是求和最大。

    public int maximumUniqueSubarray(int[] nums) {
            int[] q = new int[100005];
            int[] sum = new int[nums.length + 1];
            for (int i = 1; i <= nums.length; i++) {
                sum[i] = sum[i - 1] + nums[i - 1];
            }
            int res = 0;
            int j = 0;
            for (int i = 0; i < nums.length; i++) {
                q[nums[i]]++;
                while (q[nums[i]] > 1) {
                    q[nums[j]]--;
                    j++;
                }
                res = Math.max(sum[i + 1] - sum[j], res);
            }
            return res;
        }

    1696. Jump Game VI

    如果在 i 位置,可以跳跃 【i+1, i+k】的位置,求最大值。这题一直想着使用 dfs 来做,没有写出来,看别人的答案,发现使用滑动窗口可以,就是求出【i+1, i+k】中的最大值。
    public int maxResult(int[] nums, int k) {
            if (nums.length == 1) {
                return nums[0];
            }
            int ans = Integer.MAX_VALUE;
            int n = nums.length;
            PriorityQueue<int[]> pq = new PriorityQueue<>((a, b) -> b[1] - a[1]);
            pq.offer(new int[]{n - 1, nums[n - 1]});
            for (int i = n - 2; i >= 0; i--) {
                while (pq.peek()[0] > i + k) {
                    pq.poll();
                }
                ans = nums[i] + pq.peek()[1];
                pq.offer(new int[]{i, ans});
            }
            return ans;
        }
  • 相关阅读:
    就打排序算法总结
    php 垃圾回收机制写时复制和引用计数
    zend studio 使用断点调试
    SiteServer 迁移至 Windows 2008 R2 问题汇总
    [项目改造中的点滴]C#中IDataReader和DataSet的区别与使用场景
    顺序分支知识总结
    我的第一篇博客
    [原创]删除GRUB引导恢复Windows引导,不用下载任何工具
    在C++builder中使用正则表达式,非boost库,简单!~
    SQL 存储过程优化经验
  • 原文地址:https://www.cnblogs.com/lzeffort/p/14163219.html
Copyright © 2011-2022 走看看