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

网站历史记录怎么恢复搜狗站长

网站历史记录怎么恢复,搜狗站长,分享设计的网站,做网站需要开放哪些端口此问题属于nsum问题,题目链接:力扣 要求在数组中找到不重复的三元组,三个数加起来为0,且每个下标只能用一次。而且需要返回所有这样的不重复数组。 1. 排序 双指针 1. 「不重复」的本质是什么?我们保持三重循环的大…

此问题属于nsum问题,题目链接:力扣

要求在数组中找到不重复的三元组,三个数加起来为0,且每个下标只能用一次。而且需要返回所有这样的不重复数组。

1. 排序 + 双指针

1. 「不重复」的本质是什么?我们保持三重循环的大框架不变,只需要保证:

  • 第二重循环枚举到的元素不小于当前第一重循环枚举到的元素;
  • 第三重循环枚举到的元素不小于当前第二重循环枚举到的元素。

也就是说,我们枚举的三元组 (a, b, c) 满足 a ≤ b ≤ c,保证了只有 (a, b, c) 这个顺序会被枚举到,而(b, a, c)、(c, b, a) 等等这些不会,这样就减少了重复。要实现这一点,我们可以将数组中的元素从小到大进行排序,随后使用普通的三重循环就可以满足上面的要求。

2. 对于每一重循环而言,相邻两次枚举的元素不能相同,否则也会造成重复,(但是对于初学者来讲,为了简化题目,可以先不考虑重复结果的处理)

2. 不考虑重复

我们可以先考虑不处理重复结果的情况,代码如下:(注释全整版)

    public List<List<Integer>> threeSum(int[] nums) {int n = nums.length;Arrays.sort(nums); // 排序是前提List<List<Integer>> ans = new ArrayList<>();// 枚举 afor (int a = 0; a < n; a++) {int c = n - 1; // 将c初始指向数组最后一位int target = -nums[a]; // 这是b和c的目标和for (int b = a + 1; b < n; b++) { // b 暂时固定(按部就班的递增)while (b < c && nums[b] + nums[c] > target){c--;}// 如果b和c的和太大,c就左移if (c == b) break; // a b 确定下,c已经退无可退了,所以break// 后续就算是b再递增,这个总和也是太大,没有合适的c了if (nums[b] + nums[c] == target){List<Integer> list = new ArrayList<>();list.add(nums[a]);list.add(nums[b]);list.add(nums[c]);ans.add(list);}}}return ans;}

其实不加处理重复的话,代码很简单哈哈!!!

3.加上对重复的判定

后续对于重复答案的处理,就是要求a不重复,b不重复,在代码中分别加上这两段验证即可:

1. 对于a: 

if (a > 0 && nums[a] == nums[a - 1]) continue;

2. 对于b

if (b > a + 1 &&  nums[b] == nums[b - 1]) continue;

由以上思路得出的本题目的完整版代码如下:(注释完整版)

class Solution {public List<List<Integer>> threeSum(int[] nums) {int n = nums.length;Arrays.sort(nums);List<List<Integer>> res = new ArrayList<>();for (int a = 0; a < n; a++) {if (a > 0 && nums[a] == nums[a - 1]) continue; // 每个数只能当一次aint c = n - 1;int target = -nums[a];// 枚举bfor (int b = a + 1; b < n; b++) { // b从a后一个开始if (b > a + 1 && nums[b] == nums[b - 1]) continue; // b > a+1代表// 比如说 0 1 1这个数组,如果a指向0,b指向第二个1,那就没必要了// 因为每个数字只能当一次bwhile (b < c && nums[b] + nums[c] > target) {--c;}// 如果指针重合,随着 b 后续的增加// 就不会有满足 a+b+c=0 并且 b<c 的 c 了,可以退出循环if (b == c) {break;}if (nums[b] + nums[c] == target) {List<Integer> list = new ArrayList<Integer>();list.add(nums[a]);list.add(nums[b]);list.add(nums[c]);res.add(list);}}}return res;}
}

时间复杂度O(n^{^{2}}),在n <= 3000的数据范围内可以满足要求

http://www.hkea.cn/news/540607/

相关文章:

  • 网站开发建设的步骤win11优化大师
  • 在线做数据图的网站樱桃bt磁力天堂
  • 网站建设费的税率东莞公司网上推广
  • 上海设计公司排名前十宁波seo搜索优化费用
  • 如皋做网站公司com域名
  • 织梦做企业网站教程网络营销推广方案论文
  • 微信如何添加小程序二十条优化措施全文
  • 网站制作费可以做业务宣传费河北百度推广电话
  • wordpress日主题破解网站排名优化软件有哪些
  • 做公众号app 网站 app济南网站设计
  • 单位网站 单位网页 区别吗福州seo顾问
  • 专业做网站制作的公司百度地图网页版进入
  • 买卖网站域名骗局百度推广登陆
  • 石家庄大型网站设计公司手机怎么建网站
  • 政府网站图解怎么做百度关键词排名靠前
  • 天津做网站印标东莞网络推广排名
  • 设计一个外贸网站需要多少钱沈阳网站推广优化
  • 洗化行业做网站福州百度seo排名
  • 西安app网站开发项目腾讯域名注册官网
  • 网站开发的技术指标如何做网站搜索引擎优化
  • 建网站的要求老铁外链工具
  • wordpress有广告郑州seo优化大师
  • 企业网站推广的实验内容企业宣传网站
  • 如何开发高端市场宁波seo快速优化公司
  • 常用设计资源网站爱网站
  • 企业品牌网站营销关于seo的行业岗位有哪些
  • 群晖怎样做网站惠州网络营销
  • 怎么做网站内部链接的优化品牌营销推广代运营
  • 婚纱照网站制作搜索引擎优化搜索优化
  • 网站建设吉金手指专业13中国营销网站