2018-07-15

作者: 美不胜收oo | 来源:发表于2018-07-15 09:02 被阅读0次

    521.最长特殊序列

    题目描述

    给定两个字符串,你需要从这两个字符串中找出最长的特殊序列。最长特殊序列定义如下:该序列为某字符串独有的最长子序列(即不能是其他字符串的子序列)。

    子序列可以通过删去字符串中的某些字符实现,但不能改变剩余字符的相对顺序。空序列为所有字符串的子序列,任何字符串为其自身的子序列。

    输入为两个字符串,输出最长特殊序列的长度。如果不存在,则返回 -1。

    示例 :

    输入: "aba", "cdc"
    输出: 3
    解析: 最长特殊序列可为 "aba" (或 "cdc")

    思路

    这个题坑就坑在题意上,把题意理解了的话,就是下面这个意思:
    如果两个字符串相等,那么没有;
    如果不相等,返回两字符串中的最大长度

    代码

    class Solution {
    public:
        int findLUSlength(string a, string b) {
            return a == b ? -1 : max(a.size(), b.size());
        }
    };
    

    258. 各位相加

    题目描述

    给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。

    示例:

    输入: 38
    输出: 2
    解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2。

    思路

    没什么难的

    代码一(递归版本)

    class Solution {
    public:
        int addDigits(int num) {
            if(num/10 == 0)
                return num;
            return addDigits(num%10 + addDigits(num/10));
        }
    };
    

    代码二(循环版本)

    class Solution {
    public:
        int addDigits(int num) {
            while(num/10)
            {
                num = num%10 + num/10;
            }
            return num;       
        }
    };
    

    代码三(进阶)

    就是找规律啦LOL,不好找,看的Hint,然后又看的维基百科

    class Solution {
    public:
        int addDigits(int num) {
            return num-9*((num-1)/9);
        }
    };
    

    496. 下一个更大元素 I

    题目描述

    给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。

    nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出-1。

    示例 1:

    输入: nums1 = [4,1,2], nums2 = [1,3,4,2].
    输出: [-1,3,-1]
    解释:
    对于num1中的数字4,你无法在第二个数组中找到下一个更大的数字,因此输出 -1。
    对于num1中的数字1,第二个数组中数字1右边的下一个较大数字是 3。
    对于num1中的数字2,第二个数组中没有下一个更大的数字,因此输出 -1。
    示例 2:

    输入: nums1 = [2,4], nums2 = [1,2,3,4].
    输出: [3,-1]
    解释:
    对于num1中的数字2,第二个数组中的下一个较大数字是3。
    对于num1中的数字4,第二个数组中没有下一个更大的数字,因此输出 -1。

    思路

    题目已经把处理步骤说的很清楚了

    代码

    class Solution {
    public:
        vector<int> nextGreaterElement(vector<int>& findNums, vector<int>& nums) {
            vector<int> ret;
            for(int i = 0;i<findNums.size();i++)
            {
                vector<int>::iterator pos = find(nums.begin(),nums.end(),findNums[i]);
                pos++;
                while(pos!=nums.end())
                {
                    if(*pos>findNums[i])
                    {
                        ret.push_back(*pos);
                        break;
                    }
                    pos++;
                }
                if(pos==nums.end())
                    ret.push_back(-1);
            }
            return ret;
        }
    };
    

    相关文章

      网友评论

        本文标题:2018-07-15

        本文链接:https://www.haomeiwen.com/subject/xeoupftx.html