优何软件 首页 软件资讯 其他 查看内容

字节跳动涉嫌代码抄袭被判赔8266万。。

2025-2-20 03:11| 来自: 互联网| 发布者: 软件小编

专栏:50多种数据结构彻底征服

专栏:50多种经典图论算法全部掌握

前几天美摄科技在公众号发文称,字节跳动旗下抖音等8款产品代码抄袭,判令抖音公司及其关联公司立即停止侵害美摄SDK软件著作权的行为,向美摄公司赔礼道歉,赔偿经济损失及合理支出共计约8266.8万元。

抄袭的原因据说是一位曾经在美摄工作过的员工,离职两年半后加入了字节,写代码时重复使用了一部分他在美摄工作时写过的代码。我之前一直以为代码是开源的,自己写的代码可以随便用,随便ctrl+c,ctrl+v,现在看来也不行了。

我觉得这种事很多程序员都干过,在这家公司写的代码,到下家公司的时候,如果能用到会直接拿过来用,不可能自己在重写一遍。原来这种行为是违法的,如果全部重写一遍是不是就不涉嫌抄袭?如果这样的话,法院又怎么确定代码是上家拿过来的还是自己重写的?





--------------下面是今天的算法题--------------

来看下今天的算法题,这题是LeetCode的第21题:合并两个有序链表。

问题描述

来源:LeetCode第21题

难度:简单

将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例1:



输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4]

  • 两个链表的节点数目范围是 [0, 50]

  • -100 <= Node.val <= 100

  • l1 和 l2 均按非递减顺序排列

问题分析

这题是让合并两个 有序 的链表,并且合并之后的链表也是有序的,很简单的一道题,使用双指针即可,两个指针分别指向两个链表的头节点,哪个节点的值小就取哪个。


如果其中的一个链表已经访问完了,就不需要再比较了,把另一个链表剩下节点的连接到新的链表后面即可。

JAVA:

public ListNode mergeTwoLists(ListNode linked1, ListNode linked2) {     // 如果其中的一个链表为空,直接返回另一个链表     if (linked1 == null)         return linked2;     if (linked2 == null)         return linked1;     ListNode dummy = new ListNode();// 哑结点     ListNode tail = dummy; // 新链表的尾节点     // 如果这两个链表都不为空,就一直遍历     while (linked1 != null && linked2 != null) {         // 比较一下,哪个小就把哪个连接到新的链表后面         if (linked1.val <= linked2.val) {             tail.next = linked1;// 连接到新的链表后面             linked1 = linked1.next;// 在往后走一步         } else {// 同上             tail.next = linked2;             linked2 = linked2.next;         }         tail = tail.next; //更新尾节点     }     // 然后把那个不为空的链表挂到新的链表后面     tail.next = linked1 == null ? linked2 : linked1;     return dummy.next; // 返回新的链表 }

C++:

public:     ListNode *mergeTwoLists(ListNode *list1, ListNode *list2) {         // 如果其中的一个链表为空,直接返回另一个链表         if (!list1)             return list2;         if (!list2)             return list1;         auto *dummy = new ListNode();// 哑结点         ListNode *tail = dummy; // 新链表的尾节点         // 如果这两个链表都不为空,就一直遍历         while (list1 && list2) {             // 比较一下,哪个小就把哪个连接到新的链表后面             if (list1->val <= list2->val) {                 tail->next = list1;// 连接到新的链表后面                 list1 = list1->next;// 在往后走一步             } else {// 同上                 tail->next = list2;                 list2 = list2->next;             }             tail = tail->next; //更新尾节点         }         // 然后把那个不为空的链表挂到新的链表后面         tail->next = list1 ? list1 : list2;         return dummy->next; // 返回新的链表     }

Python:

def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:     # 如果其中的一个链表为空,直接返回另一个链表     if not list1:         return list2     if not list2:         return list1     dummy = ListNode()  # 哑结点     tail = dummy  # 新链表的尾节点     # 如果这两个链表都不为空,就一直遍历     while list1 and list2:         # 比较一下,哪个小就把哪个连接到新的链表后面         if list1.val <= list2.val:             tail.next = list1  # 连接到新的链表后面             list1 = list1.next  # 在往后走一步         else:  # 同上             tail.next = list2             list2 = list2.next         tail = tail.next  # 更新尾节点     # 然后把那个不为空的链表挂到新的链表后面     tail.next = list1 if list1 else list2     return dummy.next  # 返回新的链表

笔者简介

博哥,真名:王一博,毕业十多年, 作者,专注于 数据结构和算法 的讲解,在全球30多个算法网站中累计做题2000多道,在公众号中写算法题解800多题,对算法题有自己独特的解题思路和解题技巧,喜欢的可以给个关注,也可以 下载我整理的1000多页的PDF算法文档 。


路过

雷人

握手

鲜花

鸡蛋

最新评论