当前位置:网站首页>存在重复元素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 打通制作商业图表几乎所有可能
- mvdr波束 matlab,mvdr波束形成matlab[通俗易懂]
- 微信小程序报错:request:fail url not in domain list
- RuntimeError: Trying to backward through the graph a second time (or directly access saved variable
- Encryption trend: Fashion advances to the meta universe
- Wechat applet reports an error: request:fail URL not in domain list
- SDN系统方法 | 10. SDN的未来
- 篇5:VS2017搭建QT5.9.9开发环境
- C语言中%含义
- Precautions for using Jerry's timer [chapter]
猜你喜欢
![Jerry's addition of encrypted file playback function [chapter]](/img/d0/b7a0c9030c157f282405129be51efe.png)
Jerry's addition of encrypted file playback function [chapter]

The Stackies 2022:32个营销技术栈入选

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

Encryption trend: Fashion advances to the meta universe

观察者模式之通用消息发布与订阅

CentOS7 安装 Redis 7.0.2

有关均衡----简易版瓶颈模型

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

Unity technical manual - lifecycle rotation rotationoverlifetime speed rotation rotationbyspeed external forces

为什么在变频器场合需要安科瑞的电力有源滤波器?
随机推荐
中断操作:AbortController学习笔记
[matlab] data statistical analysis
The icon is missing. What does the URL come from with the jesssionid?
How to judge whether you are suitable for software testing
Essential characteristics of convolution operation +textcnn text classification
为什么在变频器场合需要安科瑞的电力有源滤波器?
MVDR beam MATLAB, MVDR beam forming matlab[easy to understand]
什么是算子?
Use diskgenius to expand the capacity of system disk C
Li Kou daily question - day 27 -561 Array splitting I
配电室环境的分布式远程管理
C语言中%含义
Jerry's addition of encrypted file playback function [chapter]
启牛涨乐财付通下载是可以开户吗?开户安全吗
有关均衡----简易版瓶颈模型
Use of jupyter
观察者模式之通用消息发布与订阅
jupyter的使用
Unity technical manual - lifecycle rotation rotationoverlifetime speed rotation rotationbyspeed external forces
Swagger implements background interface automation document