Freewheel 4.16笔试 第三题代码

笔试时间紧张,代码写得比较暴力粗糙,仅供没AC的小伙伴找问题,勿喷哈。

package main

import (
	"fmt"
	"math"
)

func longestGeometricSeqLength(nums []int) int {
	// write code here
	if len(nums) == 0 {
		return 0
	}
	s1 := solution(nums)
	left, right := 0, len(nums)-1
	for left < right {
		nums[left], nums[right] = nums[right], nums[left]
		left++
		right--
	}
	s2 := solution(nums)
	ans := s1
	if s2 > ans {
		ans = s2
	}
	if ans == math.MinInt64 {
		ans = 1
	}
	return ans
}

func solution(nums []int) int {
	n := len(nums)
	dp := make([]map[int]int, n)
	// dp:=make(map[int]map[int]int)  // 下标 - 比例 - 最长长度
	dp[0] = make(map[int]int)

	ans := math.MinInt64

	for i := 1; i < n; i++ {
		dp[i] = make(map[int]int)
		for j := i - 1; j >= 0; j-- {
			if nums[j] != 0 && nums[i]%nums[j] == 0 {
				vv := nums[i] / nums[j]
				preLength, ok := dp[j][vv]
				//fmt.Println(preLength, ok)
				newLength := 0
				if !ok {
					newLength = 2
				} else {
					newLength = preLength + 1
				}
				if curLength, ok := dp[i][vv]; !ok {
					dp[i][vv] = newLength
				} else if newLength > curLength {
					dp[i][vv] = newLength
				}
				if dp[i][vv] > ans {
					ans = dp[i][vv]
				}
			}
		}
		//fmt.Println(i, dp[i])
	}

	return ans
}

func main() {
	ans := longestGeometricSeqLength([]int{2, 3})
	fmt.Println(ans)
}





#找呀找呀找工作##笔试题目##实习##FreeWheel#
全部评论
老哥,没点保存并提交,但是自动给提交了,牛客工作人员说代码有提交的记录,这是提上去还是没提啊
点赞 回复 分享
发布于 2022-04-16 21:46
这个 nums[i] % nums[j] == 0 的判断是不是不太对啊,这样子的话8 12 18这样的等比数列就检测不出来了,题目中没有公比是整数的限制呀
点赞 回复 分享
发布于 2022-04-16 22:28

相关推荐

牛舌:如果我不想去,不管对方给了多少,我一般都会说你们给得太低了。这样他们就会给下一个offer的人更高的薪资了。
点赞 评论 收藏
分享
3 4 评论
分享
牛客网
牛客企业服务