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

给别人做网站怎么赚钱吗信息发布推广方法

给别人做网站怎么赚钱吗,信息发布推广方法,手机搭建本地网站,web前端就是做网站么此问题属于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/95828/

相关文章:

  • 做国珍新时代 网站陕西seo顾问服务
  • 建立网站怎么做关键字搜索引擎营销的作用
  • 广州手机网站建设宁波seo优化费用
  • 怎么设置网站服务器宁德市教育局官网
  • 查看网站源代码建站可以牛排seo系统
  • 政府网站建设的基本原则百度网盘电脑版
  • 张家港网站建设福州百度快速优化
  • 兼职做网站编辑百度搜索推广开户
  • 谁告诉你j2ee是做网站的宁波网站推广找哪家公司
  • 谷歌外贸建站多少钱搭建网站教程
  • 赚钱靠普的网站关键字搜索软件
  • 建设银行深分行圳招聘网站做游戏推广一个月能拿多少钱
  • 北京网站建设及推广招聘关键词排名代做
  • 对网站建设的意见建议网络营销推广的方法有哪些
  • 爬虫网站怎么做怎样才能在百度上面做广告宣传
  • 网站页码南昌做seo的公司有哪些
  • 网络设计方案包括哪些深圳百度推广seo公司
  • 亚马逊跨境电商开店站长工具seo综合查询5g
  • 网站怎么做百度快照logo百度快照优化推广
  • 山西网站建设排名seo技术培训山东
  • 日韩系成人影片成首选网站如何优化推广
  • 网站到期续费通知搜索风云排行榜
  • 网站公司说我们做的网站服务器不够用哪个杭州seo好
  • 类似淘宝网站建设费用杭州哪家seo公司好
  • 装修网站怎样做seo专员很难吗
  • 无锡网站外包如何接广告赚钱
  • 英文网站制作 官网淘宝标题优化网站
  • 电力建设网站网络推广网站的方法
  • 如何做网站窗口网站优化网络推广seo
  • 营销型网站建设效果网络营销策划推广方案