Leetcode题解(27)
86. Partition List
题目
分析:题目要求将链表划分为两部分,前半部分小于x,后半部分大于等于x,并且各个数之间的相对顺序不变。
解题思路是:从头开始扫描链表,找打第一个大于等于x的数current,然后从这个数开始,把current之后的小于x的数依次插在current前,大于等于x的数不变;为了实现插入操作,可以新建一个带头节点的链表。
代码如下:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* partition(ListNode* head, int x) {
if(NULL == head)
return NULL; ListNode *pHead = new ListNode();//新创建一个链表
ListNode *pre = pHead;//添加一个头节点 ListNode *current = head;
while(current != NULL)//找到第一个大于等于x的节点
{
if(current->val <x)
{
pre->next = new ListNode(current->val);//小于x的节点,原封不动的copy到新链表中
pre = pre->next;
}
else
break;
current = current->next; }
ListNode *temp = current; while(temp!=NULL)//处理current之后小于x的节点
{
if(temp->val <x)
{
pre->next = new ListNode(temp->val);
pre = pre->next;
}
temp = temp->next;
}
temp = current;
while(temp!=NULL)//处理current之后大于等于x的节点
{
if(temp->val >=x)
{
pre->next = new ListNode(temp->val);
pre = pre->next;
}
temp = temp->next;
} return pHead->next; }
};
----------------------------------------------------------------------分割线----------------------------------------------------------------------------
88. Merge Sorted Array
题目
分析:注意题目的空间复杂度的要求
代码:
class Solution {
public:
void merge(int A[], int m, int B[], int n) { int i,j;
int index = m+n-; if ( == n)
{
return ;
} if ( == m && != n)
{
for (i=;i<n;i++)
{
A[i]=B[i];
}
return ;
} for(i=m-,j=n-;index>=;)
{
if (A[i]>B[j])
{
A[index]=A[i];
i--;
}
else
{
A[index]=B[j];
j--;
}
index--;
if (j<||i<)
{
break;
} }
if (i<)
{
for (i=j;i>=;i--)
{
A[index]=B[i];
index--;
}
} }
};
-----------------------------------------------------------------------分割线------------------------------------------------------------
89. Gray Code
题目
分析:主要理解格雷码的镜像构造法
代码
class Solution {
public:
vector<int> grayCode(int n) {
//if(n<=)
vector<int> res;
res.push_back();
int count=;
int index;
int temp;
unsigned int x;
while(count<=n)
{
x = ( << (count-));
index = res.size()-;
while(index>=)
{
temp = res[index];
temp = temp|x;
res.push_back(temp);
index--;
}
count++;
}
return res; }
};
Leetcode题解(27)的更多相关文章
- 【LeetCode题解】2_两数相加
目录 [LeetCode题解]2_两数相加 描述 方法一:小学数学 思路 Java 代码(非递归写法) Java 代码(递归写法) Python 代码(非递归写法) [LeetCode题解]2_两数相 ...
- [LeetCode 题解]: Maximum Subarray
前言 [LeetCode 题解]系列传送门: http://www.cnblogs.com/double-win/category/573499.html 1.题目描述 Find the c ...
- [LeetCode 题解]: plusOne
前言 [LeetCode 题解]系列传送门: http://www.cnblogs.com/double-win/category/573499.html 1.题目描述 Given a no ...
- [LeetCode 题解]: ZigZag Conversion
前言 [LeetCode 题解]系列传送门: http://www.cnblogs.com/double-win/category/573499.html 1.题目描述 The string ...
- 【LeetCode题解】二叉树的遍历
我准备开始一个新系列[LeetCode题解],用来记录刷LeetCode题,顺便复习一下数据结构与算法. 1. 二叉树 二叉树(binary tree)是一种极为普遍的数据结构,树的每一个节点最多只有 ...
- leetcode题解-122买卖股票的最佳时期
题目 leetcode题解-122.买卖股票的最佳时机:https://www.yanbinghu.com/2019/03/14/30893.html 题目详情 给定一个数组,它的第 i 个元素是一支 ...
- 【LeetCode题解】3_无重复字符的最长子串(Longest-Substring-Without-Repeating-Characters)
目录 描述 解法一:暴力枚举法(Time Limit Exceeded) 思路 Java 实现 Python 实现 复杂度分析 解法二:滑动窗口(双指针) 思路 Java 实现 Python 实现 复 ...
- 【LeetCode题解】225_用队列实现栈(Implement-Stack-using-Queues)
目录 描述 解法一:双队列,入快出慢 思路 入栈(push) 出栈(pop) 查看栈顶元素(peek) 是否为空(empty) Java 实现 Python 实现 解法二:双队列,入慢出快 思路 入栈 ...
- 【LeetCode题解】232_用栈实现队列(Implement-Queue-using-Stacks)
目录 描述 解法一:在一个栈中维持所有元素的出队顺序 思路 入队(push) 出队(pop) 查看队首(peek) 是否为空(empty) Java 实现 Python 实现 解法二:一个栈入,一个栈 ...
- 【LeetCode题解】844_比较含退格的字符串(Backspace-String-Compare)
目录 描述 解法一:字符串比较 思路 Java 实现 Python 实现 复杂度分析 解法二:双指针(推荐) 思路 Java 实现 Python 实现 复杂度分析 更多 LeetCode 题解笔记可以 ...
随机推荐
- MySQL线程池的引入可以提高我们的MySQL的性能
支持线程池的版本:MySQL 企业版本,MySQL percona的分支 MariDB 的版本.我们知道我们的MySQL 语句是不支持硬解析的,没有无SQL 解析 cache.每个连接对应一个线程,我 ...
- Unity 3D Time 类
Time class in UnityEngine Description The interface to get time information from Unity. Static Var ...
- String类的替换方法(9)
1:String replace(char old,char new) 2: String replace(String old,String new) 3: trim();//去除字符串空格 ...
- JVM(五)内存(Heap)分配
前面的两小节,我分享了一下JVM的垃圾回收算法和垃圾回收器,本节中,我们来看看JVM的内存分配到底是如何进行的,作为对前面两节内存回收的补充. 从前面的内存回收中我们了解到,Hotspot JVM中的 ...
- oracle 数据库(表)的逻辑备份与恢复
一.介绍逻辑备份是指使用工具export将数据对象的结构和数据导出到文件的过程.逻辑恢复是指当数据库对象被误操作而损坏后使用工具import利用备份的文件把数据对象导入到数据库的过程.物理备份即可在数 ...
- 策略模式Strategy
定义一系列的算法,把他们封装起来,使得算法独立于适用对象. 比如,一个系统有很多的排序算法,但是使用哪个排序算法是客户对象的自有.因此把每一个排序当做一个策略对象,客户调用哪个对象,就使用对应的策略方 ...
- 在MAC OS X中默认的Web共享目录
在Mac OS X中可以很方便的通过开启"Web共享"启用Apache服务:设置方法如下: 打开"系统设置偏好(System Preferences)" -&g ...
- spring boot系列01--快速构建spring boot项目
最近的项目用spring boot 框架 借此学习了一下 这里做一下总结记录 非常便利的一个框架 它的优缺点我就不在这背书了 想了解的可以自行度娘谷歌 说一下要写什么吧 其实还真不是很清楚,只是想记录 ...
- Easy sssp
Easy sssp 时间限制: 1 Sec 内存限制: 128 MB提交: 103 解决: 20[提交][状态][讨论版] 题目描述 输入数据给出一个有N(2 < = N < = ...
- 即时通信系统Openfire分析之五:会话管理
什么是会话? A拨了B的电话 电话接通 A问道:Are you OK? B回复:I have a bug! A挂了电话 这整个过程就是会话. 会话(Session)是一个客户与服务器之间的不中断的请求 ...