dengxinyi 6 anos atrás
pai
commit
7d04f6bdf9

+ 9 - 0
easy/344.reverse-string.go

@@ -0,0 +1,9 @@
+func reverseString(s string) string {
+	n := len(s)
+	runes := make([]rune, n)
+	for _, r := range s {
+		n--
+		runes[n] = r
+	}
+	return string(runes)
+}

+ 15 - 0
easy/345.reverse-vowels-of-a-string.go

@@ -0,0 +1,15 @@
+var vowels map[rune]bool = map[rune]bool{'A': true, 'E': true, 'I': true, 'O': true, 'U': true, 'a': true, 'e': true, 'i': true, 'o': true, 'u': true}
+
+func reverseVowels(s string) string {
+	runes := []rune(s)
+	for l, r := 0, len(s)-1; l < r; l, r = l+1, r-1 {
+		if vowels[runes[l]] && vowels[runes[r]] {
+			runes[l], runes[r] = runes[r], runes[l]
+		} else if vowels[runes[l]] {
+			l--
+		} else if vowels[runes[r]] {
+			r++
+		}
+	}
+	return string(runes)
+}

+ 15 - 0
easy/349.intersection-of-two-arrays.go

@@ -0,0 +1,15 @@
+func intersection(nums1 []int, nums2 []int) (res []int) {
+	m := make(map[int]int)
+	for _, n := range nums1 {
+		m[n] |= 1
+	}
+	for _, n := range nums2 {
+		m[n] |= 2
+	}
+	for k, v := range m {
+		if v == 3 {
+			res = append(res, k)
+		}
+	}
+	return
+}

+ 13 - 0
easy/350.intersection-of-two-arrays-ii.go

@@ -0,0 +1,13 @@
+func intersect(nums1 []int, nums2 []int) (res []int) {
+	m := make(map[int]int)
+	for _, n := range nums1 {
+		m[n]++
+	}
+	for _, n := range nums2 {
+		if val, ok := m[n]; ok && 0 < val {
+			m[n] = val - 1
+			res = append(res, n)
+		}
+	}
+	return
+}

+ 15 - 0
easy/367.valid-perfect-square.go

@@ -0,0 +1,15 @@
+func isPerfectSquare(num int) bool {
+	beg, end := 1, num+1
+	for beg < end {
+		mid := beg + (end-beg)/2
+		div := num / mid
+		if div == mid && div*mid == num { // 5 / 2 == 2, but 2 * 2 != 5
+			return true
+		} else if div < mid {
+			end = mid
+		} else if mid <= div {
+			beg = mid + 1
+		}
+	}
+	return false
+}

+ 6 - 0
easy/371.sum-of-two-integers.go

@@ -0,0 +1,6 @@
+func getSum(a int, b int) int {
+	for b != 0 {
+		a, b = a^b, (a&b)<<1
+	}
+	return a
+}

+ 22 - 0
easy/374.guess-number-higher-or-lower.java

@@ -0,0 +1,22 @@
+/* The guess API is defined in the parent class GuessGame.
+   @param num, your guess
+   @return -1 if my number is lower, 1 if my number is higher, otherwise return 0
+      int guess(int num); */
+
+public class Solution extends GuessGame {
+    public int guessNumber(int n) {
+		int beg = 1, end = n;
+		while (beg <= end) {
+			int mid = beg + (end - beg) / 2;
+			int val = guess(mid);
+			if (val == -1) {
+				end = mid - 1;
+			} else if (val == 1) {
+				beg = mid + 1;
+			} else {
+				return mid;
+			}
+		}
+		return beg;
+    }
+}

+ 17 - 0
easy/383.ransom-note.go

@@ -0,0 +1,17 @@
+func canConstruct(ransomNote string, magazine string) bool {
+	m, n := len(ransomNote), len(magazine)
+	if n < m {
+		return false
+	}
+	cnt := make([]int, 256)
+	for _, r := range magazine {
+		cnt[r]++
+	}
+	for _, r := range ransomNote {
+		cnt[r]--
+		if cnt[r] < 0 {
+			return false
+		}
+	}
+	return true
+}

+ 17 - 0
easy/387.first-unique-character-in-a-string.go

@@ -0,0 +1,17 @@
+func firstUniqChar(s string) int {
+	m := make(map[rune]int)
+	cnt := make([]int, 256)
+	for i, r := range s {
+		if _, ok := m[r]; !ok {
+			m[r] = i
+		}
+		cnt[r]++
+	}
+	idx := -1
+	for i := 'a'; i <= 'z'; i++ {
+		if val := m[i]; cnt[i] == 1 && (idx == -1 || val < idx) {
+			idx = val
+		}
+	}
+	return idx
+}

+ 13 - 0
easy/389.find-the-difference.go

@@ -0,0 +1,13 @@
+func findTheDifference(s string, t string) byte {
+	cnt := make([]int, 256)
+	for _, r := range s {
+		cnt[r]++
+	}
+	for _, r := range t {
+		cnt[r]--
+		if cnt[r] < 0 {
+			return byte(r)
+		}
+	}
+	return '0'
+}

+ 13 - 0
easy/400.nth-digit.go

@@ -0,0 +1,13 @@
+func findNthDigit(n int) int {
+	nines, digits := 9, 1
+	for nines*digits < n {
+		n -= nines * digits
+		nines *= 10
+		digits++
+	}
+	num := nines/9 + (n-1)/digits
+	for i := 0; i < digits-(n-1)%digits-1; i++ {
+		num /= 10
+	}
+	return num % 10
+}