- jahu
- 等级: 初级会员
- 性别:
- 文章: 59
- 积分: 80
- 来自: 长沙
|
发表时间:2013-10-16
最后修改:2013-10-21
原文是:
求从n个数组任意选取一个元素的所有组合,对于这个问题,我们在直观上感觉很容易,但是用程序实现时则发现用for循环解决不了问题,因为n是随意的。
这题目的意思的,,定义N个数组,数组里面的大小不固定。每个数组取一个元素进行组合,列出所有的情况
百度了,谷歌了,都是用的迭代。。
请使用for,来解决这个问题。反驳题目。
还有这道题目啊啊啊啊
在来一道,听说是谷歌的面试:
如果有一个等差数组,然后对这个数组里面的每个元素做如下操作
1. 如果这个元素是偶数,除以2, 然后得到的数字再分析是否是偶数,如果还是,继续除2,一直除到是奇数, 2. 如果这个元素是奇数,那么就保持原样 这样就得到了另外一个数组, 现在要求根据这个变换后的数组,能否得到变换前的数组,请描述下思路. 比如现在有个数组{1,2,3,4},变换后是{1,1,3,1},那么需要根据{1,1,3,1},得到1,2,3,4.
请给出多种,答案。
得出等差的方式,有很多。
前3天,没有时间做。今天中午抽了点时间做好了。
多谢,一个伙计,,盒子。
在写的时候,遇到的一些问题。
第一,如果数组长度不固定,怎么处理。
第二,数组是自增还是自减。
第三,基数是偶数还是奇数。
第四,遇到特殊无解怎么处理。
源码在第二页第4楼。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
返回顶楼 |
|
|
- jahu
- 等级: 初级会员
- 性别:
- 文章: 59
- 积分: 80
- 来自: 长沙
|
第二道题:
第一种解法:
public static String arrayToString(int[] inValue){
StringBuilder sb = new StringBuilder();
sb.append('[');
for ( int i : inValue) {
sb.append(i).append(',').append(' ');
}
sb.setCharAt(sb.length()-1, ' ');
sb.setCharAt(sb.length()-2, ' ');
return sb.append("]").toString();
}
public static void test1(){
Random rd = new Random();
/*int shu = rd.nextInt(5)*2-1 ;
int shuOne = rd.nextInt(3)*2+8;*/
int shu = 1,shuOne = 4;
int shuTwo = 0 , yushu = 0;
boolean b = false;
int[] inArray = new int[shuOne],inArrayOne = new int[shuOne];
for(int i = 0 ; i<shuOne ; i++){
shuTwo = shu*i+1;
inArray[i] = shuTwo;
if(b){
for( ; ; ){
yushu = shuTwo%2;
if(yushu == 0 ){
shuTwo = shuTwo/2;
}else{
inArrayOne[i] = shuTwo;
break;
}
}
b= false;
}else{
b = true;
inArrayOne[i] = shuTwo;
}
}
System.out.println(arrayToString(inArray)) ;
System.out.println(arrayToString(inArrayOne)) ;
int[] inArrayTwo = new int[shuOne];
System.arraycopy(inArrayOne, 0, inArrayTwo, 0, shuOne);
for(int i = 1 ; i<shuOne ; i = i+2){
inArrayTwo[i] = shu*i+1;
}
System.out.println(arrayToString(inArrayTwo)) ;
}
|
返回顶楼 |
|
|
- jackra
- 等级: 初级会员
- 性别:
- 文章: 350
- 积分: 30
- 来自: 北京
|
我去,你到底想表达神马?
|
返回顶楼 |
|
|
- jahu
- 等级: 初级会员
- 性别:
- 文章: 59
- 积分: 80
- 来自: 长沙
|
jackra 写道 我去,你到底想表达神马?
有一点是,小小的炫耀。
有,是看看,,有几个人能做出来。。是不是只会百度,谷歌。
有,是想知道,算法世界有多大。
|
返回顶楼 |
|
|
- jahu
- 等级: 初级会员
- 性别:
- 文章: 59
- 积分: 80
- 来自: 长沙
|
解法2:
无等差数,自己求等差。
int[] intArray = new int[]{1,1,3,1,5};
int dengCha = (intArray[2] - intArray[0])/2;
for(int i = 1 ; i<intArray.length ; i = i+2){
intArray[i] = dengCha*i+1;
}
System.out.println(arrayToString(intArray));
|
返回顶楼 |
|
|
- wifi52
- 等级: 初级会员
- 文章: 1
- 积分: 30
|
发表时间:2013-10-17
最后修改:2013-10-17
第二道题, 例举一个反例
如果计算规则真如同你所说的那样
[2, 4, 6, 8]
[4, 8, 12, 16]
怎样才能恢复成原先的样子?
第二道题这里有讨论了
http://www.iteye.com/topic/1056568
|
返回顶楼 |
|
|
- jahu
- 等级: 初级会员
- 性别:
- 文章: 59
- 积分: 80
- 来自: 长沙
|
wifi52 写道 第二道题, 例举一个反例
如果计算规则真如同你所说的那样
[2, 4, 6, 8]
[4, 8, 12, 16]
怎样才能恢复成原先的样子?
第二道题这里有讨论了
http://www.iteye.com/topic/1056568
如果递增数,是而的2的次方,那么这道题是无解的。。而且只要递增数是2的倍数,那么得到结果,等于2的倍数-1,的递增数的结果。。
|
返回顶楼 |
|
|
- wangfufu1019
- 等级: 初级会员
- 性别:
- 文章: 8
- 积分: 30
- 来自: 上海
|
jahu 写道 wifi52 写道 第二道题, 例举一个反例
如果计算规则真如同你所说的那样
[2, 4, 6, 8]
[4, 8, 12, 16]
怎样才能恢复成原先的样子?
第二道题这里有讨论了
http://www.iteye.com/topic/1056568
如果递增数,是而的2的次方,那么这道题是无解的。。而且只要递增数是2的倍数,那么得到结果,等于2的倍数-1,的递增数的结果。。
关于第二题,我的想法是:
新建一个对应的数组,这个数据里面放的是对应每个无数的2的次方的值
如:
{1,2,3,4},变换后是{1,1,3,1}
对应为{0,1,0,2};
|
返回顶楼 |
|
|
- id.alex
- 等级: 初级会员
- 文章: 35
- 积分: 50
|
喜欢这类题的可以去 http://hero.pongo.cn/home/index
|
返回顶楼 |
|
|
- 易水寒vn
- 等级: 初级会员
- 文章: 1
- 积分: 30
|
第一个题目,可以定义一个数组迭代器类完成 单纯for+数组,不行吧
|
返回顶楼 |
|
|