Advertisement
Guest User

Untitled

a guest
Jun 26th, 2019
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.21 KB | None | 0 0
  1. package com.sandao.sandaodemo.controller;
  2.  
  3. import java.util.*;
  4.  
  5. /**
  6. * @author sandao
  7. * Created on 2019/5/31.
  8. */
  9. public class Super {
  10. public static void main(String[] args) {
  11. int[] nums = {1, 2, 2, 3, 3, 3, 4, 5, 5,13,45,64,23,2,4,67,12,34,22,1,5,78,90,3,45,67,3,2,6,87,4,2,67,8,4,2,45,67};
  12. int target = 23;
  13. long start = System.currentTimeMillis() ;
  14. Arrays.sort(nums);
  15. System.out.println(sum(target, nums));
  16. long end = System.currentTimeMillis() ;
  17. System.out.println(end-start);
  18. }
  19.  
  20. private static Set<List<Integer>> sum(int target, int[] nums) {
  21. //map中 以当前和为key 所有可能的情况为value
  22. Map<Integer, Set<List<Integer>>> result = new HashMap<>(target * 2);
  23.  
  24. for (int i = 0; i < nums.length; i++) {
  25. int currentNum = nums[i];
  26.  
  27. if (currentNum <= target){
  28. Map<Integer, Set<List<Integer>>> newResult = new HashMap<>(result);
  29. for (Integer key : result.keySet()) {
  30. if (target >= currentNum + key) {
  31. Set<List<Integer>> list = result.get(key);
  32. Set<List<Integer>> newList = result.get(key + currentNum) != null ? new HashSet<>(result.get(key + currentNum)) : new HashSet<>();
  33. //遍历原有的可能结果
  34. for (List<Integer> listDetail : list) {
  35. List<Integer> copyList = new LinkedList<>(listDetail);
  36. copyList.add(currentNum);
  37. newList.add(copyList);
  38. newResult.put(currentNum + key, newList);
  39. }
  40. }
  41. }
  42. result = newResult;
  43.  
  44. //放入当前数值的单个值
  45. List<Integer> currentList = new LinkedList<>();
  46. currentList.add(currentNum);
  47. Set<List<Integer>> currentSet = result.get(currentNum) != null ? result.get(currentNum) : new HashSet<>();
  48. currentSet.add(currentList);
  49. result.put(currentNum, currentSet);
  50. }else {
  51. break;
  52. }
  53. }
  54. return result.get(target);
  55. }
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement