资讯专栏INFORMATION COLUMN

【算法训练营】(day4)

lentoo / 2542人阅读

摘要:翻转指针整体后移当传入的链表只有两个节点或者上述翻转结束最后一个并没有翻转核心考点链表合并解题思路在一个链表中插来插去比较混乱,这里我们定义一个新的链表,将数据往里插。确立重复区域的起始位置确立重复区域

核心考点:链表操作,思维缜密程度

解题思路:
定义三个指针,整体右移,边移动,边翻转,保证不会断链,这里我们要注意分别只有一个节点,两个节点和多个节点的情况。

class Solution {public:	ListNode* ReverseList(ListNode* pHead) {		if (pHead == NULL || pHead->next == NULL)		{			return pHead;		}		ListNode* first = pHead;		ListNode* second = first->next;		ListNode* third = second->next;		while (third){			//翻转			second->next = first;			//指针整体后移			first = second;			second = third;			third = third->next;		}		second->next = first;//当传入的链表只有两个节点或者上述翻转结束最后一个并没有翻转		pHead->next = nullptr;		pHead = second;		return pHead;	}};

核心考点:链表合并

解题思路:
在一个链表中插来插去比较混乱,这里我们定义一个新的链表,将数据往里插。

struct ListNode {	int val;	struct ListNode *next;};struct ListNode* merge(struct ListNode* l1, struct ListNode* l2){	struct ListNode* guard = (struct ListNode*)malloc(sizeof(struct ListNode));//申请一个头结点	struct ListNode* tail = guard;//尾指针	struct ListNode* cur1 = l1;//记录当前遍历到的l1链表的结点位置	struct ListNode* cur2 = l2;//记录当前遍历到的l2链表的结点位置	while (cur1&&cur2)//当l1,l2中有一个链表遍历完毕时便停止	{		//取小的结点尾插到新链表后面		if (cur1->val < cur2->val)		{			tail->next = cur1;			cur1 = cur1->next;		}		else		{			tail->next = cur2;			cur2 = cur2->next;		}		tail = tail->next;//结点增加,尾指针后移	}	//将未遍历完的链表的剩余结点接到新链表后面	if (cur1)		tail->next = cur1;	else		tail->next = cur2;	struct ListNode* head = guard->next;	free(guard);	return head;}

核心考点:链表操作,临界条件检查,特殊情况处理


解题思路
通过快慢指针的方式,进而达到去重的结果这里要考虑特别多的特殊情况,如:全部相同,全部不相同,部分相同等,为了方便解题我们定义头结点,主要是应对全部。相同的情况。

class Solution {public:	ListNode* deleteDuplication(ListNode* pHead) {		if (pHead == NULL)		{			return pHead;		}		ListNode* head = new ListNode(0);		head->next = pHead;		ListNode* prev = head;		ListNode* last = prev->next;		while (last!=NULL)		{			//1.确立重复区域的起始位置			while (last->next != NULL&&last->val != last->next->val)			{				prev = last;				last = last->next;			}			//2.确立重复区域			while (last->next != NULL&&last->val == last->next->val)			{				last = last->next;			}			if (prev->next != last)			{				prev->next = last->next;			}			last = last->next;		}	}};

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/119634.html

相关文章

  • 100天搞定机器学习|Day4-6 逻辑回归

    摘要:而逻辑回归对于这样的问题会更加合适。也就是说,逻辑回归是用来得到样本属于某个分类的概率。这样构造的损失函数是合理的,并且它还是一个凸函数,十分方便求得参数,使得损失函数达到最小。然后导入逻辑回归类。 逻辑回归avik-jain介绍的不是特别详细,下面再唠叨一遍这个算法。 1.模型 在分类问题中,比如判断邮件是否为垃圾邮件,判断肿瘤是否为阳性,目标变量是离散的,只有两种取值,通常会编码为...

    qujian 评论0 收藏0
  • 学习 day4 html 盒子模型

    盒子模型 1.框模型 框:页面上所有元素都可以称为框 框模型:(BOX Model),又称盒子模型 定义框处理元素内容、内边距padding、外边距margin、边框的样式border   外边距margin margin-方向:        margin-left:        margin-right:        margin-top:        margin-bottom: 不...

    ?xiaoxiao, 评论0 收藏0
  • JavaScript引用类型---Date

    摘要:一创建实例对象依据系统设置的当前时间来创建一个对象参数代表自年月日世界标准时间起经过的毫秒数参数表示日期的字符串值。 一、创建Date实例对象 1.new Date();依据系统设置的当前时间来创建一个Date对象 let today = new Date(); console.log(today); //Thu Jun 14 2018 14:51:00 GMT+080...

    charles_paul 评论0 收藏0
  • 美团深度学习系统的工程实践

    摘要:在系统设计层面,由于其具有计算密集型的特性,所以与传统的机器学习算法在工程实践过程中存在诸多的不同。本文将介绍美团平台在应用深度学习技术的过程中,相关系统设计的一些经验。为此,目前业界针对深度学习训练的加速,提出了各种各样的解决方案。 背景 深度学习作为AI时代的核心技术,已经被应用于多个场景。在系统设计层面,由于其具有计算密集型的特性,所以与传统的机器学习算法在工程实践过程中存在诸多...

    Michael_Ding 评论0 收藏0
  • 美团深度学习系统的工程实践

    摘要:在系统设计层面,由于其具有计算密集型的特性,所以与传统的机器学习算法在工程实践过程中存在诸多的不同。本文将介绍美团平台在应用深度学习技术的过程中,相关系统设计的一些经验。为此,目前业界针对深度学习训练的加速,提出了各种各样的解决方案。 背景 深度学习作为AI时代的核心技术,已经被应用于多个场景。在系统设计层面,由于其具有计算密集型的特性,所以与传统的机器学习算法在工程实践过程中存在诸多...

    awokezhou 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<