ARTS 第五周

Algorithm

leetcode 976. Largest Perimeter Triangle

Given an array A of positive lengths, return the largest perimeter of a triangle with non-zero area, formed from 3 of these lengths.

If it is impossible to form any triangle of non-zero area, return 0.

Example 1:
Input: [2,1,2]
Output: 5
Example 2:
Input: [1,2,1]
Output: 0
Example 3:
Input: [3,2,3,4]
Output: 10
Example 4:
Input: [3,6,2,3]
Output: 8

Note:
3 <= A.length <= 10000
1 <= A[i] <= 10^6

许久没刷题了,感觉脑子有点锈了。逻辑思维一直是我的短板,应该努力的去克服。

class Solution {
    public int largestPerimeter(int[] A) {
        if (A == null || A.length < 3) return 0;
        int len = A.length;
        Arrays.sort(A);
        for (int i = len - 1; i > 1; i--) {
            //如果A[i] >= A[i-1] + A[i-2] 那么 A[i] >= A[i-2] + A[i-3], 所以只要找到第一个由三条最大边组成的三角形,即可以确定。
            if (A[i] < A[i - 1] + A[i - 2]) {
                return A[i] + A[i - 1] + A[i - 2];
            }
        }
        return 0;
    }
}

Review

MESI的简单理解

Tip

UDP的理解

Share

内存模型是怎么解决缓存一致性问题的?

  • 由于CPU和主存速度差别较大,所以在两者中间引入了多层高速缓存(L1、L2、L3),在多核计算机中有多个CPU,会造成数据不一致。所以引入了内存模型
  • 通常有两种方案解决。
    1. 通过在总线加LOCK#锁的方式
      在早期CPU中使用。CPU和其他部件进行通信都是通过总线来进行的,对总线加LOCK#锁,使得只能有一个CPU访问变量的内存。
    2. 通过缓存一致性协议
      intel的MESI协议:当CPU写数据时,如果操作的变量是共享变量,会发出信号通知其他CPU将该变量的缓存行置为无效状态,其他CPU在访问时,就会从主存中重新读取。
      MESI协议的理解

缓存一致性:解决多个缓存副本之间的一致性问题,确保在CPU对共享变量修改之后,可以对其他CPU立即可见。指并发编程中的可见性。
内存一致性:解决多个线程之间的一致性问题,确保每个线程可以获取到正确的结果。指并发编程中的原子性、有序性、可见性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值