当前位置: 首页 > news >正文

写作网站签约都要上传身份证吗湛江百度网站快速排名

写作网站签约都要上传身份证吗,湛江百度网站快速排名,做网站业务员提成几个点,贵阳门户网站想要精通算法和SQL的成长之路 - 存在重复元素 前言一. 存在重复元素II二. 存在重复元素III2.1 基于红黑树增删改查 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 存在重复元素II 原题链接 思路: 我们用HashSet存储元素,做到去重的效果。同时存储…

想要精通算法和SQL的成长之路 - 存在重复元素

  • 前言
  • 一. 存在重复元素II
  • 二. 存在重复元素III
    • 2.1 基于红黑树增删改查

前言

想要精通算法和SQL的成长之路 - 系列导航

一. 存在重复元素II

原题链接
在这里插入图片描述

思路:

  1. 我们用HashSet存储元素,做到去重的效果。同时存储的元素个数,固定在k个。这个HashSet相当于是一个滑动窗口了。
  2. 那么从左往右遍历,不断地往HashSet中塞元素,一旦超过容量,剔除滑动窗口最左侧元素。set.remove(nums[i - k - 1]);
  3. 遍历过程中,一旦发现当前元素存在于HashSet中,直接返回true即可。

代码如下:

public boolean containsNearbyDuplicate(int[] nums, int k) {HashSet<Integer> set = new HashSet<>();for (int i = 0; i < nums.length; i++) {// 滑动窗口只存储k个元素,超过了,则移除if (i > k) {set.remove(nums[i - k - 1]);}if (set.contains(nums[i])) {return true;}set.add(nums[i]);}return false;
}

二. 存在重复元素III

原题链接
在这里插入图片描述
我们先来一个最简单的思路,暴力法:

  1. 针对每个元素,作为滑动窗口的左边界。往后固定indexDiff长度的区间。
  2. 我们在[left,left+indexDiff] 区间内遍历数组,计算差值。如果满足差值 < valueDiff 值,说明找到满足条件的结果,返回true

但是,这种操作,有着大量的重复计算,而且数组的无规律性,在最坏的情况下,我们得遍历整个长度为 k 的区间数组。那咋办呢?

思路如下:

  1. 我们可以维护一个有序并且长度为 k 的滑动窗口。那么对于该区间的任意一个数字num。既然要满足差值 < valueDiff 值。那么在这个有序的集合当中。哪个数字最满足条件?
  2. 第一种:小于等于 num 的最大值。第二种:和大于等于num的最小值即值num左右两侧最靠近的数值是我们想要的。
  3. 那么对于有序的数组而言,想要查找上面两个数,用哪种方式最合适?二分法。
  4. 当然,我们还需要不断地维护这个滑动窗口对应的数据结构。

2.1 基于红黑树增删改查

下面来自百度百科的相关红黑树介绍:

  • 红黑树是一种特化的AVL树(平衡二叉树),都是在进行插入和删除操作时通过若干次特定操作保持二叉查找树的平衡,从而获得较高的查找性能。
  • 而这个特定操作,对于红黑树而言,可以限制到最多三次。
  • 它虽然是复杂的,但它的最坏情况运行时间也是非常良好的,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除,这里的 n 是树中元素的数目。

针对上面的功能,红黑树都具备其查询:

  • 查询不超过num的最大值:floor函数。注意:如果找不到则返回null
  • 查询超过num的最小值:ceiling函数。注意:如果找不到则返回null

那么我们就不难写出代码:切记,对象和基本数据类型的比较,要判断null,否则会报空指针哦~

// floorNum <= num ,最大值
Long floorNum = tree.floor(num);
// ceilingNum >=num ,最小值
Long ceilingNum = tree.ceiling(num);
if (floorNum != null && num - floorNum <= valueDiff) {return true;
}
if (ceilingNum != null && ceilingNum - num <= valueDiff) {return true;
}

由于题目的元素值存在以下范围:
在这里插入图片描述
因此我们在存储的时候,要把它转成Long型。最终代码如下:

public boolean containsNearbyAlmostDuplicate(int[] nums, int indexDiff, int valueDiff) {TreeSet<Long> tree = new TreeSet<>();for (int i = 0; i < nums.length; i++) {// int 转 long,因为限制问题long num = nums[i] * 1L;// floorNum <= num ,最大值Long floorNum = tree.floor(num);// ceilingNum >=num ,最小值Long ceilingNum = tree.ceiling(num);if (floorNum != null && num - floorNum <= valueDiff) {return true;}if (ceilingNum != null && ceilingNum - num <= valueDiff) {return true;}tree.add(num);// 超过了滑动窗口大小if (i >= indexDiff) {tree.remove(nums[i - indexDiff] * 1L);}}return false;
}
http://www.hengruixuexiao.com/news/11016.html

相关文章:

  • 外贸商城网站建设网站推广方案范文
  • 做购物平台网站客户体验活动网络营销与传统营销的区别
  • 外贸soho做网站网上店铺的推广方法有哪些
  • 团队如何分工做网站网上培训课程平台
  • 网站栏目策划方案爱站站长工具
  • 潍坊网站建设优化怎么去推广自己的平台
  • 网站建设与管理怎么做seo月薪
  • 惠州网站建设翻译网页设计代码大全
  • 外包加工原因seo技术培训学校
  • 凡科网站怎么修改抚州seo排名
  • 比较好的网站设计公司济南seo外包公司
  • 仿素材网站2022年最近十大新闻
  • 钉钉app下载安装站内优化seo
  • 网站建设工具品牌有哪些惠州网站推广排名
  • 建设项目查询网站seo网站内容优化
  • 备案号如何绑定多个网站线上营销推广方案有哪些
  • WordPress博客Vieu主题破解关键词seo服务
  • 汽车网站代码百度站长工具域名查询
  • 阿里买域名 电脑做网站快速优化网站排名的方法
  • 白领兼职做网站输入关键词进行搜索
  • 开发网站赚钱柳州今日头条新闻
  • 仙桃做网站软文推广平台有哪些
  • 吉林省建设厅网站市政建设惠州大亚湾经济技术开发区
  • b2c网站主要功能流程长春网站排名提升
  • 企业网站的建设过程乌鲁木齐seo
  • 毕业设计做网站有什么好的创意网络推广的途径有哪些
  • 网站免费观看2023最近的新闻大事10条
  • 清江开发公司官网seo网站关键词优化
  • 怎么宣传网站seo推广公司价格
  • 网站如何做中英文双语言版本免费的seo