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<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> 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<Integer> 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通过聚集索引查询数据,相当于多了一次聚集索引检索的操作
网友评论