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

什么是电子商务网站建设的基本要求阿里云域名注册企业邮箱

什么是电子商务网站建设的基本要求,阿里云域名注册企业邮箱,简易手工小制作,怎么给公司做推广题目链接:18. 四数之和 - 力扣(LeetCode) 这道题是在三数之和上改编出来的,在写这道题之前可以尝试以下三数之和(15. 三数之和 - 力扣(LeetCode)); 1.常规解法&#xf…

题目链接:18. 四数之和 - 力扣(LeetCode)

这道题是在三数之和上改编出来的,在写这道题之前可以尝试以下三数之和(15. 三数之和 - 力扣(LeetCode));

1.常规解法(会超时)

由于这道题的结果不能出现含相同元素的三元组,则可以先对目标数组排,以防出现结果中元素相同但顺序不同的情况;

接下可以遍历这个数组,先找到所有的三元组,再挑选出符合条件的三元组,代码如下:

    public List<List<Integer>> fourSum(int[] nums, int target) {List<List<Integer>> ret = new ArrayList<>();int n = nums.length;Arrays.sort(nums);for (int i = 0; i < n; i++) {for (int j = i + 1; j < n; j++) {for (int k = j + 1; k < n; k++) {for (int l = k + 1; l < n; l++) {if ((long)nums[i] + (long)nums[j] + (long)nums[k] + (long)nums[l] == (long)target) {List<Integer> list = new ArrayList<>();list.add(nums[i]);list.add(nums[j]);list.add(nums[k]);list.add(nums[l]);if (!ret.contains(list)) {ret.add(list);}}}}}}return ret;}

注意:我们再进行判断时,涉及到四个数据相加,由于整形数据的最大值是2147483647,会出现1000000000 + 1000000000 + 1000000000  +1000000000 = -294967296的情况,这与实际情况不符,这时就需要类型转换,由于long类型的数据范围更大,就可以将int转化为long再相加比较。

2.双指针算法

和三数之和一样,我么可以先固定最后一个数,在前面的数中找到和为(target - 最后一个数);

因为有去重操作,可以先对数组从小到大排序;

先定义四个指针p1,p2,left,right,p1指向最后一个数,p2指向倒数第二个数,left指向第一个数,right指向p2前一个数;

现保持p1和p2不动,让left与right相向运动,若(long)nums[left] + (long)nums[right] + (long)nums[p1] + (long)nums[p2] == target,则将这个四元组添加到结果中,由于不能出现出重复的四元组,就需要去除与left和right指向元素相同的元素;若(long)nums[left] + (long)nums[right] + (long)nums[p1] + (long)nums[p2] < target,由单调性知,以left为基准,right左边的数均小于right指向的元素,相加之后结果必小于target,就需要将left向右移动一位;若(long)nums[left] + (long)nums[right] + (long)nums[p1] + (long)nums[p2] > target,由单调性知,以right为基准,left右边的元素均大于left指向的元素,相加之后结果必大于target,就需要将right左移一位;

当left与right相遇后,内层的一轮循环就结束了,就需要将p2向左移动一位,同样的,也需要进行去重操作,除去与p2指向元素相同的元素;

当p2==1时,p2已经走完一遍,就需要向左移动p1继续下一轮循环,同样的,也需要进行去重操作,去除与p1指向元素相同的元素,流程图与代码如下:

    public List<List<Integer>> fourSum(int[] nums, int target) {List<List<Integer>> ret = new ArrayList<>();Arrays.sort(nums);int n = nums.length;int p1 = n - 1;while (p1 > 2) {int p2 = p1 - 1;while (p2 > 1) {int left = 0;int right = p2 - 1;while (left < right) {if ((long)nums[left] + (long)nums[right] + (long)nums[p1] + (long)nums[p2] == target) {List<Integer> list = new ArrayList<>();list.add(nums[left]);list.add(nums[right]);list.add(nums[p1]);list.add(nums[p2]);ret.add(list);int numLeft = nums[left++];while (nums[left] == numLeft && left < right) {left++;}int numRight = nums[right++];while (nums[right] == numRight && left < right) {right--;}} else if ((long)nums[left] + (long)nums[right] + (long)nums[p1] + (long)nums[p2] < target) {left++;} else {right--;}}int numP2 = nums[p2--];while (nums[p2] == numP2 && p2 > 1) {p2--;}}int numP1 = nums[p1--];while (nums[p1] == numP1 && p1 > 2) {p1--;}}return ret;}

希望读者指出不足之处! 

 

http://www.yayakq.cn/news/600445/

相关文章:

  • 大网站前端怎么做的做天猫还是做网站推广
  • 创个网站怎么弄公众号做视频网站吗
  • 制作静态网站的工具有哪些影视网站模板怎么做
  • 有没有医学生做课件的网站做电影ppt模板下载网站
  • 自己怎么做免费网站网站制作经费预算表
  • 公司免费招聘网站做跨境电商的血泪教训
  • 电商网站建设实训要求a站是指哪个网站
  • c 网站开发案例网站备案 上一级服务商名称
  • 网站安全建设目的是wordpress建站流程
  • 网站的形式有哪些免费网络电话软件哪个好用
  • 网站高中建设工具怎么夸一个网站开发公司
  • 性做网站河北美丽乡村建设网站
  • 网站建设方案策划书ppt高端网站建设教学
  • 唐山快速建站的公司毕业设计是做网站设计
  • 北海 网站建设 公司国外做的好的医疗网站设计
  • 淄博团购网站建设查网站死链必用工具
  • 网站流量统计数据库设计培训机构seo
  • 网站上传后打不开谷歌sem服务商
  • 内蒙古两学一做网站网站开发报价范围
  • 网站备案很麻烦吗东莞品牌型网站建设价格
  • 学习网站建设的网站html5在网站建设中的
  • 石排镇专业建站公司使用php做的学校网站吗
  • 嘉定公司网站设计wordpress写简历
  • vps 网站攻击ip地址软件技术外包
  • 东莞长安做网站网站建设广告词
  • 做鞋子网站的域名设计中国第一架飞机
  • 广东住房和城乡建设局网站深圳建立公司网站公司
  • 家政公司网站建设多少钱中英文网站域名的区别
  • 有什的自学做网站商城网站栏目
  • 网站开发学什么专业企业建站设计