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

    做了第一道后,看了下中间两道题目,没怎么看懂就先放着,做完最后一道,然后就没时间了。

    1089. Duplicate Zeros

    Given a fixed length array arr of integers, duplicate each occurrence of zero, shifting the remaining elements to the right.

    Note that elements beyond the length of the original array are not written.

    Do the above modifications to the input array in place, do not return anything from your function.

    Example 1:

    Input: [1,0,2,3,0,4,5,0]
    Output: null
    Explanation: After calling your function, the input array is modified to: [1,0,0,2,3,0,0,4]
    

    Example 2:

    Input: [1,2,3]
    Output: null
    Explanation: After calling your function, the input array is modified to: [1,2,3]
    

    Note:

    1. 1 <= arr.length <= 10000
    2. 0 <= arr[i] <= 9

    题目大意:给你一个数组,让你改造这个数组,规则如下:1、数组长度不变。2、碰见0就将0重复一次,然后下一个数字往后移一位,查过长度的数字去掉。

    解题思路:还是比较简单的,只要看懂题目,按照题目规则我们可以先将数组保存下来,然后直接遍历保存的数组,在原数组上直接修改。(应该还有不需要辅助数组的解法)

    代码:

    class Solution {
        public void duplicateZeros(int[] arr) {
            int[] a = arr.clone();
            int len = arr.length;
            int j = 0;
            for(int i=0; i<len && j<len; i++) {
                if( a[i] == 0 ) arr[j++] = 0;
                if( j == len ) break;
                arr[j++] = a[i];
            }
        }
    }
    View Code

    1092. Shortest Common Supersequence

    Given two strings str1 and str2, return the shortest string that has both str1 and str2 as subsequences.  If multiple answers exist, you may return any of them.

    (A string S is a subsequence of string T if deleting some number of characters from T (possibly 0, and the characters are chosen anywherefrom T) results in the string S.)

    Example 1:

    Input: str1 = "abac", str2 = "cab"
    Output: "cabac"
    Explanation: 
    str1 = "abac" is a substring of "cabac" because we can delete the first "c".
    str2 = "cab" is a substring of "cabac" because we can delete the last "ac".
    The answer provided is the shortest such string that satisfies these properties.
    

    Note:

    1. 1 <= str1.length, str2.length <= 1000
    2. str1 and str2 consist of lowercase English letters.

    题目大意:题目很简单,就是求最短公共父串。即给你两个串str1和str2,让你寻找一个最短字符串str既包含str1也包含str2。当然这个str可能会有多个,输出其中一个就好。

    解题思路:相当于是一个LCS变种吧。求出两个串的LCS,然后将两个串不在LCS中的字符在相应的LCS的“空隙”中输出。

    代码:

        class Solution {
            public String shortestCommonSupersequence(String str1, String str2) {
                int m = str1.length();
                int n = str2.length();
    
                int dp[][] = new int[m + 1][n + 1];
    
                for (int i = 0; i <= m; i++) {
                    for (int j = 0; j <= n; j++) {
    
                        if (i == 0) {
                            dp[i][j] = j;
                        } else if (j == 0) {
                            dp[i][j] = i;
                        } else if (str1.charAt(i - 1) == str2.charAt(j - 1)) {
                            dp[i][j] = 1 + dp[i - 1][j - 1];
                        } else {
                            dp[i][j] = 1 + Math.min(dp[i - 1][j], dp[i][j - 1]);
                        }
                    }
                }
    
                int index = dp[m][n];
    
                String str = "";
    
                int i = m, j = n;
                while (i > 0 && j > 0)
    
                {
                    if (str1.charAt(i - 1) == str2.charAt(j - 1))
                    {
                        str += (str1.charAt(i - 1));
                        i--;
                        j--;
                        index--;
                    }
                    else if (dp[i - 1][j] > dp[i][j - 1]) {
                        str += (str2.charAt(j - 1));
    
                        j--;
                        index--;
                    } else {
                        str += (str1.charAt(i - 1));
                        i--;
                        index--;
                    }
                }
    
                while (i > 0) {
                    str += (str1.charAt(i - 1));
                    i--;
                    index--;
                }
    
                while (j > 0) {
                    str += (str2.charAt(j - 1));
                    j--;
                    index--;
                }
    
                str = reverse(str);
                return str;
            }
    
            String reverse(String input) {
                char[] temparray = input.toCharArray();
                int left, right = 0;
                right = temparray.length - 1;
    
                for (left = 0; left < right; left++, right--) {
                    char temp = temparray[left];
                    temparray[left] = temparray[right];
                    temparray[right] = temp;
                }
                return String.valueOf(temparray);
            }
        }
    View Code
  • 相关阅读:
    【设计模式(17)】行为型模式之中介者模式
    服务器迁移--MySQL数据库迁移
    巧妙解决element-ui下拉框选项过多的问题
    关于后台返回的文件流下载方法
    关于input框只让输入数字的写法
    关于element ui 全局配置某些组件的属性方法
    关于echarts的南丁格尔玫瑰图 极值导致展示效果不好的解决方案
    mock数据的使用方法
    配置 git账号和邮箱
    vite 发布了正式版版了 用起来
  • 原文地址:https://www.cnblogs.com/Asimple/p/11077851.html
Copyright © 2011-2022 走看看