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

梁山企业网站建设国内最开放的浏览器

梁山企业网站建设,国内最开放的浏览器,团购网站策划,深圳三玉网站建设文章目录 15. 三数之和题干:算法原理:1、排序 暴力枚举 利用set 去重2、排序 双指针 代码: 18. 18. 四数之和题干:算法原理:1、排序 暴力枚举 利用set 去重2、排序 双指针 代码: 15. 三数之和 原题链…

文章目录

  • 15. 三数之和
    • 题干:
    • 算法原理:
      • 1、排序 + 暴力枚举 + 利用set 去重
      • 2、排序 + 双指针
    • 代码:
  • 18. 18. 四数之和
    • 题干:
    • 算法原理:
      • 1、排序 + 暴力枚举 + 利用set 去重
      • 2、排序 + 双指针
    • 代码:

15. 三数之和

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

题干:

存在一个三元组,满足
i != j、i != k 且 j != k
nums[i] + nums[j] + nums[k] == 0

算法原理:

1、排序 + 暴力枚举 + 利用set 去重

这个方法就是先循环,用几个 for 循环暴力枚举,然后放到 HashSet 中去重
但是这个方法时间复杂度很高,达到了O(N3)

2、排序 + 双指针

(1)排序
这里进行排序是为了从前向后遍历的时候,可以更好的用双指针进行操作
在这里插入图片描述
(2)固定一个数 a
这个 a 必须要大于等于 0,因为题目要求三数相加等于 0

(3)在该数后面的区间内,利用“双指针算法”快速找到两个数的和等于 -a 即可
在这里插入图片描述

(4)处理细节问题

  • 不要漏任何一个组合
    在 left 和 right 向中间走的时候,找到一个数等于固定的数的负数,不能停下,继续缩小区间,寻找下一个

  • 去重
    由于题目要求,不能返回相同的数组,所以要求去重
    这样就可以找到一种结果之后,left 和 right 指针要跳过重复元素
    当使用完一次双指正算法之后,也要跳过重复元素
    但要注意避免越界!!!
    在这里插入图片描述

代码:

   public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> ret = new ArrayList<>();//1.排序Arrays.sort(nums);int n = nums.length;//2.利用双指针for (int i = 0; i < n;) {int left = i + 1;int right = n - 1;int target = -nums[i];if (nums[i] > 0) {break;}while (left < right) {int sum = nums[left] + nums[right];if (sum < target) {left++;}else if (sum > 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++;while (i < n && nums[i] == nums[i-1]) {i++;}}return ret;}

在这里插入图片描述

18. 18. 四数之和

在这里插入图片描述

题干:

这道题跟上面的三数之和非常相似,因此下面的解题思路也是非常相似

nums[a] + nums[b] + nums[c] + nums[d] == target

算法原理:

1、排序 + 暴力枚举 + 利用set 去重

这个算法依然是超时的,我们主要看第二种

2、排序 + 双指针

(1)排序

(2)在 a 后面的区间内,利用“三数之和”找到三个数(和上面题的方法一样),使这三个数的和等于 target - a

(3)处理细节问题

  • 不漏
  • 去重

代码:

public List<List<Integer>> fourSum(int[] nums, int target) {List<List<Integer>> ret = new ArrayList<>();int n = nums.length;//1.排序Arrays.sort(nums);//2.双指针for (int i = 0; i < n;) {long t1 = (long)target - nums[i];for (int j = i + 1; j < n;) {long t2 = t1 - nums[j];int left = j + 1;int right = n - 1;while (left < right) {int sum = nums[left] + nums[right];if (sum > t2) {right--;}else if (sum < t2) {left++;}else {ret.add(Arrays.asList(nums[i],nums[j],nums[left],nums[right]));left++;right--;while (left < right && nums[left] == nums[left-1]) {left++;}while (left < right && nums[right] == nums[right+1]) {right--;}}}j++;while (j < n && nums[j] == nums[j-1]) {j++;}}i++;while (i < n && nums[i] == nums[i-1]) {i++;}}return ret;}

在这里插入图片描述

http://www.mnyf.cn/news/50504.html

相关文章:

  • wordpress 计算器插件网站排名优化手机
  • 网站制作com cn域名有什么区别12345浏览器网址大全
  • 网站页面布局名称宣城网站seo
  • 发布网站建设需求的经验百度seo服务公司
  • 株洲市住房和城乡建设局网站网络营销渠道可分为
  • 甘肃建设职工教育培训中心网站天津seo
  • 建网站教程视频下载百度一下一下你就知道
  • 网站建设的主题杭州线上推广
  • 网站怎么做https深圳网站优化网站
  • 形意设计素材网站怎么联系地推公司
  • 网站开发技术对比网站链接提交
  • 网站搬家图片怎么做潍坊网站模板建站
  • 自己做的网站本地虚拟上传百度西安
  • 做网站最简单的方法百度搜索浏览器
  • 糖果网站是李笑来做的吗seo实战密码第四版
  • 宁晋做网站百度推广销售话术
  • 苏州自学网站建设平台软文写作公司
  • 中小学网络云平台北京网站快速排名优化
  • 网络营销的八种方法锦绣大地seo
  • 南宁做网站比较好的公司软文营销常用的方式
  • 保定企业网站开发优化网站标题是什么意思
  • 张家港外贸网站制作搜索引擎优化核心
  • 建设网站免费使用小程序引流推广平台
  • 163企业邮箱怎么开通注册seo在中国
  • 比较好的做淘客网站网推拉新app推广平台
  • 长安外贸网站建设公司青岛网站权重提升
  • 做自己的博客网站专业制作网站的公司哪家好
  • 网站开发的功能需求文档模板合肥搜索引擎优化
  • 长春市委网站输入关键词进行搜索
  • 新校区建设专题网站淘宝指数查询入口