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

网站不能粘贴怎么做自助建站平台源码

网站不能粘贴怎么做,自助建站平台源码,怎样做游戏网站,程序开发外包1.题目描述 首先我们分析下这道题目:假设给我们一个数组,让数组某三个不同下标的数相加最终得0,那么我就返回这三个数.但是如果返回的多个数组中的元素相同,那么我们还要删掉其中一个保留一个. 注意:这道题的重点是三个数的下标不能相等并且返回的数组中的元素也不能相等,通过…

1.题目描述

首先我们分析下这道题目:假设给我们一个数组,让数组某三个不同下标的数相加最终得0,那么我就返回这三个数.但是如果返回的多个数组中的元素相同,那么我们还要删掉其中一个保留一个.

注意:这道题的重点是三个数的下标不能相等并且返回的数组中的元素也不能相等,通过示例1我们就能看出由于有两个[0,-1,1],我们返回其中一个就可以了

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

2.算法分析

上面我们已经对题目进行了分析,首先我们对数组进行一个排序.那么我们的思路就是先固定一个数"i",利用双指针算法找到两个数相加等于 "-i"(定义为target),那么我们就将下标为i,left,right代表的值返回.

这里有一个很重要的思路就是当我们排序之后,如果nums[left]+nums[right]<target,就证明nums[left]太小了,我们就要让left++,让他nums[left]的值变大,看看是否加上nums[right]==target,如果nums[left]+nums[right]>arget,就证明nums[right]太大了,让right--;这是我们这个双指针解决这道题算法的一个核心思路.

---------------------------------------------------------------------------------------------------------------------------------

小细节:

1.那么我们如何达到去重呢?

其实很简单,如果下标left的值等于left-1的值,那么我们就让left++,right的值等于right+1的值,right--.

这里我们要做两层去重,

第一层去重:我们要先判断left下标的值和left-1的值是否相等,相等left++,判断right和right+1的值是否相等,相等right--.

第二层去重:我们固定的数  i  也可能会重复,那么"-i"(target),也会导致和上一次相同.可能导致两次遍历的结果一样.所以我们对 i 也要进行去重

 2.越界问题

当然,如果数组全是0,那么可能会造成越界问题.

---------------------------------------------------------------------------------------------------------------------------------

执行完一次循环就让我们的i++,如果i也相同,就跳过,继续往后边走.

小优化: 

当 i 大于0的时候我们就可以结束循环,因为我们已经对数组进行了排序,如果i大于0,那么left下标的值+right的值会比 i 还大,而且永远不会相等.因为只有i等于负数的时候三个数相加才有可能等于0

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

3.代码实现

class Solution {public List<List<Integer>> threeSum(int[] nums) {//创建一个集合用于返回三个数组成的数组List<List<Integer>> ret=new ArrayList<>();//对数组nums进行排序Arrays.sort(nums);int n=nums.length;//for循环固定 i for(int i=0;i<n;){//如果i大于0直接返回if(nums[i]>0) break;//left和right要在i后面的区间进行扫描int left=i+1;int right=n-1;int target=-nums[i];while(left<right){if(nums[left]+nums[right]<target) {left++;}else if(nums[left]+nums[right]>target){right--;} else{//返回这三个数ret.add(new ArrayList<Integer>(Arrays.asList(nums[i],nums[left],nums[right])));//可能还会有,还要继续扫描left++;right--;//去重(注意越界)while(left<right&&nums[left]==nums[left-1]) left++;while(left<right&&nums[right]==nums[right+1]) right--;}}//i也要去重,并且也要防止越界i++;while(i<n&&nums[i]==nums[i-1]) i++;}return ret;}}

 

http://www.dtcms.com/wzjs/306972.html

相关文章:

  • 无锡网站商城建设武安百度seo
  • 双语网站怎么做seo优化服务是什么意思
  • 阳谷网站建设费用南宁百度推广代理公司
  • 教育培训网站建设网站百度权重
  • 寻找建设网站客户产品推广文章
  • 宁波网站制作公司推荐网站注册搜索引擎的目的是
  • 中国最大网站排名北京百度推广投诉电话
  • 宁波网站设计服务收费价格石家庄全网seo
  • 用花生棒做网站快吗百度云盘资源共享链接群组链接
  • 网站建设的硬件支持数据分析师培训需要多少钱
  • 网站建站流程有哪些网络推广优化是干啥的
  • 达县网站制作广告优化师的工作内容
  • 做的不错的网站秦皇岛网站seo
  • 帮别人做彩票网站seo网址
  • 做羊毛毡的网站google站长工具
  • 微网站模板 餐饮海外社交媒体营销
  • 网站如何防盗链泉州seo培训
  • 为什么做网站比app便宜国际新闻最新消息今天 新闻
  • 手机电子商务网站建设策划书中文网站排行榜
  • 建设地方美食网站的目的seo的中文名是什么
  • 佛山关键词优化百度seo快速排名优化软件
  • 即墨做网站自己搭建网站
  • 企业做的网站推广费用如何记账自动收录
  • 最早做网站的那批人百度投放平台
  • 如何加强旅游电子商务网站的建设seo难不难
  • 站长统计 wordpress百度应用商店app下载安装
  • 企业定制网站价格表优化网站收费标准
  • 商派商城网站建设二次开发营销软文范文200字
  • 流量很大的网站贵阳百度seo点击软件
  • 河南中州路桥建设有限公司网站赣州是哪个省