001-ksum 求符合条件的 k 个数 1. Two Sum/15. 3Sum/18. 4Sum/
推荐阅读
000-从零开始的数据结构与算法
001-01-ksum 求符合条件的 k 个数 1. Two Sum/15. 3Sum/18. 4Sum/
002-两数相加 add two numbers
003-无重复字符的最长子串 Longest Substring Without Repeating Characters
004-寻找两个正序数组的中位数
005-最长回文子串 Longest Palindromic Substring
006-N 字形变换 zigzag conversion
007-整数反转 reverse integer 整数的位运算汇总
008-Regular Expression Matching 正则表达式匹配 + 42.Wildcard Matching 通配符匹配
009-盛最多水的容器 Container With Most Water 双指针法 + 42. 接雨水 Trapping Rain Water + 407. Trapping Rain Water II
010-删除链表的倒数第 N 个结点 Remove Nth Node From End of List 双指针
011-21.合并多个有序的链表 merge k sorted lists
012-括号生成 generate-parentheses + 20. 有效的括号 valid parentheses + 32. 最长有效括号 Longest Valid Parentheses
013-K 个一组翻转链表 Reverse Nodes in k-Group + 24. 两两交换链表中的节点 swap nodes in pairs
014-两数相除 divide two integers
015-串联所有单词的子串 Substring with Concatenation of All Words
016-31.下一个排列 next permutation + 46. 全排列 permutations + 47. 全排列 II permutations-ii + 60. 排列序列 permutation sequence
017-33. 搜索旋转排序数组 Search in Rotated Sorted Array + 81. Search in Rotated Sorted Array II + 153. Find Minimum in Rotated Sorted Array 寻找旋转排序数组中的最小值 + 154.Find Minimum in Rotated Sorted Array II
018-34. 在排序数组中查找元素的第一个和最后一个位置 Find First and Last Position of Element in Sorted Array
019-36. 有效的数独 Valid Sudoku + 37. 解数独 sudoku solver
020-39. 组合总和 Combination Sum + 40. 组合总和 II Combination Sum II + 77. 组合 combinations + 216. Combination Sum III + 377. 组合总和 Ⅳ

1. Two Sum 两数之和
题目
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
思路
最简单粗暴的一个双层循环:
(1)遍历第一层数组 nums[i]
(2)遍历第二层数组 nums[j],如果 nums[i] + nums[j] == t,符合。
基础解法
java 实现:
public int[] twoSumBasic(int[] nums, int target) {for(int i = 0; i < nums.length; i++) {for(int j = 0; j < nums.length; j++) {// 每个元素只使用一次if(i == j) {continue;}if(nums[i] + nums[j] == target) {return new int[]{i, j};}}}// 实际每个都有答案,不应该都到这里。return null;
}
性能分析:
可谓惨不忍睹,为什么呢?
是否有比较好的优化思路?
Runtime: 167 ms, faster than 5.01% of Java online submissions for Two Sum.
Memory Usage: 41.3 MB, less than 10.92% of Java online submissions for Two Sum.
优化解法
优化思路:
借助 HashMap 数据结构,将原本 O(n) 的遍历,降低为 O(1) 的查询。
java 实现如下:
实现时注意 HashMap 的扩容问题,此处直接指定为和数组一样大。
public int[] twoSum(int[] nums, int target) {int[] result = new int[2];final int length = nums.length;Map<Integer, Integer> map = new HashMap<>(length);for(int i = 0; i < length; i++) {int num = nums[i];int targetKey = target - num;if (map.containsKey(targetKey)) {result[1] = i;result[0] = map.get(targetKey);return result;}map.put(num, i);}return result;
}
效果:
Runtime: 1 ms, faster than 99.93% of Java online submissions for Two Sum.
Memory Usage: 39.5 MB, less than 69.35% of Java online submissions for Two Sum.
15. 3Sum 三数之和
结束了第一道开胃菜之后,我们来看看第二道菜。
题目
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例:
给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:
[[-1, 0, 1],[-1, -1, 2]
]
粗暴解法
最简单的思路,我们直接来一个三层循环:
public List<List<Integer>> threeSum(int[] nums) {if(nums.length < 3) {return Collections.emptyList();}List<List<Integer>> results = new ArrayList<>();Set<String> stringSet = new HashSet<>();for(int i = 0; i < nums.length-2; i+=3) {for(int j = i+1; j < nums.length-1; j++) {for(int k = j+1; k < nums.length; k++) {if((nums[i] + nums[j]+nums[k]) == 0) {List<Integer> list = Arrays.asList(nums[i], nums[j], nums[k]);// 排序保证结果不重复Collections.sort(list);String string = list.toString();if(stringSet.contains(string)) {continue;}stringSet.add(string);results.add(list);}}}}return results;
}
- 执行结果
很不幸,这个是不通过的。会执行超时,因为执行的比较慢。
优化解法
优化思路:
(1)对原始数组进行排序,保证可以使用双指针法
(2)固定 1 个元素。剩余的两个元素采用双指针的方式。初始化时,一个在最左边,一个在最右边。然后不断调整位置,直到符合条件为止。
(3)不可以包含重复的三元组,要同时跳过重复的信息。
java 实现:
public List<List<Integer>> threeSum(int[] nums) {//1. 排序Arrays.sort(nums);List<List<Integer>> results = new ArrayList<>(nums.length);//2. 双指针for(int i = 0; i < nums.length; i++) {int num = nums[i];if(num > 0) {return results;}if(i > 0 && nums[i] == nums[i-1]) {continue;}int l = i+1;int r = nums.length-1;while (l < r) {int sum = num + nums[l] + nums[r];if(sum < 0) {l++;} else if(sum > 0) {r--;} else {List<Integer> integers = new ArrayList<>(3);integers.add(num);integers.add(nums[l]);integers.add(nums[r]);results.add(integers);// 跳过重复的元素while(l < r && nums[l+1] == nums[l]) {l++;}while (l < r && nums[r-1] == nums[r]) {r--;}l++;r--;}}}return results;
}
性能:
速度超过 99.87 的用户提交,还不错。
16. 最接近的三数之和
给你一个长度为 n 的整数数组 nums 和 一个目标值 target。
请你从 nums 中选出三个整数,使它们的和与 target 最接近。
返回这三个数的和。
假定每组输入只存在恰好一个解。
示例 1:
输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。
示例 2:
输入:nums = [0,0,0], target = 1
输出:0
提示:
3 <= nums.length <= 1000
-1000 <= nums[i] <= 1000
-10^4 <= target <= 10^4
V1-双指针法
思路
针对多个数之和,对无序的数组进行一次排序,可以大大降低后续的时间复杂度。
我们通过两个指针,l r 分别计算每一次的差值,找到最小的差异。
当然,等于肯定最小,直接返回即可。
java 实现
/*** 思路:** 能否继续借助排序+双指针?** 1. 如果相等,则直接返回* 2. 否则需要保存最接近的一个值。** 3. 如果差异越来越大,则直接停止。** 使用 abs** @param nums 数字* @param target 目标值* @return 结果* @since v1*/public int threeSumClosest(int[] nums, int target) {// 最小if(nums.length == 3) {return nums[0]+nums[1]+nums[2];}//1. 排序Arrays.sort(nums);//2. 双指针int diff = Integer.MAX_VALUE;for(int i = 0; i < nums.length; i++) {int l = i+1;int r = nums.length-1;// 去重 i,l,rwhile (l < r) {// 此处可以直接返回int sum = nums[i] + nums[l] + nums[r];int loopDiff = sum-target;if(sum == target) {return target;} else if(loopDiff < 0) {// 偏小l++;if(Math.abs(loopDiff) < Math.abs(diff)) {diff = loopDiff;}} else {// 偏大r--;if(Math.abs(loopDiff) < Math.abs(diff)) {diff = loopDiff;}}}}return target+diff;}
效果
Runtime: 5 ms, faster than 99.27% of Java online submissions for Container With Most Water.
Memory Usage: 39 MB, less than 100% of Java online submissions for Container With Most Water.
效果还是非常不错的。
V2-优化
思路
针对上面的算法进行优化。
能否继续借助排序+双指针?
-
最大值如果依然小于原有差异,跳过
-
最小值如果依然大于原有差异,跳过。
直接先把可能有结果的大概范围找到,然后再进一步细化,快速定位结果。
java 实现
public int threeSumClosest(int[] nums, int target) {// 最小int result = nums[0] + nums[1] + nums[2];//1. 排序Arrays.sort(nums);//2. 双指针for(int i = 0; i < nums.length-2; i++) {int l = i+1;int r = nums.length-1;if (nums[i] + nums[i+1] + nums[i+2] - target >= Math.abs(target - result)) {break; //Too big, can't get better result!}if (i < nums.length-3 && nums[i+1] + nums[nums.length-2] + nums[nums.length-1] < target) {continue; //Too small, skip}while (l < r) {// 此处可以直接返回int sum = nums[i] + nums[l] + nums[r];// 如果差异较小if(Math.abs(sum-target) < Math.abs(result-target)) {result = sum;} else if(sum < target) {// 偏小l++;} else if(sum > target) {r--;} else {return sum;}}}return result;}
效果
Runtime: 1 ms, faster than 100.00% of Java online submissions for 3Sum Closest.
Memory Usage: 38.9 MB, less than 85.21% of Java online submissions for 3Sum Closest.
18. 4Sum 四数之和
常言道,有二有三必须有四。
这道题当然还有四个数之和的版本。
题目
给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。
注意:
答案中不可以包含重复的四元组。
示例:
给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为:
[[-1, 0, 0, 1],[-2, -1, 1, 2],[-2, 0, 0, 2]
]
解法
解题思路类似上述的 3 个数之和,区别是这次我们固定左边 2 个元素。
java 实现如下:
public List<List<Integer>> fourSum(int[] nums, int target) {// 大小可以优化List<List<Integer>> resultList = new ArrayList<>(nums.length);//1. 排序Arrays.sort(nums);//2. 类似双指针,固定左边2个元素。for(int i = 0; i < nums.length -3; i++) {// 跳过 i 的重复元素if(i > 0 && nums[i] == nums[i-1]) {continue;}for(int j = i+1; j < nums.length-2; j++) {// 确保跳过 j 的重复元素if(j > i+1 && nums[j] == nums[j-1]) {continue;}// 双指针法则int l = j+1;int r = nums.length-1;while (l < r) {int sum = nums[i]+nums[j]+nums[l]+nums[r];// 遍历完所有符合的信息if(sum < target) {l++;} else if(sum > target) {r--;} else {List<Integer> result = Arrays.asList(nums[i], nums[j], nums[l], nums[r]);resultList.add(result);// 跳过重复的元素while (l < r && nums[l] == nums[l+1]) {l++;}while(l < r && nums[r] == nums[r-1]) {r--;}l++;r--;}}}}return resultList;
}
经过 3sum 之后,你对自己的实现信心十足。
效果对比打败了 49.10% 的用户。WTF!
其实答案也很简单,因为大家和你一样已经学会了这种解法。
那么,我们还能优化吗?
优化方法
思路:
主要是可以快速返回的一些优化
(1)对于长度小于 4 的数组,直接返回
(2)如果在当前循环中 max 小于 target,或者 min 大于 target 其实也可以快速跳过。
java 实现:
public List<List<Integer>> fourSum(int[] nums, int target) {//1.1 快速返回if(nums.length < 4) {return Collections.emptyList();}// 大小可以优化List<List<Integer>> resultList = new ArrayList<>(nums.length);//2. 排序Arrays.sort(nums);//1.2 范围判断final int length = nums.length;int min = nums[0] + nums[1] + nums[2] + nums[3];int max = nums[length-1] + nums[length-2] + nums[length-3] + nums[length-4];if(min > target || max < target) {return resultList;}//3. 类似双指针,固定左边2个元素。for(int i = 0; i < length -3; i++) {// 跳过 i 的重复元素if(i > 0 && nums[i] == nums[i-1]) {continue;}for(int j = i+1; j < length-2; j++) {// 确保跳过 j 的重复元素if(j > i+1 && nums[j] == nums[j-1]) {continue;}// 双指针法则int l = j+1;int r = length-1;// 快速跳过int minInner = nums[i] + nums[j] + nums[j+1] + nums[j+2];int maxInner = nums[i] + nums[j] + nums[r-1] + nums[r];if(minInner > target || maxInner < target) {continue;}while (l < r) {int sum = nums[i]+nums[j]+nums[l]+nums[r];// 遍历完所有符合的信息if(sum < target) {l++;} else if(sum > target) {r--;} else {List<Integer> result = Arrays.asList(nums[i], nums[j], nums[l], nums[r]);resultList.add(result);// 跳过重复的元素while (l < r && nums[l] == nums[l+1]) {l++;}while(l < r && nums[r] == nums[r-1]) {r--;}l++;r--;}}}}return resultList;
}
效果:
超过了 92.32% 的提交,勉强过关。
Runtime: 5 ms, faster than 92.21% of Java online submissions for 4Sum.
Memory Usage: 39.9 MB, less than 56.17% of Java online submissions for 4Sum.
ksum
题目
经过了上面的 2sum/3sum/4sum 的洗礼,我们现在将这道题做下推广。
如何求 ksum?
思路
其实所有的这种解法都可以转换为如下的两个问题:
(1)sum 问题
(2)将 k sum 问题转换为 k-1 sum 问题
示例代码
/*** 对 k 个数进行求和* @param nums 数组* @param target 目标值* @param k k* @param index 下标* @return 结果类表* @since v1*/
public List<List<Integer>> kSum(int[] nums, int target, int k, int index) {int len = nums.length;List<List<Integer>> resultList = new ArrayList<>();if (index >= len) {return resultList;}if (k == 2) {int i = index, j = len - 1;while (i < j) {//find a pairif (target - nums[i] == nums[j]) {List<Integer> temp = new ArrayList<>();temp.add(nums[i]);temp.add(target - nums[i]);resultList.add(temp);//skip duplicationwhile (i < j && nums[i] == nums[i + 1]) {i++;}while (i < j && nums[j - 1] == nums[j]) {j--;}i++;j--;//move left bound} else if (target - nums[i] > nums[j]) {i++;//move right bound} else {j--;}}} else {for (int i = index; i < len - k + 1; i++) {//use current number to reduce ksum into k-1 sumList<List<Integer>> temp = kSum(nums, target - nums[i], k - 1, i + 1);if (temp != null) {//add previous resultsfor (List<Integer> t : temp) {t.add(0, nums[i]);}resultList.addAll(temp);}while (i < len - 1 && nums[i] == nums[i + 1]) {//skip duplicated numbersi++;}}}return resultList;
}
开源地址
为了便于大家学习,所有实现均已开源。欢迎 fork + star~
https://github.com/houbb/leetcode
参考资料
https://leetcode-cn.com/problems/two-sum
https://leetcode.com/problems/two-sum/discuss/3/Accepted-Java-O(n)-Solution
https://leetcode-cn.com/problems/3sum
https://leetcode-cn.com/problems/4sum
https://leetcode.com/problems/4sum/discuss/8609/My-solution-generalized-for-kSums-in-JAVA
相关文章:
001-ksum 求符合条件的 k 个数 1. Two Sum/15. 3Sum/18. 4Sum/
推荐阅读 000-从零开始的数据结构与算法 001-01-ksum 求符合条件的 k 个数 1. Two Sum/15. 3Sum/18. 4Sum/ 002-两数相加 add two numbers 003-无重复字符的最长子串 Longest Substring Without Repeating Characters 004-寻找两个正序数组的中位数 005-最长回文子串 Lon…...
Nginx学习笔记(三)Linux环境下Nginx的安装和部署
目录一、官网下载二、配置基本信息1.上传 Linux2.解压3.安装编译环境4.配置基本信息4.1 配置失败原因(1):没有安装C编译环境4.2 配置失败原因(2):没有安装 PCRE 依赖4.3 配置失败原因(3):没有安装 zlib 依赖5.查看文件列表三、编译安装四、配…...
【十二天学java】day05--数组和循环高级
**# 1.数组 概念: 指的是一种容器,可以同来存储同种数据类型的多个值。 但是数组容器在存储数据的时候,需要结合隐式转换考虑。 比如: 定义了一个int类型的数组。那么boolean。double类型的数据是不能存到这个数组中的&#…...
用队列实现栈和用栈实现队列(C 语言)
目录 一、用队列实现栈 二、 用栈实现队列 一、用队列实现栈 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 实现 MyStack 类: void push(int…...
albedo开源框架配置多数据源
前言:公司框架项目一直都没认真阅读过,最近项目需要连接oracle数据,所以尝试使用框架连接多数据库。添加多数据源插件:我们在项目的插件模块内添加多数据源插件:albedo-dynamic-datasource<?xml version"1.0&…...
22张图带你了解IP地址有什么作用
了解IP地址 1、IP地址的格式 在IP协议的报文中,可以得知IP地址是有32个比特,IP地址在计算机中是以二进制的方式处理的,如果全部以二进制的形式来表示,使用跟表达都非常的困难,所以为了人类方便记忆,采用了…...
121.Android 简单的人工智能聊天项目,chatAi,AI聊天项目,GPTAi
//首页xml布局代码: <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"mat…...
C++ this指针详解
this 是 C 中的一个关键字,也是一个 const 指针,它指向当前对象,通过它可以访问当前对象的所有成员。所谓当前对象,是指正在使用的对象。例如对于stu.show();,stu 就是当前对象,this 就指向 stu。下面是使用…...
CSS 实现六边形柱状图
前言 👏CSS 实现六边形柱状图 速速来Get吧~ 🥇文末分享源代码。记得点赞关注收藏! 1.实现效果 2.实现步骤 定义全局css变量,柱状宽度为–w,最大高度为–h,柱形整体为渐变色,定义上部分颜色为…...
什么是推挽输出,开漏输出?
这篇文章是看B站“工科男孙老师”这个视频的笔记推挽 开漏 高阻 这都是谁想出来的词?? 我觉得讲的很好,做一下笔记 1.什么是IO输出三态 一共有:高电平, 低电平,浮空/高阻态 三种IO态 2.推挽输出 推挽输出能够表示高、…...
【图像分割】Unet系列深度讲解(FCN、UNET、UNET++)
【图像分割】Unet 深度讲解 文章目录【图像分割】Unet 深度讲解1. 介绍1.1 背景介绍:1.2 医学图像特点1.3 图像分割是什么2. Unet发展历程(FCN、Unet、Unet)2.1 全卷积网络-FCN2.1.1 FCN介绍:2.1.2 FCN框架2.1.3 反卷积层2.1.4 输…...
list底层的简单实现(万字长文详解!)
list底层的简单实现 文章目录list底层的简单实现list_node的实现!list_node的构造函数list的迭代器!——重点!list迭代器的成员变量迭代器的构造函数* 重载前置 重载后置 重载前置-- 重载后置-- 重载! 重载 重载-- 重载list的const迭代器——…...
学习Linux只要学会这个命令就够了!
大家好,我是良许。 这段时间又是搬家,又是找新办公室,现在终于安顿下来了,有时间给大家分享干货了。 今天给大家介绍一个 Linux 超级实用命令,有了这个命令,你就可以愉快使用 Linux 上几乎所有常用命令了…...
javascript基础
javascript基础 1概述: JavaScript是目前web开发中不可缺少的脚本语言,js不需要编译即可运行,运行在客户端,需要通过浏览器来解析执行JavaScript代码。 诞生于1995年,当时的主要目的是验证表单的数据是否合法。 JavaS…...
【游戏逆向】某游戏技能库分析
技能库的分析大多是从技能名字入手的,然后再通过传入职业或者ID等信息去到库中去取当前角色的可用技能。下面我们来对《**明月刀》中的技能库进行分析。 首先通过CE对技能名字进行搜索,得到较少的结果,分别对结果进行修改,并再次…...
Pytorch深度学习常用预训练网络模型的下载地址
Resnet:model_urls {‘resnet18’: ‘https://download.pytorch.org/models/resnet18-5c106cde.pth‘,‘resnet34’: ‘https://download.pytorch.org/models/resnet34-333f7ec4.pth‘,‘resnet50’: ‘https://download.pytorch.org/models/resnet50-19c8e357.pth‘,‘resnet…...
毕业设计 基于51单片机自动智能浇花系统设计
基于51单片机自动智能浇花系统设计1、毕业设计选题原则说明(重点)2、项目资料2.1 系统框架2.2 系统功能3、部分电路设计3.1 STC89C52单片机最小系统电路设计3.2 按键电路设计3.3 水泵控制电路设计4、部分代码展示4.1 数码管位选程序4.2 ad0832数据读取程…...
熟悉常用的 Linux 操作和 Hadoop 操作
文章目录前言一、常用命令集合1、cd命令:切换目录1、切换到目录/usr/local2、切换回上级目录3、切换到当前登录Linux系统的用户的自己的文件夹2、ls命令:查看文件与目录3、mkdir命令:创建目录4、rmdir命令:删除空的目录5、cp 命令…...
Vue2项目总结-电商后台管理系统
Vue2项目总结-电商后台管理系统 去年做的项目,拖了很久,总算是打起精力去做这个项目的总结,并对Vue2的相关知识进行回顾与复习 各个功能模块如果有过多重复冗杂的部分,将会抽取部分值得记录复习的地方进行记录 一:项目…...
【二】一起算法---队列:STL queue、手写循环队列、双端队列和单调队列、优先队列
纸上得来终觉浅,绝知此事要躬行。大家好!我是霜淮子,欢迎订阅我的专栏《算法系列》。 学习经典算法和经典代码,建立算法思维;大量编码让代码成为我们大脑的一部分。 ⭐️已更系列 1、基础数据结构 1.1、链表➡传送门 1…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...
关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
