前段时间小米造车确实火了,PPT也讲了好久,不过到现在为止雷军都没有公布其价格,不知道在犹豫啥。曾经有网友在微博上问他价格,雷军回到:“50万以内,有对手吗?”,很多网友评论只要敢超过30万,绝对完蛋。
不知道小米汽车的具体价格,本来打算参考蔚来看下,结果发现蔚来竟然造手机了,官网查了一下,发现7000多,价格还不低。现在有点懵了,造手机的去造车,造车的又去造手机。你跨行也就算了,关键是你跨行的产品卖的都很贵,这个就有点让人匪夷所思了。。。
看完了蔚来的手机价格,我们再来看下蔚来今年的校招薪资(这里只统计IT行业的,数据来源OfferShow),整体来看的话还是不错的,校招薪资基本上都能达到30w以上,其中搞算法的薪资是最高的,基本上都能达到40w以上,可以看下。
--------------下面是今天的算法题--------------
看完了蔚来的校招薪资,我们今天来看一道蔚来的算法题,这题是LeetCode的第83题:删除排序链表中的重复元素,这题非常简单,我们来看下。
问题描述
来源:LeetCode第83题
难度:简单
给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。
示例1:
输入:head = [1,1,2]
输出:[1,2]
示例2:
输入:head = [1,1,2,3,3]
输出:[1,2,3]
链表中节点数目在范围 [0, 300] 内
-100 <= Node.val <= 100
题目数据保证链表已经按升序排列
问题分析
这题说的是在一个排序的链表中,如果有重复元素,就把重复的节点删除,使重复的节点只出现一次。
这题和我们前面讲的删除排序链表中的重复元素 II非常类似,前面一道题如果有重复的必须把重复的全部删除,这题如果有重复的,还要保留一个。
所以这题相对来说更加简单,因为题中说了是排序的链表,所以如果有重复的元素,他们肯定是挨着的。我们遍历节点的时候都要和下一个节点比较,如果有相同的直接删除即可。
JAVA:
public ListNode deleteDuplicates(ListNode head) {
ListNode cur = head;
while (cur != null) {
// 当前节点和下一个节点相同,就把下一个节点给删除。
while (cur.next != null && cur.val == cur.next.val)
cur.next = cur.next.next;
cur = cur.next;// 继续判断后面的节点。
}
return head;
}
C++:
public:
ListNode* deleteDuplicates(ListNode* head) {
ListNode* cur = head;
while (cur) {
// 当前节点和下一个节点相同,就把下一个节点给删除。
while (cur->next && cur->val == cur->next->val)
cur->next = cur->next->next;
cur = cur->next;// 继续判断后面的节点。
}
return head;
}
C:
struct ListNode* deleteDuplicates(struct ListNode* head) {
struct ListNode* cur = head;
while (cur) {
// 当前节点和下一个节点相同,就把下一个节点给删除。
while (cur->next && cur->val == cur->next->val)
cur->next = cur->next->next;
cur = cur->next;// 继续判断后面的节点。
}
return head;
}
Python:
def deleteDuplicates(self, head: Optional[ListNode]) -> Optional[ListNode]:
cur = head
while cur:
# 当前节点和下一个节点相同,就把下一个节点给删除。
while cur.next and cur.val == cur.next.val:
cur.next = cur.next.next
cur = cur.next # 继续判断后面的节点。
return head
笔者简介
博哥,真名:王一博,毕业十多年,《算法秘籍》作者,专注于数据结构和算法的讲解,在全球30多个算法网站中累计做题2000多道,在公众号中写算法题解700多题,对算法题有自己独特的解题思路和解题技巧,喜欢的可以给个关注,也可以下载我整理的1000多页的PDF算法文档。