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 ...
随机推荐
- mysql 登录与权限
一.mysql 登录方式 1.1 格式:mysql -u用户名 -p密码 -h ip -P 端口 -S 套接字 mysql -uvagrant -pvagrant -h 127.0.0.1 -P 33 ...
- Springboot使用AOP实现统一处理Web请求日志
1.要使我们自定义的记录日志能够打印出来,我们需要先排除springboot默认的记录日志,添加如下的设置 2.新建 resources/log4j.properties 我的设置为: # LOG4J ...
- 学习环境搭建1——安装python
操作系统:windows7 64bit 下载地址python :https://www.python.org/ 下载Windows x86-64 executable installer 安 ...
- javascript中标准事件流addEventListener介绍
addEventListener-开始 前面零散地写了些关于 addEventListener 的内容,觉得比较散,有些地方可能也说得不够清楚明白,所以决定以连载的形式从头到尾再写一篇. addEve ...
- PowerDesigner 逆向工程 Could not Initialize JavaVM!
原项目的大量的表,使用PowerDesigner 进行逆向工程.提示Could not Initialize JavaVM! 网上找到原因,PowerDesigner 不可以使用64位JDK环境! 有 ...
- Boost1.67编译+CMake Generate时遇到的一个错误
下载的一个库编译时依赖boost,记录一下boost的编译: 下载源码 vs命令行里cd到根目录,运行bootstrap.bat,发现多了几个文件{b2.exe.bjam.exe.project-co ...
- Approximate Nearest Neighbors.接近最近邻搜索
(一):次优最近邻:http://en.wikipedia.org/wiki/Nearest_neighbor_search 有少量修改:如有疑问,请看链接原文.....1.Survey:Neares ...
- RabbitMQ学习之spring配置文件rabbit标签的使用
下面我们通过一个实例看一下rabbit的使用. 1.实现一个消息监听器ReceiveMessageListener.Java package org.springframework.amqp.core ...
- 图片放大不失真软件PhotoZoom如何使用?
PhotoZoom可以将我们一些过于像素低的照片可以无失真放大,那么PhotoZoom是如何实现无失真照片放大的呢? 以上图像中的编号表示每个步骤应操作的位置. 单击“打开”,并选择您想调整大小的图像 ...
- httpclient模拟浏览器
package com.java.httpclient; import java.io.IOException; import org.apache.http.HttpEntity; import o ...