Leetcode--easy系列2
#14 Longest Common Prefix
Write a function to find the longest common prefix string amongst an array of strings.
这个题求多个字符串的公共前缀,除了要考虑串空外,假设存在公共前缀,那么必然也是第一个串的前缀。
所以能够以第一个串为基准,比較其它串的前缀是否与第一个串同样。
char* longestCommonPrefix(char** strs, int strsSize) {
char *s0,*si;
int index;//指示比較位置
if (strsSize <= 0 || strs == NULL) return strs;
if (strsSize == 1) return strs[0];
s0 = strs[0];//以第一个字符串为基准
for (int i = 1; i < strsSize; ++i)
{
si = strs[i];
index = 0;//每一个字符串从0位置開始比較
while (true)
{
if (s0[index] != si[index] || s0[index] == NULL || si[index] == NULL)
{
s0[index] = '\0';//对于不相等的位置,必然不是公共前缀
break;
}
index++;
}
}
return strs[0];
}
#19 Remove Nth Node From End of List
Given a linked list, remove the nth node from the end of list and return its head.
For example,
Given linked list: 1->2->3->4->5, and n = 2. After removing the second node from the end, the linked list becomes 1->2->3->5.
Note:
Given n will always be valid.
Try to do this in one pass.
//0ms
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {
int len=0,j=0;
struct ListNode *p,*q;
p = head;//指向第一个元素 没有头结点
//求链表长度
while(p!=NULL)
{
p = p->next;
len++;
}
//边界条件
if(len-n<0)
return NULL;
if(len==1 &&n==1)
return NULL;
p = head;//指向第一个元素
q=p;
//删除的元素是第一个位置,不存在q全部先讨论
if(n==len)
{
p =head->next;
return p;
}
//一般条件---待删除元素位于第len-n+1个位置,倒数第n个位置
for(j=1;j<=len-n;j++)
{
q = p;//q指向待删除元素前一个元素第len-n个元素
p = p->next;//p指向待删除元素---第len-n+1个元素
}
q->next = p->next;
return head;
}
在leetcode discuss里面又看到第二种写法,一次遍历得到待删除节点位置
struct ListNode* removeNthFromEnd(struct ListNode* head, int n)
{
struct ListNode* front = head;
struct ListNode* behind = head;
//front后移len长度,behind后移len-n长度。behind->next即为待删除节点
while (front != NULL)
{
front = front->next;
if (n-- < 0)
behind = behind->next;
}
if (n == 0)//len==n
head = head->next;
else
behind->next = behind->next->next;
return head;
}
#20 Valid Parentheses
Given a string containing just the characters '(', ')', '{', '}', '[' and ']',
determine if the input string is valid.
The brackets must close in the correct order, "()" and "()[]{}" are
all valid but "(]" and "([)]" are
not.
括号匹配,首先想到栈。
bool isValid(char* s) {
int i,top,len;
char *a;
char ch;
len = strlen(s);
a = (char *)malloc(sizeof(char)*len);
top =-1;
for(i=0;i<len;i++)
{
ch = s[i];
if(ch=='{'||ch=='('||ch=='[')
a[++top] = ch;
if(ch==']'||ch==')'||ch=='}')
{
if(top==-1)
return false;
else if(ch==']'&& a[top]=='[')
top--;
else if(ch=='}'&& a[top]=='{')
top--;
else if(ch==')'&& a[top]=='(')
top--;
else
return false;
}
}
if(top==-1)
return true;
else
return false;
}
#21 Merge Two Sorted Lists
Merge
two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
合并两个有序链表---首先想到了归并排序最后的合并两个有序数组,写法全然类似。查了下面discuss 发现一种递归的写法。
/**4ms
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
struct ListNode *p,*head;
head = p;
if(l1==NULL)
return l2;
if(l2==NULL)
return l1;
while(l1&&l2)
{
if(l1->val <= l2->val)
{
p->next = l1;
l1 = l1->next;
}
else
{
p->next = l2;
l2 = l2->next;
}
p = p->next;
}
if(l1)
p->next = l1;
if(l2)
p->next = l2;
return head->next;
}
/**4ms
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2)
{
struct ListNode* l3;
if(l1==NULL)
return l2;
if(l2==NULL)
return l1;
if(l1->val < l2->val)
{
l3 = l1;
l3->next = mergeTwoLists(l1->next,l2);
}
else
{
l3 = l2;
l3->next = mergeTwoLists(l1,l2->next);
}
return l3;
}
Leetcode--easy系列2的更多相关文章
- hdu 2049 不easy系列之(4)——考新郎
不easy系列之(4)--考新郎 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- LeetCode——single-number系列
LeetCode--single-number系列 Question 1 Given an array of integers, every element appears twice except ...
- HDU 2045不easy系列之三LELE的RPG难题(趋向于DP的递推)
不easy系列之(3)-- LELE的RPG难题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...
- hdu1465不easy系列之中的一个(错排)
版权声明:本文为博主原创文章,未经博主同意不得转载. vasttian https://blog.csdn.net/u012860063/article/details/37512659 转载请注明出 ...
- Leetcode算法系列(链表)之删除链表倒数第N个节点
Leetcode算法系列(链表)之删除链表倒数第N个节点 难度:中等给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点.示例:给定一个链表: 1->2->3->4-&g ...
- Leetcode算法系列(链表)之两数相加
Leetcode算法系列(链表)之两数相加 难度:中等给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字.如果,我们将 ...
- leetcode easy problem set
*勿以浮沙筑高台* 持续更新........ 题目网址:https://leetcode.com/problemset/all/?difficulty=Easy 1. Two Sum [4m ...
- [Leetcode] Sum 系列
Sum 系列题解 Two Sum题解 题目来源:https://leetcode.com/problems/two-sum/description/ Description Given an arra ...
- LeetCode 笔记系列16.3 Minimum Window Substring [从O(N*M), O(NlogM)到O(N),人生就是一场不停的战斗]
题目:Given a string S and a string T, find the minimum window in S which will contain all the characte ...
- 决战Leetcode: easy part(51-96)
本博客是个人原创的针对leetcode上的problem的解法,所有solution都基本通过了leetcode的官方Judging,个别未通过的例外情况会在相应部分作特别说明. 欢迎互相交流! em ...
随机推荐
- 【转】学会这13个原则写UI界面文案,用户才能秒懂
原文网址:http://www.niaogebiji.com/article-12011-1.html 摘要: 首先,在写UI文案之前,为了理清思路,要先搞清楚三个问题:我(设计师)想让用户做什么? ...
- 利用道格拉斯·普客法(DP法)压缩矢量多边形(C++)
1.算法描述 经典的Douglas-Peucker算法(简称DP法)描述如下: (1)在曲线首尾两点A,B之间连接一条直线AB,该直线为曲线的弦: (2)得到曲线上离该直线段距离最大的点C,计算其与A ...
- 备忘录模式(Memento)C++实现
备忘录模式 意图: 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将改对象恢复到原先保存的状态. 适用性: 1.必须保存一个对象在某一个时刻的部分状态,这样以 ...
- 用命令行在本地创建一个库并上传到Github
1 如何在本地创建一个仓库并上传到github? 基本步骤: $ mkdir blog //在桌面上创建一个叫"blog"的目录 $ cd blog //"cd blo ...
- mybatis 高级映射和spring整合之查询缓存(5)
mybatis 高级映射和spring整合之查询缓存(5) 2.0 查询缓存 2.0.1 什么是查询缓存 mybatis提供缓存,用于减轻数据压力,提高数据库性能. mybatis提供一级缓存和二级缓 ...
- 1350 Taxi Cab Scheme DAG最小路径覆盖
对于什么是DAG最小路径覆盖以及解题方法在我的另外的博客已经有了.http://www.cnblogs.com/Potato-lover/p/3980470.html 此题的题意: 公交车(出租车)车 ...
- 03--软件包管理工具 apt
APT APT(the Advanced Packaging Tool)是Ubuntu 软件包管理系统的高级界面,由几个名字以“apt-”打头的程序组成.apt-get.apt-cache ...
- Linux 中文件名颜色所代表的属性
1. 白色:表示一般文件 2. 蓝色:表示目录 3. 绿色:表示可执行的文件或程序 4. 浅蓝色:表示链接文件 5. 黄色:表示设备文件 6. 灰色:表示其他类型文件 7. 红色:表示压缩文件或者包文 ...
- 脚本_部署LNMP平台
#!bin/bash#功能:部署LNMP平台,实际运行脚本时,需要去除备注.#作者:liusingbonfunction menu { //定义函数menu ...
- idea中SVN的运用
1.1.1 上传代码时可以指定忽略一些上传目录 1.1.2 设置项目上传的路径 1.1.3 解决上传路径中包含“svn”目录问题 上传 从 SVN 服务器中检出代码到工作空间