diff --git a/best-time-to-buy-and-sell-stock/invidam.go b/best-time-to-buy-and-sell-stock/invidam.go new file mode 100644 index 000000000..55671947e --- /dev/null +++ b/best-time-to-buy-and-sell-stock/invidam.go @@ -0,0 +1,10 @@ +func maxProfit(prices []int) int { + purchasePrice := prices[0] + maxBenefit := 0 + + for _, price := range prices { + purchasePrice = min(purchasePrice, price) + maxBenefit = max(maxBenefit, price-purchasePrice) + } + return maxBenefit +} diff --git a/contains-duplicate/invidam.go b/contains-duplicate/invidam.go new file mode 100644 index 000000000..9816d1f0c --- /dev/null +++ b/contains-duplicate/invidam.go @@ -0,0 +1,9 @@ +func containsDuplicate(nums []int) bool { + appeared := make(map[int]bool) + + for _, num := range nums { + appeared[num] = true + } + + return len(appeared) != len(nums) +} diff --git a/two-sum/invidam.go b/two-sum/invidam.go new file mode 100644 index 000000000..b8956d26b --- /dev/null +++ b/two-sum/invidam.go @@ -0,0 +1,10 @@ +func twoSum(nums []int, target int) []int { + need := make(map[int]int, len(nums)) + for i, n := range nums { + if j, ok := need[n]; ok { + return []int{i, j} + } + need[target-n] = i + } + return nil +} diff --git a/valid-anagram/invidam.go b/valid-anagram/invidam.go new file mode 100644 index 000000000..5eb713bba --- /dev/null +++ b/valid-anagram/invidam.go @@ -0,0 +1,23 @@ +func isAnagram(s string, t string) bool { + freqS := make(map[rune]int, 26) + freqT := make(map[rune]int, 26) + + for _, ch := range s { + if _, ok := freqS[ch]; ok { + freqS[ch]++ + } else { + freqS[ch] = 1 + } + } + for _, ch := range t { + freqT[ch]++ + } + + for ch := 'a'; ch <= 'z'; ch++ { + if diff := freqS[ch] - freqT[ch]; diff != 0 { + return false + } + } + + return true +} diff --git a/valid-palindrome/invidam.go b/valid-palindrome/invidam.go new file mode 100644 index 000000000..ad1acb0eb --- /dev/null +++ b/valid-palindrome/invidam.go @@ -0,0 +1,15 @@ +func isPalindrome(s string) bool { + filtered := strings.Map(func(r rune) rune { + if !unicode.IsLetter(r) && !unicode.IsNumber(r) { + return -1 + } + return unicode.ToLower(r) + }, s) + + for ldx, rdx := 0, len(filtered) - 1; ldx < rdx; ldx, rdx = ldx + 1, rdx - 1 { + if filtered[ldx] != filtered[rdx] { + return false + } + } + return true +}