*勿以浮沙筑高台*

持续更新........     题目网址: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 ;
case 'V': return ;
case 'X': return ;
case 'L': return ;
case 'C': return ;
case 'D': return ;
case 'M': return ;
case 'I' * + 'V': return ;
case 'I' * + 'X': return ;
case 'X' * + 'L': return ;
case 'X' * + 'C': return ;
case 'C' * + 'D': return ;
case 'C' * + 'M': return ;
default:return ;
}
}
public:
int romanToInt(string str) {
register int x = , i;
for (i = ; i < str.size(); ++i)
{
register int t = case_(str[i - ] * + str[i]);
if (t)x += t, i++;
else
x += case_(str[i-]);
}
if (i == str.size())x += case_(str[i - ]);
return x;
}
};
5. Longest Common Prefix [4ms]

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

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

    

6. Valid Parentheses [4ms]

    题意:括号合法匹配

    方法:栈基本操作

class Solution {
public:
bool isValid(string s) {
char arr[] = { '#' };
unordered_map<char, char> P{ {'(',')'},{'{','}'},{'[',']'} };
int index = ;
for (auto i : s)
{
if (i != P[arr[index - ]])arr[index++] = i;
else index--;
}
return index == ;
}
};
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;
}
};
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[]; void GetNext(string p) {
next[] = -;
int k = -;
for (int q = ; q <= (int)p.size() - ; q++)
{
while (k > - && p[k + ] != p[q])
k = next[k];
if (p[k + ] == p[q])
k = k + ;
next[q] = k;
}
} public:
int strStr(string s, string p) {
if (p.empty())return ; GetNext(p);
register int i = , j = ;
int k = -;
for (int i = ; i < s.size(); i++)
{
while (k >- && p[k + ] != s[i])
k = next[k];
if (p[k + ] == s[i])
k = k + ;
if (k == p.size() - )
return i - p.size() +;
}
return -;
}
};
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 = , i;
for (i = ; i < siz; ++i)
{
if (a[i] != b[i]) key ? c += '' : c += '';
else
{
if (key) c += '', key = false;
else c += '';
if (a[i] == '')key++;
}
}
auto fun = [&](string& a) {
if (a.size() - siz)
{
if (key)
for (i = siz; i < a.size(); ++i)
if (a[i] == '')c += '';
else
{
a[i] = '';
key = false;
break;
}
if (key)c += '', key = false;
else c += string(a.begin() + i, a.end());
} };
fun(a);
fun(b);
if (key)c += '';
reverse(c.begin(), c.end());
return c;
}
};

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();
else right.push_back();
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;
}
};

leetcode easy problem set的更多相关文章

  1. UVA-11991 Easy Problem from Rujia Liu?

    Problem E Easy Problem from Rujia Liu? Though Rujia Liu usually sets hard problems for contests (for ...

  2. An easy problem

    An easy problem Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Sub ...

  3. UVa 11991:Easy Problem from Rujia Liu?(STL练习,map+vector)

    Easy Problem from Rujia Liu? Though Rujia Liu usually sets hard problems for contests (for example, ...

  4. POJ 2826 An Easy Problem?!

    An Easy Problem?! Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7837   Accepted: 1145 ...

  5. hdu 5475 An easy problem(暴力 || 线段树区间单点更新)

    http://acm.hdu.edu.cn/showproblem.php?pid=5475 An easy problem Time Limit: 8000/5000 MS (Java/Others ...

  6. 【暑假】[实用数据结构]UVa11991 Easy Problem from Rujia Liu?

    UVa11991 Easy Problem from Rujia Liu?  思路:  构造数组data,使满足data[v][k]为第k个v的下标.因为不是每一个整数都会出现因此用到map,又因为每 ...

  7. HDU 5475 An easy problem 线段树

    An easy problem Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pi ...

  8. UVA 11991 Easy Problem from Rujia Liu?(vector map)

    Easy Problem from Rujia Liu? Though Rujia Liu usually sets hard problems for contests (for example, ...

  9. 数据结构(主席树):HDU 4729 An Easy Problem for Elfness

    An Easy Problem for Elfness Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 65535/65535 K (J ...

随机推荐

  1. C++ Rule of Three

    Rule of Three The rule of three (also known as the Law of The Big Three or The Big Three) is a rule ...

  2. linux 自定义yum仓库、repo文件 yum命令

    目录 自定义yum仓库:createrepo 自定义repo文件 使用yum命令安装httpd软件包 卸载httpd软件包:yum –y remove 软件名 清除yum缓存:yum clean al ...

  3. Tomcat与Spring中的事件机制详解

    最近在看tomcat源码,源码中出现了大量事件消息,可以说整个tomcat的启动流程都可以通过事件派发机制串起来,研究透了tomcat的各种事件消息,基本上对tomcat的启动流程也就有了一个整体的认 ...

  4. C语言实现线性表

    #include <stdio.h> #include <stdlib.h> //提供malloc()原型 /* 线性表需要的方法: 1. List MakeEmpty():初 ...

  5. Postman和Selenium IDE开局自带红蓝BUFF属性,就问你要还是不要

    话不多说,下面给大家介绍两款工具,selenium IDE和Postman. 为什么说是自带红蓝Buff,因为想做UI自动化和接口自动化的同学,很多时候,都难在了开头. 比如你要学习语言,你要学习框架 ...

  6. java_环境安装(window10)

    参考地址 下载JDK 下载地址:https://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html 本地环境变 ...

  7. [转]softmax函数详解

    答案来自专栏:机器学习算法与自然语言处理 详解softmax函数以及相关求导过程 这几天学习了一下softmax激活函数,以及它的梯度求导过程,整理一下便于分享和交流. softmax函数 softm ...

  8. [转]QVector与QByteArray——Qt的写时复制(copy on write)技术

    我们在之前的博文QVector的内存分配策略与再谈QVector与std::vector——使用装饰者让std::vector支持连续赋值中简单聊了聊QVector内存分配和赋值方面的一点东西,今天接 ...

  9. Hibernate5笔记8--Hibernate事务相关内容

    Hibernate事务相关内容: (1) 事务四大特性(简称ACID): (1)原子性(Atomicity) 事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行. (2)一致性(Con ...

  10. 关于Linux内核版本

    Linux内核可分为实验版本和产品化版本.每一个版本号由三位数字“x.y.z”组成,第二位数字说明版本类型:偶数表示产品化版本,奇数表示实验版本.产品化版本只修改错误,而实验版本最初是产品化版本的拷贝 ...