dengxinyi 6 년 전
부모
커밋
3de6f2e964
5개의 변경된 파일93개의 추가작업 그리고 0개의 파일을 삭제
  1. 16 0
      medium/553.optimal-division.go
  2. 22 0
      medium/554.brick-wall.go
  3. 20 0
      medium/556.next-greater-element-iii.go
  4. 15 0
      medium/560.subarray-sum-equals-k.go
  5. 20 0
      medium/565.array-nesting.go

+ 16 - 0
medium/553.optimal-division.go

@@ -0,0 +1,16 @@
+func optimalDivision(nums []int) string {
+	n := len(nums)
+	if n == 1 { // It's math!
+		return fmt.Sprintf("%d", nums[0])
+	} else if n == 2 {
+		return fmt.Sprintf("%d/%d", nums[0], nums[1])
+	}
+	var sb strings.Builder
+	sb.WriteString(fmt.Sprintf("%d/(%d", nums[0], nums[1]))
+	for i := 2; i < n; i++ {
+		sb.WriteString(fmt.Sprintf("/%d", nums[i]))
+	}
+	sb.WriteRune(')')
+	return sb.String()
+}
+

+ 22 - 0
medium/554.brick-wall.go

@@ -0,0 +1,22 @@
+func leastBricks(wall [][]int) int {
+	cnt := 0
+	freq := make(map[int]int)
+	for i := range wall {
+		left := 0
+		for _, w := range wall[i] {
+			if left != 0 {
+				freq[left]++
+				cnt = maxInt(cnt, freq[left])
+			}
+			left += w
+		}
+	}
+	return len(wall) - cnt
+}
+
+func maxInt(x, y int) int {
+	if x < y {
+		return y
+	}
+	return x
+}

+ 20 - 0
medium/556.next-greater-element-iii.go

@@ -0,0 +1,20 @@
+func nextGreaterElement(n int) int {
+	runes := []rune(strconv.Itoa(n))
+	for n = len(runes) - 2; 0 <= n && runes[n+1] <= runes[n]; n-- {
+	}
+	if n == -1 {
+		return n
+	}
+	i := len(runes) - 1
+	for ; runes[i] <= runes[n]; i-- {
+	}
+	runes[n], runes[i] = runes[i], runes[n]
+	for n, i = n+1, len(runes)-1; n < i; n, i = n+1, i-1 {
+		runes[n], runes[i] = runes[i], runes[n]
+	}
+	n, _ = strconv.Atoi(string(runes))
+	if math.MaxInt32 < n {
+		return -1
+	}
+	return n
+}

+ 15 - 0
medium/560.subarray-sum-equals-k.go

@@ -0,0 +1,15 @@
+func subarraySum(nums []int, k int) int {
+	cnt, n := 0, len(nums)
+	sum := make([]int, n+1)
+	m := make(map[int]int)
+	m[0]++
+	for i := 0; i < n; i++ {
+		s := sum[i] + nums[i]
+		if val, ok := m[s-k]; ok {
+			cnt += val
+		}
+		m[s]++
+		sum[i+1] = s
+	}
+	return cnt
+}

+ 20 - 0
medium/565.array-nesting.go

@@ -0,0 +1,20 @@
+func arrayNesting(nums []int) int {
+	max := 0
+	visited := make([]bool, len(nums))
+	for _, i := range nums {
+		if !visited[i] {
+			cnt := 0
+			for {
+				visited[i] = true
+				cnt, i = cnt+1, nums[i]
+				if visited[i] {
+					break
+				}
+			}
+			if max < cnt {
+				max = cnt
+			}
+		}
+	}
+	return max
+}