zoukankan      html  css  js  c++  java
  • leetcode easy problem set

     *勿以浮沙筑高台*

    持续更新........     题目网址:https://leetcode.com/problemset/all/?difficulty=Easy

    1. Two Sum [4ms]
    2. Reverse Integer [12ms] 

        题意:将一个32bit signed integer反转输出,如果反转之后超出32位补码范围 [-2^31,2^31-1],则输出0

        思路:边取模边算结果,结果存longlong判界

    3. Palindrome Number [112ms]

        题意:判断数字回文,且不要将数字转为字符串

        思路:和第2题一样,非负反转判等

    4. Roman to Integer [52ms]

         题意:罗马数字串转为数字

        方法:字符串hash

    class Solution {
    private:
        int case_(int ch)
        {
            switch (ch)
            {
            case 'I': return 1;
            case 'V': return 5;
            case 'X': return 10;
            case 'L': return 50;
            case 'C': return 100;
            case 'D': return 500;
            case 'M': return 1000;
            case 'I' * 55 + 'V': return 4;
            case 'I' * 55 + 'X': return 9;
            case 'X' * 55 + 'L': return 40;
            case 'X' * 55 + 'C': return 90;
            case 'C' * 55 + 'D': return 400;
            case 'C' * 55 + 'M': return 900;
            default:return 0;
            }
        }
    public:
        int romanToInt(string str) {
            register int x = 0, i;
            for (i = 1; i < str.size(); ++i)
            {
                register int t = case_(str[i - 1] * 55 + str[i]);
                if (t)x += t, i++;
                else
                    x += case_(str[i-1]);
            }
            if (i == str.size())x += case_(str[i - 1]);
            return x;
        }
    };
    View Code
    5. Longest Common Prefix [4ms]

        题意:一个字符串数组中所有元素的最长公共前缀

        思路:暴力,注意数组可能为空,可能数组只含有一个空串

        

    6. Valid Parentheses [4ms]

        题意:括号合法匹配

        方法:栈基本操作

    class Solution {
    public:
        bool isValid(string s) {
            char arr[10006] = { '#' };
            unordered_map<char, char> P{ {'(',')'},{'{','}'},{'[',']'} };
            int index = 1;
            for (auto i : s)
            {
                if (i != P[arr[index - 1]])arr[index++] = i;
                else index--;
            }
            return index == 1;
        }
    };
    7. Merge Two Sorted Lists [8ms]

        题意:合并两个已序链表

        方法:模拟

    class Solution {
    public:
        ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
            if (!l1)return l2;
            if (!l2)return l1;
            ListNode* res, *cur, *newNode;
            if (l1->val < l2->val)
            {
                res = new ListNode(l1->val);
                res->next = NULL;
                l1 = l1->next;
            }
            else
            {
                res = new ListNode(l2->val);
                res->next = NULL;
                l2 = l2->next;
            }
            cur = res;
            while (l1 != NULL && l2 != NULL)
            {
                if (l1->val < l2->val)
                {
                    newNode = new ListNode(l1->val);
                    newNode->next = NULL;
                    cur->next = newNode;
                    l1 = l1->next;
                }
                else
                {
                    newNode = new ListNode(l2->val);
                    newNode->next = NULL;
                    cur->next = newNode;
                    l2 = l2->next;
                }
                cur = cur->next;
            }
            while (l1 != NULL)
            {
                newNode = new ListNode(l1->val);
                newNode->next = NULL;
                cur->next = newNode;
                l1 = l1->next;
                cur = cur->next;
    
            }
            while (l2 != NULL)
            {
                newNode = new ListNode(l2->val);
                newNode->next = NULL;
                cur->next = newNode;
                l2 = l2->next;
                cur = cur->next;
    
            }
            return res;
        }
    };
    View Code
    8. Remove Duplicates from Sorted Array [16ms]

        题意:序列去重 

    .·   方法:STL-unique

      

    9. Remove Element [4ms]

        题意:移除序列中指定元素

        方法:STL-remove_if

       

    10.  Implement strStr() [4ms]

         题意:返回b串在a串中出现的首位置

        方法:KMP

    class Solution {
    int next[100006];
    
        void GetNext(string p) {
            next[0] = -1;
            int k = -1;
            for (int q = 1; q <= (int)p.size() - 1; q++)
            {
                while (k > -1 && p[k + 1] != p[q])
                    k = next[k];
                if (p[k + 1] == p[q])
                    k = k + 1;
                next[q] = k;
            }
        }
    
    public:
        int strStr(string s, string p) {
            if (p.empty())return 0;
    
            GetNext(p);
            register int i = 0, j = 0;
            int k = -1;
            for (int i = 0; i < s.size(); i++)
            {
                while (k >-1 && p[k + 1] != s[i])
                    k = next[k];
                if (p[k + 1] == s[i])
                    k = k + 1;
                if (k == p.size() - 1)
                    return i - p.size() +1;
            }
            return -1;
        }
    };
    View Code
    11. Divide Two Integers [12ms]

         题意:两个32bit signed int 做除法,如果结果越界那么输出2^31-1

        方法:存longlong,然后判界输出

    12. Search Insert Position  [4ms]

         题意:已序序列中找一个数,如果存在,返回index,如果不存在返回插入后使序列仍有序的插入位置

        方法:STL-lower_bound

     13. Maximum Subarray [8ms]

        题意:给定一个数字串,找出其中各个数字相加之和最大的一个子串,输出最大和。

        方法:dp[ ],dp[i]代表前 i 位的最优解,则转移方程为 dp[i] = max(dp[i] + nums[i], nums[i]);

    14.Length of Last Word [4ms]

        题意:给定一个字符串,里面的空格符将之分割为(0个或一个或)多个子字符串,求最后一个子串的长度    

        方法:利用字符串流将其顺序读出,返回长度

    15. Plus One [0 ms]

        题意:给定一个数组,这个数组代表一个数,比如【1,2,3】:123,让代表的数+1,然后返回新的数组,比如:【1,2,4】

        解法:从后往前数,第一个不是9的数,让其+1,是9的,变为0

     16. Add Binary [4ms]

        题意:两个二进制字符串相加

        方法:先反转两个字符串,使得低位对齐,然后遍历,进位标记做好即可

    class Solution {
    public:
        string addBinary(string a, string b) {
           string c = "";
            reverse(a.begin(), a.end());
            reverse(b.begin(), b.end());
            int siz = min(a.size(), b.size()), key = 0, i;
            for (i = 0; i < siz; ++i)
            {
                if (a[i] != b[i])    key ? c += '0' : c += '1';
                else
                {
                    if (key) c += '1', key = false;
                    else c += '0';
                    if (a[i] == '1')key++;
                }
            }
            auto fun = [&](string& a) {
                if (a.size() - siz)
                {
                    if (key)
                        for (i = siz; i < a.size(); ++i)
                            if (a[i] == '1')c += '0';
                            else
                            {
                                a[i] = '1';
                                key = false;
                                break;
                            }
                    if (key)c += '1', key = false;
                    else c += string(a.begin() + i, a.end());
                }
    
            };
            fun(a);
            fun(b);
            if (key)c += '1';
            reverse(c.begin(), c.end());
            return c;
        }
    };
    View Code

    17. Sqrt(x)

        题意:求取一个整数的根号取下整

        正解:【0,x】二分答案!!

    18. Remove Duplicates from Sorted List [8ms]

         题意:删除已序链表重复元素

        解法:遍历删除

    19. Same Tree [0ms]

        题意:给定两棵二叉树的根节点,判定两棵树的结构是否相同

        解题:中序遍历,一边遍历一边结构判同

     

    20. Symmetric Tree [4ms]

        题意:判定一颗二叉树是否左右对称

        解题:同上一题思路,一边遍历,一遍判定结构是否相同。但是,有一个需要注意的地方。

           遍历顺序,中-左-右,中-右-左,判定值序列是否相同,如果为null,记录值为0 !!,切不可省略不存储值!

    class Solution {
        vector<int> left,right;
    public:
        void trans(TreeNode* root, bool ispre)
        {
            if(root == NULL)
            {
                if(ispre)left.push_back(0);
                else right.push_back(0);
                return;
            }
            if(ispre)left.push_back(root->val);
            else right.push_back(root->val);
            
            if(ispre)trans(root->left, ispre);
            trans(root->right, ispre);
            if(!ispre)trans(root->left, ispre);
        }
        
        bool isSymmetric(TreeNode* root) {
            if(root == NULL)return true;
            trans(root,true);
            trans(root,false);
            return left == right;
        }
    };
  • 相关阅读:
    基于Windows环境下Myeclipse10.0下载安装破解及jdk的下载安装及环境变量的配置
    51 Nod 1791 合法括号子段【分治+字符串】
    一步一步深入理解Dijkstra算法
    POJ 3662 Telephone Lines【Dijkstra最短路+二分求解】
    拍拍网接入微信卡包备战双12圣诞购物季
    公众平台认证订阅号接口调整 增加群发接口等,可授权登录
    搜狗搜索推广品牌专区新增微信互动区展示企业微信公众号内容
    WP8版微信5.4发布 新增夜间模式 暂没小视频
    Kik CEO Ted Livingston发博称要成为西方的微信?
    微信"附近的人"新增商家公众号入驻功能
  • 原文地址:https://www.cnblogs.com/lv-anchoret/p/9973944.html
Copyright © 2011-2022 走看看