`

最近面试时候碰到的算法题目,自己写一下,顺便和大家交流下groovy的语法糖

阅读更多

题目都比较简单——用什么语言写,都不是重点——笔试中我都是狂省略式写法的

 

   1.上周五面试时候要写一个生产者消费者的例子——网上一堆的,我用Groovy写一个

 

 

import java.util.concurrent.*

def q = new ArrayBlockingQueue(10)

// Productor
Thread.start{
	10.times{
		q << new Random().nextInt(100)
		sleep(1000 * 3)
	}
}

// Consumer
Thread.start{
	8.times{
		def obj = q.take()
		println obj?:'Nothing keep waiting.'
		sleep(1000 * 2)
	}
}

 

2. 有一个整数数组,其中除了0,其他的数字均不重复,写一个程序,随即取出5个数字,并判断该5个数字是否相邻,其中0可以变成任何整数。

 

 

def is_adj = {arr ->
	def r = new Random()
	def ll = []
	5.times{
		ll << arr[r.nextInt(arr.size())]
	}

	ll = ll.unique() - [0]
	return ll.max() - ll.min() < 5
}

def arr = (10..25) + (1..5).collect{0}
println is_adj(arr)

 

3. 给一个字符串(只有字母),写个方法返回字符串,使得每一个字母按照下列变化规则——

 

   A-Z B-Y...Z-A a-z...z-a

 

def transf(String str){
	return str.collect{
		(char)((int)it >= 97 ? (97*2-(int)it+25) : (65*2-(int)it+25))
	}.join('')
}
println transf('ABCcba')

 

 

4. 还有在je上发现的——http://www.iteye.com/topic/545378

 

一个画图程序 要求打印出 

Java代码 
  1. int i=5;  
  2. 1  2  3  4  5  
  3. 16 17 18 19 6  
  4. 15 24 25 20 7  
  5. 14 23 22 21 8  
  6. 13 12 11 10 9  
  7.   
  8. int i=6  
  9. 1  2  3  4  5   6  
  10. 20 21 22 23 24  7  
  11. 19 32 33 34 25  8  
  12. 18 31 36 35 26  9  
  13. 17 30 29 28 27 10  
  14. 16 15 14 13 12 11  

 

 

 

def set = {num, matrix, len, left ->
	int begin = 0 // 这一圈的开始补值
	if(left){
		(1..left).each{
			begin += (len + it * 2 - 1) * 4
		}
	}

	if(num <= len) // 顶行
		matrix[0 + left][num + left - 1] = begin + num
	else if(num < len * 2) // 右列
		matrix[num-len+left][len-1+left] = begin + num 
	else if(num < len * 3 - 1) // 底行
		matrix[len-1+left][len * 3 - 2 - num + left] = begin + num
	else // 左列
		matrix[len-1-(num-3*len+2)+left][0+left] = begin + num
}

int n = 25
int[][] matrix = new int[n][n]
int left = 0 // 一圈一圈的,表示第几圈
for(int k = n; k > 0; k = k - 2){
	(1..4*(k-1)).each{set(it, matrix, k, left)} // 分别把数填进去
	left++
}

matrix.each{
	println it
}
 

如果哪位童鞋最近找工作,笔试中有什么算法题,可以分享出来呵

分享到:
评论
9 楼 congdepeng 2011-03-22  
tterry 写道
groovy其实还真不错,  不明白很多人为什么看不起她



没有人看不起groovy啊,只是语言而已。

我以前也学过groovy,写了一个小工具,现在业余在学Python。
8 楼 key232323 2011-03-22  
superobin 写道
回旋矩阵还可以简化,主要是对步进方向的判断影响了代码的美观~:
步进公式:
			x += (2 - d) * (d & 1);
			y += (1 - d) * ((d + 1) & 1);

其中d为方向 上 右 下 左 分别为 0 1 2 3


强——我试试(平时对位操作根本就不了解)。谢谢
7 楼 tterry 2011-03-22  
groovy其实还真不错,  不明白很多人为什么看不起她
6 楼 dsjt 2011-03-22  
呵呵,说明一下比较好!
5 楼 superobin 2011-03-22  
回旋矩阵还可以简化,主要是对步进方向的判断影响了代码的美观~:
步进公式:
			x += (2 - d) * (d & 1);
			y += (1 - d) * ((d + 1) & 1);

其中d为方向 上 右 下 左 分别为 0 1 2 3
4 楼 liheping17 2011-03-21  
不会Groovy
3 楼 congdepeng 2011-03-21  
seagod.wong 写道
你这是给自己记录呢就发博客

想给别人看呢就写明白点。

有几个像我这么好心的给你说明这些 都在心里骂你呢




你太厚道了,呵呵,就是这样!
2 楼 key232323 2011-03-21  
seagod.wong 写道
你这是给自己记录呢就发博客

想给别人看呢就写明白点。

有几个像我这么好心的给你说明这些 都在心里骂你呢



悲剧——怪不得我的帖子都是隐藏的多——只是简单抱着分享面试算法题而已——

下次我就注意了。
1 楼 seagod.wong 2011-03-21  
你这是给自己记录呢就发博客

想给别人看呢就写明白点。

有几个像我这么好心的给你说明这些 都在心里骂你呢

相关推荐

    groovy基础语法.pdf

    Groovy是一种基于Java虚拟机(JVM)的敏捷开发语言,它融合了Python、Ruby和Smalltalk等语言的特性。Groovy语言能够与Java无缝集成,并且支持动态语言特性,包括动态类型、闭包和元编程等。Groovy的语法非常接近Java...

    groovy基础语法.doc

    在 Groovy 中,类型对于值、属性、方法和闭包参数、返回值都是可有可无的,只有在给定值的时候,才会决定它的类型。 多态 由于使用了动态类型,不需要继承就可以得到多态的全部功能。例如,我们可以定义两个 ...

    Gradle文件配置及groovy语法介绍.mp4

    Gradle文件配置及groovy语法介绍

    EditPlus3.12 540 SN及Groovy语法文件

    《EditPlus3.12 540 SN及Groovy语法文件详解》 在IT行业中,高效的代码编辑器是开发者的重要工具,EditPlus便是其中的一款经典之作。本文将深入探讨EditPlus 3.12 540版本的序列号(SN)问题以及与Groovy语言相关的...

    groovy语法掘金1

    在本文中,我们将深入探讨Groovy的高级语法,特别是与JSON和XML操作相关的部分。 首先,我们来看看Groovy如何处理JSON数据。Groovy提供了一个内置的`JsonSlurper`类,用于将JSON字符串解析成Groovy的对象。例如,...

    Groovy语法系列教程之注释.zip

    Groovy是一种基于Java平台的动态、灵活的编程语言,它扩展了Java的语法,提供了简洁、易读的代码风格,同时保持与Java的完全互操作性。本教程将深入探讨Groovy中的注释机制,这对于理解和维护代码至关重要。 在...

    Groovy语法系列教程之布尔(五).pdf

    Groovy是基于Java平台的动态语言,它采用了很多Java的语法元素,但也进行了一定的改进和增强。本篇教程是关于Groovy编程语言中布尔(Boolean)类型的详细讲解,其中涉及到布尔类型的定义、使用以及Groovy对于布尔值...

    editplus显示groovy的语法(语法高亮)

    标题提到的"editplus显示groovy的语法(语法高亮)",意味着我们需要为EditPlus添加Groovy语言的语法高亮文件,以便在编辑Groovy代码时获得更好的可读性和视觉体验。语法高亮能够帮助开发者更快地识别代码中的关键元素...

    Groovy语法系列教程之字符串(三).pdf

    ### Groovy语法系列教程之字符串(三) #### Groovy语言简介 Groovy是基于Java平台的一种敏捷开发语言,它具有动态语言的特性,同时又能与Java无缝集成。Groovy的设计哲学是让程序员能够用更少的代码做更多的事情,...

    Groovy语法&Gradle配置学习笔记

    Groovy是一种基于Java平台的动态编程语言,它在设计时考虑了简洁性和可读性,使得开发者能够更高效地编写脚本和构建工具。Groovy语法借鉴了多种语言的特性,如Python、Ruby和Java,这使得Java开发人员能够轻松上手。...

    Groovy安装、语法和事例文件

    Groovy是一种基于Java平台的动态编程语言,它与Java语法高度兼容,但提供了更简洁、灵活的语法,使得开发过程更为高效。Groovy是许多Java开发者选择用来编写脚本、构建工具、自动化任务以及创建富有表现力的代码的...

    Groovy入门教程[参照].pdf

    Groovy 是一种基于 Java 语言的脚本语言,运行在 JVM 中,语法与 Java 相似,但抛弃了 Java 的一些烦琐的语法规则,提供了更加简洁和灵活的编程体验。 Groovy 的特点 1. 简洁的语法:Groovy 语法简洁,减少了代码...

    精通 Groovy--下一代开发语言

    虽然 Groovy 的语法源于 Smalltalk 和 Ruby 这类语言的理念,但是可以将它想像成 Java 语言的一种更加简单、表达能力更强的变体。(在这点上,Ruby 与 Groovy 不同,因为它的语法与 Java 语法差异很大。) 许多 Java...

    groovy语法1

    默认情况下,Groovy导入了一些常见的Java和Groovy包,使得开发者在编写代码时不需要显式导入。这些默认导入包括`java.io.*`、`java.lang.*`、`java.util.*`等,以及Groovy特定的`groovy.lang.*`和`groovy.util.*`。 ...

    groovy常用Script

    Groovy是一种基于Java平台的动态编程语言,它与Java语法高度兼容,但提供了更简洁的语法和更强大的脚本能力。对于Groovy初学者来说,理解其基本语法和特性是至关重要的。以下是一些从给定的压缩包文件名中可以推测出...

    Groovy语法系列教程之数字(四).pdf

    Groovy语言是基于Java平台的一种敏捷开发语言,它是对Java语法的一种扩展和简化,目的是提供一种更加灵活和简洁的编程方式。本教程系列主要介绍Groovy编程语言的语法特点,本篇将针对数字相关的语法进行详细说明。 ...

Global site tag (gtag.js) - Google Analytics