leetcode-914.卡牌分组

栏目: 编程工具 · 发布时间: 6年前

内容简介:给定一副牌,每张牌上都写着一个整数。此时,你需要选定一个数字仅当你可选的

914.卡牌分组

题目

给定一副牌,每张牌上都写着一个整数。

此时,你需要选定一个数字 X ,使我们可以将整副牌按下述规则分成 1 组或更多组:

X

仅当你可选的 X >= 2 时返回  true

示例 1:

**

输入:[1,2,3,4,4,3,2,1]

**输出:**true

**解释:**可行的分组是 [1,1],[2,2],[3,3],[4,4]

示例 2:

**

输入:[1,1,1,2,2,2,3,3]

**输出:**false

**解释:**没有满足要求的分组。

示例 3:

**

输入:[1]

**输出:**false

**解释:**没有满足要求的分组。

示例 4:

**

输入:[1,1]

**输出:**true

**解释:**可行的分组是 [1,1]

示例 5:

**

输入:[1,1,2,2,2,2]

**输出:**true

**解释:**可行的分组是 [1,1],[2,2],[2,2]

提示:

**

1 <= deck.length <= 10000
0 <= deck[i] < 10000

思考

计算两个数 a, b 的最大公约数

  • **a = c * b + ****d **
    • d = 0 a = c * b
    • **d > 0 a = c * b + d * ->b = e d + f  
      • **f = 0 b = e * d          <-  a = c * ( e * d ) + ** d
      • f > 0 ** b = e * d + ****f    ****<-  a = c * ( e * d + f ) + d   **

测试最大公约数

package main

import "fmt"

func GreatestCommonDivisor(a, b int) int {
    for b != 0 {
      return GreatestCommonDivisor(b, a % b)
    }
    return a
}

func main() {
  fmt.Println(GreatestCommonDivisor(6, 9)) // 3
  fmt.Println(GreatestCommonDivisor(2, 8)) // 2
  fmt.Println(GreatestCommonDivisor(2, 3)) // 1
}

Go实现

package main

import (
  "fmt"
  "math"
)

func GreatestCommonDivisor(a, b int) int {
    // 定义求最大公约数的方法
    for b != 0 {
      return GreatestCommonDivisor(b, a % b)
    }
    return a
}

func hasGroupsSizeX(deck []int) bool {
  // 1. 统计各个数出现的次数
  m := make(map[int]int)
  min := math.MaxInt64
  for _, v := range deck {
    if m[v] != 0{
      m[v] += 1
    } else {
      m[v] = 1
    }
  }
  fmt.Println("min: ", min)
  // 2. 遍历找出最小次数
  for i, v := range m {
    fmt.Printf("数字:%d, 出现了 %d 次\n", i, v)
    if min > v {
      min = v
    }
  }
  fmt.Printf("各个数出现的最小次数:%d\n", min)
  // 3. 求次数与最小次数之间是否存在最大公约数
  for _, v := range m {
    fmt.Printf("min=%d, 与 %d 之间的最大公约数是 %d\n", min, v, GreatestCommonDivisor(min, v))
    if(GreatestCommonDivisor(min, v)<=1) {
      fmt.Println("false")
      return false
    }
  }
  fmt.Println("true")
  return true
}

func main() {
  a := []int{1,2,3,4,4,3,2,1}
  hasGroupsSizeX(a)
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

增长的本质

增长的本质

凯萨·伊达尔戈 / 中信出版集团股份有限公司 / 2015-11-1 / CNY 49.00

这是一本物理学家撰写得跨经济学、社会、物理学等多学科的专著。在伊达尔戈之前,从来没有人以这样的方式研究经济增长。 什么是经济增长?为什么它只发生在历史长河的一些节点上?传统意义上的解释都强调了体制、地理、金融和心理因素。而塞萨尔?伊达尔戈告诉我们,想了解经济增长的本质,还需要走出社会科学的研究,在信息、关系网和复杂性这样的自然科学中寻求答案。为了认识经济发展,塞萨尔?伊达尔戈认为我们首先需要......一起来看看 《增长的本质》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

html转js在线工具
html转js在线工具

html转js在线工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具