Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
// https://leetcode.com/problems/two-sum/description/?source=submission-ac class Solution { // Time complexity: O(nlogn) // Dry runs // Example 1: [1, 2, 3, 4, 5], target = 7 // Example 2: [5, 6, 3, 1] , target = 7 // Below solution works for scenario where we are looking for two numbers that add upto target but not for indices // This is because we are sorting and that would change the indices // public int[] twoSum(int[] nums, int target) { // Arrays.sort(nums); // int i = 0, j = nums.length - 1; // while(i < j) { // if (nums[i] + nums[j] == target) { // return new int[]{nums[i], nums[j]}; // } // else if (nums[i] + nums[j] > target) { // j--; // } // else { // i++; // } // } // return new int[]{}; // } // Time complexity: O(n) // Space complexity: O(n) // I initially though below solution would not work for duplicates however that assumption was wrong // public int[] twoSum(int[] nums, int target) { // HashMap
map = new HashMap<>(); // for(int i = 0; i < nums.length; i++) { // map.put(nums[i], i); // } // for(int i = 0; i < nums.length; i++) { // if(map.get(target - nums[i]) != null) { // int j = map.get(target - nums[i]); // if (i == j) continue; // return new int[] // {i, map.get(target - nums[i])}; // } // } // return new int[]{}; // } // Brute force // Time Complexity: O(n^2) // Space Complexity: O(1) // public int[] twoSum(int[] nums, int target) { // for (int i = 0; i < nums.length; i++) { // for (int j = i + 1; j < nums.length; j++) { // if(nums[i] + nums[j] == target) { // return new int[]{i, j}; // } // } // } // return new int[]{}; // } // Time complexity: O(n) // Space complexity: O(n) // Two pass hash table // public int[] twoSum(int[] nums, int target) { // Map
map = new HashMap<>(); // for (int i = 0; i < nums.length; i++) { // map.put(nums[i], i); // } // for (int i = 0; i < nums.length; i++) { // int complement = target - nums[i]; // if(map.containsKey(complement) && map.get(complement) != i) { // return new int[] {i, map.get(complement)}; // } // } // return new int[]{}; // } // Time complexity: O(n) // Space complexity: O(n) // One pass hash table public int[] twoSum(int[] nums, int target) { Map
map = new HashMap<>(); for (int i = 0; i < nums.length; i++) { int complement = target - nums[i]; if(map.containsKey(complement)) { return new int[]{map.get(complement), i}; } map.put(nums[i], i); } return new int[]{}; } }
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)