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

怎样做论坛网站适合文章的wordpress

怎样做论坛网站,适合文章的wordpress,眼科医院网站做竞价带来的询盘量,网站自己制作题目说明 给定一个包含 n 个整数的数组 nums#xff0c;判断 nums 中是否存在三个元素 a#xff0c;b#xff0c;c #xff0c;使得 a b c 0 #xff1f;找出所有满足条件且不重复的三元组。 注意#xff1a;答案中不可以包含重复的三元组。 给定数组 nums [-1, 0,…题目说明 给定一个包含 n 个整数的数组 nums判断 nums 中是否存在三个元素 abc 使得 a b c 0 找出所有满足条件且不重复的三元组。 注意答案中不可以包含重复的三元组。 给定数组 nums [-1, 0, 1, 2, -1, -4] 满足要求的三元组集合为 [ [-1, 0, 1], [-1, -1, 2] ] 题目分析 这个问题比起两数之和来显然要复杂了一些而且由于结果可能有多种情况还要考虑去重整体难度提升了不少。 最后的返回就不再是一个简单的数组了而是“数组的数组”每一组解都是一个数组最终有多组解都要返回。 解题方法 方法一暴力法 最简单的办法当然还是暴力法。基本思路是每个人都先去找到另一个人然后再一起逐个去找第三个人。 很容易想到实现起来就是三重循环这个时间复杂度是 O(n^3)。 下面展示一些 内联代码片。 public ListListInteger threeSum(int[] nums) {int n nums.length;ListListInteger resultList new ArrayList(); // 三重循环遍历所有的三数组合for( int i 0; i n - 2; i ){for( int j i 1; j n - 1; j ){for( int k j 1; k n; k ){if( nums[i] nums[j] nums[k] 0 ){resultList.add(Arrays.asList(nums[i], nums[j], nums[k]));}}}}return resultList;}运行一下我们会发现这个结果其实是不正确的没有去重同样的三元组在结果中无法排除。比如-101会出现两次。而且时间复杂度非常高是N^3。 所以接下来我们就要做一些改进试图降低时间复杂度而且解决去重问题。 暴力法的改进结果去重 要做去重自然首先想到的就是把结果保存到一张hash表里。仿照两数之和直接存到HashMap里查找代码如下 public ListListInteger threeSum(int[] nums) {int n nums.length;ListListInteger result new ArrayList();MapInteger, ListInteger hashMap new HashMap();// 遍历数组寻找每个元素的thatNumfor( int i 0; i n; i ){int thatNum 0 - nums[i];if( hashMap.containsKey(thatNum) ){ListInteger tempList new ArrayList(hashMap.get(thatNum));tempList.add(nums[i]);result.add(tempList);continue;}for( int j 0; j i; j ){int newKey nums[i] nums[j];if( ! hashMap.containsKey(newKey) ){ListInteger tempList new ArrayList();tempList.add(nums[j]);tempList.add(nums[i]);hashMap.put( newKey, tempList );}}}return result;} 方法二 双指针法 思路解析 暴力法搜索时间复杂度为O(N^3)要进行优化可通过双指针动态消去无效解来提高效率。 双指针的思路又分为左右指针和快慢指针两种。 我们这里用的是左右指针。左右指针其实借鉴的就是分治的思想简单来说就是在数组头尾各放置一个指针先让头部的指针左指针右移移不动的时候再让尾部的指针右指针左移最终两个指针相遇那么搜索就结束了。 1双指针法铺垫 先将给定 nums 排序复杂度为 O(NlogN)。 首先我们可以想到数字求和其实跟每个数的大小是有关系的如果能先将数组排序那后面肯定会容易很多。 之前我们搜索数组时间复杂度至少都为O(N^2)而如果用快排或者归并排序的复杂度是 O(NlogN)最多也是O(N^2)。所以增加一步排序不会导致整体时间复杂度上升。 public ListListInteger threeSum(int[] nums){int n nums.length;ListListInteger result new ArrayList();// 先对数组进行排序Arrays.sort(nums);for( int i 0; i n; i ){if( nums[i] 0 )break;if( i 0 nums[i] nums[i-1] )continue;// 定义左右指针索引位置int lp i 1;int rp n - 1;// 只要左右不重叠就继续移动指针while( lp rp ){int sum nums[i] nums[lp] nums[rp];if( sum 0 ){result.add(Arrays.asList(nums[i], nums[lp], nums[rp]));lp ;rp --;while( lp rp nums[lp] nums[lp - 1] )lp ;while( lp rp nums[rp] nums[rp 1] )rp --;}else if( sum 0 )lp ;elserp --;}}return result;}复杂度分析 时间复杂度 O(N^2)其中固定指针k循环复杂度 O(N)双指针 ij 复杂度 O(N)。比暴力法的O(n^3)显然有了很大的改善。 空间复杂度 O(1)指针使用常数大小的额外空间。 尽管时间复杂度依然为O(n^2)但是过程中避免了复杂的数据结构空间复杂度仅为常数级O(1)可以说双指针法是一种很巧妙、很优雅的算法设计。
http://www.sczhlp.com/news/158843/

相关文章:

  • html 网站首页怎么做淘宝客个人网站
  • 一些网站是用什么颜色做的最重要的网站
  • 餐饮加盟什么网站建设苏州小程序
  • 黑龙江网站建设logo免费自动生成器app
  • 重庆网站建设开发公司西安网站建设怎样
  • 门户网站 开发注意响应式网站模板免费下载
  • 免费的个人空间建网站接手一个新的网站应该怎样做
  • 石家庄知名网站wordpress忘记账户
  • 广东民航机场建设有限公司网站邹城网站建设v556
  • 苏州网站开发建设公司莱州做网站
  • 网络营销如何进行网站推广dw软件下载安装教程
  • 站长统计 站长统计公司如何注册企业邮箱
  • 有没有专门做字体排版设的网站织梦手机网站有广告
  • 网站建设论文余杭区高端网站建设
  • 谷歌 网站做推广微信网页版下载 官方
  • 300个吉祥公司取名大全宁波seo深度优化平台有哪些
  • 株洲专业网站建设寻甸马铃薯建设网站
  • 雨人网站建设网站运营方式
  • 苏州的网站建设国内国外重大新闻
  • 做网站用什么编程语言电商都有哪些平台
  • 【Go语言小工具】Mikrotik批量替换程序
  • 网站规划建设书如东网站开发
  • 商城网站服务器租用搭建外文网站
  • 职高网站建设例题营销型网站建立
  • 企业网站建立流程的第一步是什么网站建设分配人员方案
  • 涿鹿镇做网站网站建设需要注意哪些问题
  • 网站建设 中企动力阀门做公司网站哪个好
  • 专题网站创意设计与实现微信插件大全下载
  • 做视频网站视频存放问题做网站要会哪些软件
  • 网站问题图片济南建设网中标公告