image.png

    升序数组查找不是升序的位置

    1. package main
    2. import (
    3. "fmt"
    4. "math"
    5. "sort"
    6. )
    7. func nextGreaterElement(n int) int {
    8. // 第一步需要拆解成数组
    9. var nums []int
    10. for n>0{
    11. r := n %10
    12. n = n/10
    13. nums = append(nums,r)
    14. }
    15. idx :=-1
    16. //[2,3,4,1]
    17. for i:=0;i<len(nums)-1;i++{
    18. if nums[i]>nums[i+1] {
    19. idx = i+1
    20. break
    21. }
    22. }
    23. if idx==-1 {
    24. return -1
    25. }
    26. //[2,3,4,1]
    27. for i:=0;i<idx;i++{
    28. if nums[i]>nums[idx]{
    29. nums[i],nums[idx] =nums[idx],nums[i]
    30. break
    31. }
    32. }
    33. // [1,3,4,2]
    34. sort.Slice(nums[:idx], func(i, j int) bool {
    35. return nums[i]>nums[j]
    36. })
    37. //[4,3,1,2]
    38. res :=0
    39. for i:=len(nums)-1;i>=0;i--{
    40. res =res*10+nums[i]
    41. if res>math.MaxInt32 {
    42. return -1
    43. }
    44. }
    45. return res
    46. }
    47. func main() {
    48. fmt.Println(nextGreaterElement(1432))
    49. fmt.Println(nextGreaterElement(1342))
    50. fmt.Println(nextGreaterElement(123))
    51. fmt.Println(nextGreaterElement(12))
    52. fmt.Println(nextGreaterElement(21))
    53. }

    image.png