ARTS第三周20200606

Algorithm

三数之和

给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。

说明:

答案中不可以包含重复的三元组。

示例1

给定数组 nums = [-1, 0, 1, 2, -1, -4],

满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]

代码实现

解题思路:排序+双指针

public List> threeSum(int[] nums) {
     List> result = new ArrayList<>();
        int len = nums.length;
        if (nums == null || len < 3) {
            return result;
        } ;
        //排序
        Arrays.sort(nums);
        for (int i = 0; i < len; i++) {
            if (nums[i] > 0) {
                return result;
            }
            if (i > 0 && nums[i] == nums[i - 1]) {
                continue;
            }
            int cur = nums[i];
            int L = i + 1;
            int R = len - 1;
            while (L < R) {
                int sum = cur + nums[R] + nums[L];
                if (sum == 0) {
                    List temp = new LinkedList<>();
                    temp.add(cur);
                    temp.add(nums[R]);
                    temp.add(nums[L]);
                    result.add(temp);
                    while (L < R && nums[L + 1] == nums[L]) {
                        L++;
                    }
                    while (L < R && nums[R - 1] == nums[R]) {
                        R--;
                    }
                    L++;
                    R--;
                } else if (sum < 0) {
                    L++;
                } else {
                    R--;
                }
            }
        }
        return result;
}

Review mongodb

mongodb是文档型分布式数据库。
1、丰富的json文档类型
2、强大的查询语言
3、关系型数据库的所有功

Tip

mysql的InnoDB聚集索引:索引中键值的逻辑顺序决定了表中相应行的物理顺序(如字典中的拼音检索)。聚集索引一般是表中的主键索引,如果表中没有显示指定主键,则会选择表中的第一个不允许为NULL的唯一索引,如果还是没有的话,就采用Innodb存储引擎为每行数据内置的6字节ROWID作为聚集索引。叶子结点的data存储的是完成数据本身。
mysql的InnoDB非聚集索引:索引的逻辑顺序与磁盘上的物理存储顺序不同(如字典中的部首查询)。非聚集索引叶子结点data关联的是聚集索引的id,如果查询超出索引的其他字段,需要拿到对应id通过聚集索引查询数据,相当于多了一次聚集索引检索的操作

Share

缓存更新的套路

你可能感兴趣的:(ARTS第三周20200606)