GetNumber的实现(Python & Java & Golang)
TCO2014的编程赢取门票的题目,大致是从一个数组(大小为K),可以选取1~K个数,必须保证这n个数是从1~n,返回所有的选取方法个数。
思路:首先是得到从1开始连续的数,保存每个数的个数。然后通过排列组合得到结果。
当时采用的Python编写,大致的模样是这样(题目要求的类名就略去了):
def getNumber(type):
c = [0] * len(type)
s = 0
p = 0
for x in type:
if x <= len(type):
c[x-1] += 1
for i in c:
if i == 0:
return s
else:
if s == 0:
s = i
p = i
else:
p *= i
s += p
return s print getNumber([2])
print getNumber([1, 2])
print getNumber([1, 3, 2])
print getNumber([1, 1, 2])
print getNumber([1, 3, 2, 5, 7, 4, 5, 4])
print getNumber([1, 1, 2, 2, 3, 3, 4, 4, 5, 5])
之后尝试了一下 Java 版本:
package org.huys.algo.problem;
public class WinterAndCandies {
public static int getNumber(int[] type) {
int[] c = new int[type.length];
int s = 0;
int p = 0;
for (int i=0; i<type.length; i++) {
if (type[i] <= type.length) {
c[type[i]-1] += 1;
}
}
for (int i=0; i<c.length; i++) {
if (c[i] == 0) {
return s;
} else {
if (s == 0) {
s = c[i];
p = c[i];
} else {
p *= c[i];
s += p;
}
}
}
return s;
}
public static void main(String[] args) {
System.out.println(getNumber(new int[] {2}));
System.out.println(getNumber(new int[] {1, 2}));
System.out.println(getNumber(new int[] {1, 3, 2}));
System.out.println(getNumber(new int[] {1, 1, 2}));
System.out.println(getNumber(new int[] {1, 3, 2, 5, 7, 4, 5, 4}));
System.out.println(getNumber(new int[] {1, 1, 2, 2, 3, 3, 4, 4, 5, 5}));
}
}
最近开始关注golang和swift,两种语言有很多共通之处。golang没有class,还是不免有些不适。
package main
import "fmt"
func getNumber(types []int) int {
var s = 0
var p = 0
var c = make([]int, len(types))
for _, value := range types {
if value <= len(types) {
c[value-1] += 1
}
}
for _, i := range c {
if i == 0 {
return s
} else {
if s == 0 {
s = i
p = i
} else {
p *= i
s += p
}
}
}
return s
}
func main() {
fmt.Println(getNumber([]int {2}))
fmt.Println(getNumber([]int {1, 2}))
fmt.Println(getNumber([]int {1, 3, 2}))
fmt.Println(getNumber([]int {1, 1, 2}))
fmt.Println(getNumber([]int {1, 3, 2, 5, 7, 4, 5, 4}))
fmt.Println(getNumber([]int {1, 1, 2, 2, 3, 3, 4, 4, 5, 5}))
}
代码中主要是数组相关操作。相对而言,Python 最灵活。Golang 中采用 Slice 语法,与同为C系语言的Java颇为接近。
GetNumber的实现(Python & Java & Golang)的更多相关文章
- Python与Golang协程异同
背景知识 这里先给出一些常用的知识点简要说明,以便理解后面的文章内容. 进程的定义: 进程,是计算机中已运行程序的实体.程序本身只是指令.数据及其组织形式的描述,进程才是程序的真正运行实例. 线程的定 ...
- paip.判断字符是否中文与以及判读是否是汉字uapi python java php
paip.判断字符是否中文与以及判读是否是汉字uapi python java php ##判断中文的原理 注意: 中文与汉字CJKV 的区别..日本,韩国,新加坡,古越南等国家也用汉字,但不是中 ...
- paip.截取字符串byLastDot方法总结uapi python java php c# 总结
paip.截取字符串byLastDot方法总结uapi python java php c# 总结 ========uapi left_byLastDot right_byLastDot 目前 ...
- paip.文件目录操作uAPI php python java对照
paip.文件目录操作uAPI php python java对照 chdir -- 改变目录 chroot -- 改变根目录 dir -- directory 类 closedir -- 关闭目录句 ...
- 第一章.java&golang的区别之:闭包
对于golang一直存有觊觎之心,但一直苦于没有下定决心去学习研究,最近开始接触golang.就我个人来说,学习golang的原动力是因为想要站在java语言之外来审视java和其它语言的区别,再就是 ...
- vim python和golang开发环境配置
首先在-下新建目录.vim和配置文件.vimrc,.vimrc内容如下: syntax on set nocompatible filetype off set rtp+=~/.vim/bundle/ ...
- 深入浅出爬虫之道: Python、Golang与GraphQuery的对比
深入浅出爬虫之道: Python.Golang与GraphQuery的对比 本文将分别使用 Python ,Golang 以及 GraphQuery 来解析某网站的 素材详情页面 ,这个页面的特色是具 ...
- 十大经典排序算法(Python,Java实现)
参照:https://www.cnblogs.com/wuxinyan/p/8615127.html https://www.cnblogs.com/onepixel/articles/7674659 ...
- [Python+Java双语版自动化测试(接口测试+Web+App+性能+CICD)
[Python+Java双语版自动化测试(接口测试+Web+App+性能+CICD)开学典礼](https://ke.qq.com/course/453802)**测试交流群:549376944**0 ...
随机推荐
- BZOJ5461 PKUWC2018Minimax(概率期望+线段树合并+动态规划)
离散化后,容易想到设f[i][j]为i节点权值为j的概率,不妨设j权值在左子树,则有f[i][j]=f[lson][j](pi·f[rson][1~j]+(1-pi)·f[rson][j~m]). 考 ...
- sql server 小技巧 集锦
sql server 小技巧(1) 导入csv数据到sql server sql server 小技巧(2) 删除sql server中重复的数据 sql server 小技巧(3) SQL Serv ...
- HDU 5574 Colorful Tree
• 给出一棵树,每个点有初始的颜色,支持两种操作• 将一个点的子树染成一种给定颜色• 问一个点的子树里有几种不同的颜色 •
- mycat 入门教程
mycat 入门教程 之前已经对mycat的配置进行了详细记得介绍,下面就是一个mycat分库的小例子 schema.xml配置 <?xml version="1.0"?&g ...
- RabbitMQ 客户端开发向导
准备工作:composer 引入 php-amqplib 说明:本文说明基于 Java(主要说明原理),实现使用 php RabbitMQ Java 客户端使用 com.rabbitmq.client ...
- learning hive学习笔记
http://note.youdao.com/noteshare?id=58f314d67b3a04caac36221a9a046a13
- 枚举类型---java基础代码
package com.mon11.day4; /** * 类说明 :定义枚举 * @author 作者 : chenyanlong * @version 创建时间:2017年11月4日 */ pub ...
- 说说Cookie和Session
Session和Cookie在网站开发中是用来保存用户与后端服务器的交互状态.它们有各自的缺点和优点.而且,他们的优点和应用场景是对立的. Cookie 完整地描述:当一个用户通过HTTP访问一个 ...
- 何凯文每日一句打卡||DAY12
- js 语法高亮插件之 Prism.js
之前也介绍过几款语法高亮插件<为博客园选择一个小巧霸气的语法高亮插件>以及关于他们的综合性能<再议 语法高亮插件的选择>.今天在小影志博客看到<使用 Prism.js 实 ...