简单的leetcode题

环绕字符串中唯一的子字符串

把字符串 s 看作是\(“abcdefghijklmnopqrstuvwxyz”\)的无限环绕字符串,所以 s 看起来是这样的\(“zabcdefghijklmnopqrstuvwxyzabcdefghijklm....”\)

现在我们有了另一个字符串 p 。你需要的是找出 s 中有多少个唯一的 p 的非空子串,尤其是当你的输入是字符串 p ,你需要输出字符串 s 中 p 的不同的非空子串的数目。

注意: p 仅由小写的英文字母组成,p 的大小可能超过 10000。

分析:我们以26字母分别结尾为划分,这样可以保证子字符串不重复。答案就是每个字母结尾的最大子字符串长度加起来。

class Solution {
public:
int findSubstringInWraproundString(string p) {
if(p.size()==0)
return 0;
int dp[27]={0};//以每个字母结尾的字串长度
int last=1;//此时结尾处的长度
dp[p[0]-'a']=1;//边界条件
for(int i=1;i<p.size();i++)
{
if(dp[p[i]-'a']==0)
dp[p[i]-'a']=1;
int j=i-1;
if((p[i]-p[j]+26)%26==1)//判断条件
{
if(last+1>=dp[p[i]-'a'])//出现更加长的子串
{
dp[p[i]-'a']=last+1;
}
last++;
}
else
last=1;
}
int ans=0;
for(int i=0;i<26;i++)
{
ans+=dp[i];
}
return ans;
}
};

二叉树的右视图

给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

非递归版本

分析:二叉树层次遍历,然后只加最后一个点的值即可。

/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> rightSideView(TreeNode* root) {
vector<int>ans;
queue<TreeNode* >Q;
if(root)
Q.push(root);
while(Q.size())
{
int n=Q.size();
for(int i=0;i<n;i++)
{
TreeNode* cur=Q.front();
Q.pop();
if(i==n-1)
ans.push_back(cur->val);
if(cur->left)
Q.push(cur->left);
if(cur->right)
Q.push(cur->right);
}
}
return ans;
}
};

递归版本

分析:当递归到第k层时(设根节点为第0层),如果这时ans数组里面有k个元素,加把此时的节点的值加入ans数组中。

/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> rightSideView(TreeNode* root) {
vector<int>ans;
dfs(root,ans,0);
return ans;
}
void dfs(TreeNode* root,vector<int> &ans,int cnt)
{
if(!root)
return ;
if(ans.size()==cnt)
ans.push_back(root->val);
dfs(root->right,ans,cnt+1);
dfs(root->left,ans,cnt+1);
}
};

合并两个有序链表

递归版本

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if(l1==NULL)
return l2;
else if(l2==NULL)
return l1;
else if(l1->val<l2->val)
{
l1->next=mergeTwoLists(l2,l1->next);
return l1;
}
else
{
l2->next=mergeTwoLists(l1,l2->next);
return l2;
}
}
};

非递归版本

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode* prehead = new ListNode(-1);
ListNode* prev = prehead;
while(l1&&l2)
{
if(l1->val<l2->val)
{
prev->next=l1;
l1=l1->next;
}
else
{
prev->next=l2;
l2=l2->next;
}
prev=prev->next;
}
prev->next=l1!=NULL?l1:l2;
return prehead->next;
}
};

排序链表

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* sortList(ListNode* head) {
ListNode Head(-1);
Head.next=head;
ListNode* p=head;
int len=0;
while(p)
{
len++;
p=p->next;
}
for(int siz=1;siz<len;siz=siz*2)
{
ListNode* cur=Head.next;
ListNode* tail=&Head;
while(cur)
{
ListNode* left=cur;
ListNode* right=cut(left,siz);
cur=cut(right,siz);
tail->next=merge(left,right);
while(tail->next)
{
tail= tail->next;
}
} }
return Head.next;
}
ListNode* cut(ListNode* p,int n)
{
while(p&&--n)
{
p=p->next;
}
if(!p)
return NULL;//返回空指针
ListNode* r=p->next;
p->next=NULL;
return r;
}
ListNode* merge(ListNode* l1,ListNode* l2)
{
ListNode head(-1);
ListNode* p=&head;
while(l1&&l2)
{
if(l1->val<l2->val)
{
p->next=l1;
l1=l1->next;
}
else
{
p->next=l2;
l2=l2->next;
}
p=p->next;
}
p->next=(l1?l1:l2);
return head.next;
}
};

简单的leetcode题的更多相关文章

  1. 简单的算法题, Find Minimum in Rotated Sorted Array 的Python实现。

    简单的算法题, Find Minimum in Rotated Sorted Array 的Python实现. 题目: Suppose a sorted array is rotated at som ...

  2. leetcode题库

    leetcode题库 #题名题解通过率难度出现频率  1 两数之和     46.5%简单2 两数相加     35.5%中等3 无重复字符的最长子串     31.1%中等4 寻找两个有序数组的中位 ...

  3. QDUOJ 一道简单的数据结构题 栈的使用(括号配对)

    一道简单的数据结构题 发布时间: 2017年6月3日 18:46   最后更新: 2017年6月3日 18:51   时间限制: 1000ms   内存限制: 128M 描述 如果插入“+”和“1”到 ...

  4. 实验吧之【简单的登录题(】CBC字节反转攻击)

    开始刷ctf题吧  慢慢来. 实验吧---简单的登录题 题目地址:http://ctf5.shiyanbar.com/web/jiandan/index.php 随便提交一个id,看到后台set了两个 ...

  5. CTF实验吧-WEB题目解题笔记(1)简单的登陆题

    1.简单的登陆题 解题链接: http://ctf5.shiyanbar.com/web/jiandan/index.php  Burp抓包解密 乱码,更换思路.尝试id intruder 似乎也没什 ...

  6. 【leetcode 简单】第四十一题 Excel表列序号

    给定一个Excel表格中的列名称,返回其相应的列序号. 例如, A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ...

  7. 【leetcode 简单】第九题 移除元素

    给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成 ...

  8. 【leetcode 简单】第二题 反转整数

    给定一个 32 位有符号整数,将整数中的数字进行反转. 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21 注意: 假 ...

  9. 【leetcode 简单】第一题 两数之和

    给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 15], target ...

随机推荐

  1. SpringMVC 参数映射与文件上传

    handler参数映射: 接下来就是Spring的各个处理细节了,无论框架如何疯转其实我们处理请求的流程是不变的,设计到的操作也是固定的,举个例子,当我们要实现一个登陆功能时: 创建一个用于处理登录请 ...

  2. ICC中对Skew进行Debug的好工具--Interactive CTS Window

    本文转自:自己的微信公众号<集成电路设计及EDA教程> ​以后打算交替着推送多种EDA工具的教程而不只是单纯针对某个工具,依次来满足不同粉丝的需求. 这里分享一篇多年之前写的推文,虽然时间 ...

  3. 使用npm发布、查看、引用、删除自己的包[小白推荐]

    前言  怎么使用npm发布自己的组件包呢?博主看了不少相关的文章,都没有一个好的讲述.要么丢三落四,要么就是复杂到外行人根本看不懂,甚至无从下手.于是,在博主的潜心钻研下,终于成功了!所以,我打算写一 ...

  4. ORA-12547: TNS: 丢失连接

    今天服务器挂掉了,公司的人弄了一下,,把服务器修好了,,但是我本地链接数据库一直报这个ORA-12547: TNS: 丢失连接,是服务器上的TNS监听没有启动,需要重启一下,

  5. uml图六种箭头的含义

    转:https://blog.csdn.net/wglla/article/details/52225571 在看一些技术博客的时候,经常会见到博客里画上很多uml图.因为经常会被这几种表达关系的箭头 ...

  6. HDU_5692_dfs序+线段树

    http://acm.hdu.edu.cn/showproblem.php?pid=5692 这道题真的是看了题解还搞了一天,把每条路径后序遍历按1-n重新标号,储存每个点在哪些路径中出现过(l和r数 ...

  7. BZOJ 3343 教主的魔法(分块)

    题意: 有一个1e6的数组,t次操作:将[l,r]内的值增加w,或者查询[l,r]内的值大于等于add的 思路: 分块,块大小为sqrt(n),每次只需要暴力头尾两块,中间的整块打标记, 对于查询查操 ...

  8. 配置 Docker 加速器

    Linux curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io ...

  9. 二维数组转稀疏数组、稀疏数组恢复二维数组(Java实现)

    public static void main(String[] args) { // 创建一个原始的二维数组 9*9 int chessArr1[][] = new int[9][9]; // 0表 ...

  10. 使用 H5 和 webGL 的智慧城市 3D 监控

    前言 中共中央.国务院在今年12月印发了<长江三角洲区域一体化发展规划纲要>(下文简称<纲要>),并发出通知,要求各地区各部门结合实际认真贯彻落实. <纲要>强调, ...