栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

和为定值的子数组

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

和为定值的子数组

先分享第一反应想到的解法,因为只要求四个元素相加和为一目标值,可以先定下一个值,将问题简化为求三个数和为固定值,然后再固定一个值,转为两个数和为固定值,以此来找到定值为K的四个元素的所有组合。

有一个需要注意的点,避免重复,给定的数组中可能会有相同值的数,为了避免最后得到重复的组合,我们要先将数组排序,这样遇到重复的跳过即可。

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class fixedSum{
	private static int NUM_AMOUNT=4;
	private static List>fixedSum(int[]nums,int target){
		List>res=new ArrayList<>();
		//如果数组长度不足4,返回空结果
		if(nums==null||nums.length0&&nums[i]==nums[i-1]) {
				continue;
			}
			//对于连续的四个数相加如果大于TARGET,则之后不可能再出现四元组,跳出循环
			if(nums[i]+nums[i+1]+nums[i+2]+nums[i+3]>target) {
				break;
			}
			//如果当前值加上最大的三个数都小于target,那就跳出此轮循环
			if(nums[i]+nums[len-3]+nums[len-2]+nums[len-1]i+1 &&nums[j]==nums[j-1]) {
					continue;
				}
				//连续的三个数相加如果大于target,跳出循环
				if(nums[i]+nums[j]+nums[j+1]+nums[j+2]>target) {
					break;
				}
				//加上最大的两个数如果小于target,跳出此轮循环
				if(nums[i]+nums[j]+nums[len-2]+nums[len-1]0)
		for(int i=0;i>res=fixedSum(nums,target);
			print(res);
		}
	}
	
	private static void print(List>res) {
		for(ListsubArr:res) {
			for(Integer element:subArr) {
				System.out.print(element+" ");
			}
			System.out.print("$");
		}
		System.out.println();
	}
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/679158.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号