zoukankan      html  css  js  c++  java
  • 18. 4Sum(中等)

    Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.

    Note: The solution set must not contain duplicate quadruplets.

    For example, given array S = [1, 0, -1, 0, -2, 2], and target = 0.
    
    A solution set is:
    [
      [-1,  0, 0, 1],
      [-2, -1, 1, 2],
      [-2,  0, 0, 2]
    ]
    

    题目和15题的要求几乎一样,只不过是4Sum.
    思路和15题一模一样,但仍要注意去重.

    自己思路:

    有了3sum的经验这个就好做了,思想和3sum没有区别
    先排序;
    固定i, 固定j, move lo and hi;
    We'll come across 3 cases(sum == ta, sum > ta, sum < ta) and deal with them.

    自己代码:
    (O(n^3)) time, (O(1)) extra space.

    vector<vector<int>> fourSum(vector<int>& A, int ta) {
    	const int n = A.size();
    	vector<vector<int>> res;
    	sort(A.begin(), A.end());
    
    	// 有了3sum的经验这个就好做了,思想和3sum没有区别
    	// 固定i, 固定j, move lo and hi
    	// we'll come across 3 cases(sum==ta, sum>ta, sum<ta) and deal with them
    	for (int i = 0; i < n - 3; i++) {
    		if (i > 0 && A[i] == A[i - 1]) continue; //去重
    		for (int j = i + 1; j < n - 2; j++) {
    			if ((j > i + 1) && (A[j] == A[j - 1])) continue; //去重
    			int lo = j + 1, hi = n - 1;
    
    			while (lo < hi) {// lo <= hi 不可以
    				int sum = A[i] + A[j] + A[lo] + A[hi];
    				if (sum == ta) {
    					
    					res.push_back({A[i], A[j], A[lo], A[hi]});
    
    					while (lo < hi && A[hi] == A[hi - 1]) hi--; //去重
    					while (lo < hi && A[lo] == A[lo + 1]) lo++; //去重
    					lo++; // 只有lo++或 只有hi--也可 他俩都没有就无限循环了
    					hi--;
    
    				} else if (sum > ta) {
    					while (lo < hi && A[hi] == A[hi - 1]) hi--; //去重
    					hi--;
    				} else { // sum < ta
    					while (lo < hi && A[lo] == A[lo + 1]) lo++; //去重
    					lo++;
    				}
    			}
    		}
    	}
    	return res;
    }
    
  • 相关阅读:
    Grafana 监控系统是否重启
    Grafana 短信报警
    Python 协程检测Kubernetes服务端口
    python过滤 Kubernetes api数据
    django 实现文件下载功能
    python tar.gz格式压缩、解压
    kafka查看消费数据
    SublimeText设置在浏览器打开 快捷键
    php如何优雅地把数组传递给前端js脚本?
    jQuery因mouseover,mouseout冒泡产生的闪烁问题
  • 原文地址:https://www.cnblogs.com/ZhongliangXiang/p/7410982.html
Copyright © 2011-2022 走看看