Advertisement
Guest User

Untitled

a guest
Jul 17th, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.23 KB | None | 0 0
  1. public List<List<Integer>> threeSum(int[] num) {
  2. Arrays.sort(num);
  3. List<List<Integer>> res = new LinkedList<>();
  4. for (int i = 0; i < num.length-2; i++) {
  5. if (i == 0 || (i > 0 && num[i] != num[i-1])) {
  6. int lo = i+1, hi = num.length-1, sum = 0 - num[i];
  7. while (lo < hi) {
  8. if (num[lo] + num[hi] == sum) {
  9. res.add(Arrays.asList(num[i], num[lo], num[hi]));
  10. while (lo < hi && num[lo] == num[lo+1]) lo++;
  11. while (lo < hi && num[hi] == num[hi-1]) hi--;
  12. lo++; hi--;
  13. } else if (num[lo] + num[hi] < sum) lo++;
  14. else hi--;
  15. }
  16. }
  17. }
  18. return res;
  19. }
  20.  
  21. var mysort = function(a, b) {
  22. return a-b;
  23. }
  24.  
  25. var threeSum = function(ns) {
  26. // everything is sorted
  27. ns.sort(mysort);
  28.  
  29. // acc
  30. let res = [];
  31.  
  32. // loop all #, but we keep last 2 elements
  33. for (let i = 0; i < ns.length-2; i++) {
  34.  
  35. // 1. i === 0, rm 1st element
  36. // 2. same same skip
  37. if (i === 0 || (i > 0 && ns[i] !== ns[i-1])) {
  38. //if (true) {
  39. // the 2nd element
  40. let lo = i+1;
  41. // the end element
  42. let hi = ns.length-1;
  43. // remove the 1st element
  44. let sum = 0 - ns[i];
  45.  
  46. // bi search
  47. while (lo < hi) {
  48.  
  49. console.log(lo, hi, ns[lo], ns[hi], sum)
  50.  
  51. // bi search: 2nd element + end element === sum
  52. if ((ns[lo] + ns[hi]) === sum) {
  53. console.log('push');
  54. res.push([ns[i], ns[lo], ns[hi]]);
  55.  
  56. // skip: lo < hi, lo skip equal
  57. while (lo < hi && ns[lo] === ns[lo+1]) lo++;
  58.  
  59. // skip: lo < hi, hi skip equal
  60. while (lo < hi && ns[hi] === ns[hi-1]) hi--;
  61.  
  62. // closer
  63. lo++;
  64.  
  65. // closer
  66. hi--;
  67. }
  68. else if (ns[lo] + ns[hi] < sum)
  69. lo++; // lo + hi < sum, lo++
  70. else
  71. hi--; // lo + hi > sum, hi--
  72. }
  73. }
  74.  
  75. return res;
  76. }
  77. }
  78.  
  79. [-1,0,1,2,-1,-4]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement