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