ARTS第10周

1.Algorithm

169. 多数元素

分治解法:

class Solution {
   public int majorityElement(int[] nums) {
       return dive(nums, 0, nums.length-1);
   }

   public int dive(int[] nums, int lo, int hi) {
       if (lo == hi) {
           return nums[lo];
       }
       int mid = (hi - lo) / 2 + lo;
       int left = dive(nums, lo, mid);
       int right = dive(nums, mid + 1, hi);
       if (left == right) {
           return left;
       }
       int leftCount = countInRange(nums, left, lo, hi);
       int rightCount = countInRange(nums, right, lo, hi);
       return leftCount > rightCount ? left : right;
   }

   public int countInRange(int[] nums, int num, int lo, int hi) {
       int count = 0;
       for (int i = lo; i <= hi; i++) {
           if (nums[i] == num) {
               count++;
           }
       }
       return count;
   }
}

2.Review

Data Structure and Algorithms - Linked List
链表是通过链接连接数据在一起的一系列数据结构。
链表是一系列包含item的链接。每个链接都包含到另一个链接的连接。链表是第二常用的数据结构,仅次于数组。下面是理解链表概念的重要术语。

  • Link :链表的每个链接能存储一个数据,这个数据叫元素。
  • Next:链表的每个链接包含了下一个链接的链接,这个链接叫Next。
  • LinkedList:链表包含第一个链接的连接,这第一个链接叫First。

链表表现形式

链表可以可视化为一个节点链,其中每个节点指向下一个节点。



根据上面的说明,以下是需要考虑的要点。

  • 链表包含一个名为first的链接元素。
  • 每个链接携带一个数据字段和一个名为next的链接字段。
  • 每个链接都使用下一个链接与下一个链接链接。(Each link is linked with its next link using its next link.)
  • 最后一个链接将一个链接作为null来标记列表的结束。

链表的类型

下面是各种类型的链表。

  • 单链表 - 项目导航只向前进。
  • 双向链表 - 项目可以向前和向后导航。
  • 循环链表 - 最后一项包含第一个元素作为下一个元素的链接,第一个元素有最后一个元素的链接,可以作为前一个元素的链接。

基本操作

下面是列表支持的基本操作。

  • insertion 在列表的开头添加一个元素。
  • deletion 删除列表开头的元素。
  • display 显示完整的列表。
  • search 使用给定的键值搜索元素。
  • Delete 使用给定的键删除元素。

插入操作

在链表中添加新节点是一个多步骤活动。我们将通过图表来学习。首先,使用相同的结构创建一个节点,并找到要插入它的位置。



假设我们在A (LeftNode)和C (RightNode)之间插入一个节点B (NewNode)。然后B.next指向C

NewNode.next −> RightNode;

它看起应该是这样的



现在,左边的下一个节点应该指向新节点。

LeftNode.next −> NewNode;

这将把新节点放在两个节点的中间。新的列表应该是这样的



如果将节点插入到列表的开头,则应该采取类似的步骤。当它插入到末尾时,列表的倒数第二个节点应该指向新节点,而新节点将指向NULL。

删除操作

删除也是一个多步骤的过程。我们将用图示来学习。首先,使用搜索算法定位要删除的目标节点。



目标节点的左(前)节点现在应该指向目标节点的下一个节点-

LeftNode.next −> TargetNode.next;

这将删除指向目标节点的链接。现在,使用以下代码,我们将删除目标节点所指向的链接。

TargetNode.next −> NULL;

我们需要使用已删除的节点。我们可以将其保存在内存中,否则我们可以简单地释放内存并完全清除目标节点。


反转操作

这是一次彻底的操作。我们需要使头节点指向的最后一个节点,并反转整个链表。


首先,我们遍历列表的末尾。它应该指向NULL。现在,我们让它指向它的前一个节点-

我们必须确保最后一个节点不是最后一个节点。我们定义一些临时节点,它们看起来像指向最后一个节点的头节点。现在,我们将使所有左边的节点一个接一个地指向它们前面的节点。

除了头节点所指向的节点(第一个节点),所有节点都应该指向它们的前任节点,使它们成为新的继任者。第一个节点将指向NULL。

我们将使头节点指向新的第一个节点通过利用临时节点。

现在链表反转了。要看链表在C编程语言中的实现,请 点击这里.

3.Tips

数据中台

  • 数据中台构建于数据湖之上,具备数据湖异构数据统一计算、存储的能力,同时让数据湖中杂乱的数据通过规范化的方式管理起来。
  • 数据中台需要依赖大数据平台,大数据平台完成了数据研发的全流程覆盖,数据中台增加了数据治理和数据服务化的内容。
  • 数据中台借鉴了传统数据仓库面向主题域的数据组织模式,基于维度建模的理论,构建统一的数据公共层
    总的来说,数据中台吸收了传统数据仓库、数据湖、大数据平台的优势,同时又解决了数据共享的难题,通过数据应用,实现数据价值的落地。

4.Share

本周分享做事优先级模型


感想:
如果感觉有很多事情要做,并且忙不过来,我觉得这是一个需要重视的问题,可以使用做事优先级模型来规划自己的任务。这是一个比较好的模型。
在做任务规划时,我们通常会排优先级,为你的任务的优先级打上“重要-不重要/紧急-不紧急”标签。慢慢减少紧急的任务。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。