当前位置:网站首页>存在重复元素III[利用排序后的有序性进行剪枝]
存在重复元素III[利用排序后的有序性进行剪枝]
2022-06-25 18:00:00 【REN_林森】
利用排序后的有序性剪枝
前言
当时间复杂度在O(NlongN || N2)时,没有特别要求的情况下,排个序对时间复杂度是毫无影响的,甚至还能拿排完序后的有序性来剪枝,降低运行时间。
不是只有DFS能剪枝,在很多操作中多存在剪枝思想。
一、存在重复元素III

二、排序+剪枝
package everyday.medium;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
// 存在重复元素III
public class ContainsNearbyAlmostDuplicate {
/* target:给定下标的限定范围,元素差值的限定范围,求是否存在这样的 数对。 */
// 暴力
public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) {
int n = nums.length;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (Math.abs((long) i - j) <= k
&& Math.abs((long) nums[i] - nums[j]) <= t)
return true;
}
}
return false;
}
}
// 非暴力,巧解:先排序,然后靠着有序来剪枝。(注:反正对于O(NlogN || N2)的时间复杂度,排个序完全每任何影响。)
class ContainsNearbyAlmostDuplicate2 {
/* target:给定下标的限定范围,元素差值的限定范围,求是否存在这样的 数对。 */
public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) {
List<int[]> arr = new ArrayList<>();
int idx = 0;
for (int num : nums) arr.add(new int[]{
idx++, num});
arr.sort(Comparator.comparingInt(o -> o[1]));
// 爆搜 + 剪枝
for (int i = 0; i < arr.size() - 1; i++) {
// 注:其实 j = i + 1也就算第一个剪枝了。
for (int j = i + 1; j < arr.size(); j++) {
int[] a = arr.get(i), b = arr.get(j);
if (Math.abs((long) a[1] - b[1]) <= t
&& Math.abs((long) a[0] - b[0]) <= k) return true;
// 类似剪枝。
if (Math.abs((long) a[1] - b[1]) > t) break;
}
}
return false;
}
}
总结
1)剪枝思想存在很多操作中,不仅仅是DFS。
2)排序什么时候大胆用?有序性是个好条件。
参考文献
边栏推荐
- 158_模型_Power BI 使用 DAX + SVG 打通制作商业图表几乎所有可能
- SDN系统方法 | 9. 接入网
- [matlab] curve fitting
- Qt使用SQLITE数据库
- 股票开户怎么办理?证券开户哪家好 办理开户安全吗
- 深度学习网路模型
- Introduction to the container of() function
- 喜报|海泰方圆通过CMMI-3资质认证,研发能力获国际认可
- Jerry's ADC_ get_ Incorrect voltage value obtained by voltage function [chapter]
- SDN system method | 9 Access network
猜你喜欢

使用DiskGenius拓展系统盘C盘的容量

【 NLP 】 in this year's English college entrance examination, CMU delivered 134 high scores with reconstruction pre training, significantly surpassing gpt3

Introduction to microservices
![Precautions for the use of Jerry's wake-up mouth [chapter]](/img/01/3bfba9a486eb7fa3c0a888bb3ea2d2.png)
Precautions for the use of Jerry's wake-up mouth [chapter]
![How Jerry used to output a clock source to the outside world [chapter]](/img/ea/161be6416726bcd80bb2823a5f6389.png)
How Jerry used to output a clock source to the outside world [chapter]

container of()函数简介

什么是算子?

篇6:CLion:Toolchains are not configured Configure Disable profile

HMS core machine learning service realizes simultaneous interpretation, supports Chinese-English translation and multiple voice broadcast

Three traversal methods of binary tree (recursive + non recursive) complete code
随机推荐
什么是泛型以及在集合中泛型的使用[通俗易懂]
SDN系统方法 | 9. 接入网
Vscode automatically generates ifndef define ENDIF of header file
JSP页面运行却显示源码
BILSTM和CRF的那些事
微服务介绍
什么是算子?
Introduction to microservices
有关均衡----简易版瓶颈模型
SQL Server real time backup library requirements
智能体白皮书 - 共建智能体,共创全场景智慧 | 云享书库NO.21推荐
RuntimeError: Trying to backward through the graph a second time (or directly access saved variable
SQL Server实时备份库要求
【工作小技巧】刚入职的软件测试工程师怎么快速上手新岗位
bert之我的小总结
C语言中%含义
Essential characteristics of convolution operation +textcnn text classification
Expressing integers by the sum of consecutive natural numbers
Are the top ten leading securities companies safe to open accounts
MySQL mysql-8.0.19-winx64 installation and Navicat connection