当前位置:   article > 正文

Golang | Leetcode Golang题解之第321题拼接最大数

Golang | Leetcode Golang题解之第321题拼接最大数

题目:

题解:

  1. func maxSubsequence(a []int, k int) (s []int) {
  2. for i, v := range a {
  3. for len(s) > 0 && len(s)+len(a)-1-i >= k && v > s[len(s)-1] {
  4. s = s[:len(s)-1]
  5. }
  6. if len(s) < k {
  7. s = append(s, v)
  8. }
  9. }
  10. return
  11. }
  12. func lexicographicalLess(a, b []int) bool {
  13. for i := 0; i < len(a) && i < len(b); i++ {
  14. if a[i] != b[i] {
  15. return a[i] < b[i]
  16. }
  17. }
  18. return len(a) < len(b)
  19. }
  20. func merge(a, b []int) []int {
  21. merged := make([]int, len(a)+len(b))
  22. for i := range merged {
  23. if lexicographicalLess(a, b) {
  24. merged[i], b = b[0], b[1:]
  25. } else {
  26. merged[i], a = a[0], a[1:]
  27. }
  28. }
  29. return merged
  30. }
  31. func maxNumber(nums1, nums2 []int, k int) (res []int) {
  32. start := 0
  33. if k > len(nums2) {
  34. start = k - len(nums2)
  35. }
  36. for i := start; i <= k && i <= len(nums1); i++ {
  37. s1 := maxSubsequence(nums1, i)
  38. s2 := maxSubsequence(nums2, k-i)
  39. merged := merge(s1, s2)
  40. if lexicographicalLess(res, merged) {
  41. res = merged
  42. }
  43. }
  44. return
  45. }
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号