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 ...
随机推荐
- js手写俄罗斯方块
代码如下 html: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> &l ...
- 百度搜索 “Java面试题” 前200页(面试必看)
前言 本文中的题目来源于网上的一篇文章<百度搜索 "Java面试题" 前200页>,但该文章里面只有题目,没有答案.因此,我整理了一些答案发布于本文.本文整理答案的原则 ...
- bzoj 4034: [HAOI2015]树上操作 (树剖+线段树 子树操作)
4034: [HAOI2015]树上操作 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 6779 Solved: 2275[Submit][Stat ...
- 本地开启apache虚拟服务器
一般来说,服务器是可以托管多个网站的,只要服务器开启虚拟主机的功能,原理是根据来源的host进行判断,不同的域名实现不同的文件访问,这样就可以实现一个服务器托管不同网站了,只要服务器的性能和带宽足够强 ...
- (转)Maven学习总结(四)——Maven核心概念
孤傲苍狼只为成功找方法,不为失败找借口! Maven学习总结(四)——Maven核心概念 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Mav ...
- 《剑指offer》— JavaScript(25)复杂链表的复制
复杂链表的复制 题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数 ...
- Zabbix应用六:Zabbix监控Redis
利用Zabbix监控Redis Zabbix监控redis就比较简单了,因为zabbix官方提供了监控redis的模版和脚本,而且脚本有nodejs和python两种,下载地址:https://git ...
- python数字转换为字符串的两种方式
主要包括两种形式进行转换: 第一种是str(),将值转换为用户便于阅读的形式: 另一种是repr(),将值转换为合法的python表达式. >>> print repr(" ...
- 运行fdisk命令时,弹出 bash:fdisk:command not found
原因:命令fdisk 不在你的命令搜索路径中 第一种解决办法,将fdisk添加到你的命令搜索路径中 首先查看你当前的命令搜索路径: [root@host sbin]# echo $PATH/usr/k ...
- 如何设置Ultraedit自动换行
有时候这会非常麻烦, 要让Ultraedit自动换行请按发下方法: 1. 点击菜单栏的"高级→配置",找到"编辑器→自动换行/制表符设置". 2. 然后,把&q ...