论坛首页 Java企业应用论坛

一道算法题目,挑战自己。

浏览 13158 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间: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楼。

   发表时间:2013-10-16  

第二道题:

    第一种解法:

                     

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)) ;
	}

 

0 请登录后投票
   发表时间:2013-10-16  
我去,你到底想表达神马?
0 请登录后投票
   发表时间:2013-10-16  
jackra 写道
我去,你到底想表达神马?

有一点是,小小的炫耀。
有,是看看,,有几个人能做出来。。是不是只会百度,谷歌。
有,是想知道,算法世界有多大。
0 请登录后投票
   发表时间:2013-10-16  

解法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));

 

0 请登录后投票
   发表时间:2013-10-17   最后修改:2013-10-17
第二道题, 例举一个反例

如果计算规则真如同你所说的那样
[2, 4, 6, 8]
[4, 8, 12, 16]
怎样才能恢复成原先的样子?

第二道题这里有讨论了

http://www.iteye.com/topic/1056568
0 请登录后投票
   发表时间:2013-10-17  
wifi52 写道
第二道题, 例举一个反例

如果计算规则真如同你所说的那样
[2, 4, 6, 8]
[4, 8, 12, 16]
怎样才能恢复成原先的样子?

第二道题这里有讨论了

http://www.iteye.com/topic/1056568


如果递增数,是而的2的次方,那么这道题是无解的。。而且只要递增数是2的倍数,那么得到结果,等于2的倍数-1,的递增数的结果。。
0 请登录后投票
   发表时间:2013-10-17  
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};
0 请登录后投票
   发表时间:2013-10-18  
喜欢这类题的可以去
http://hero.pongo.cn/home/index
0 请登录后投票
   发表时间:2013-10-18  
第一个题目,可以定义一个数组迭代器类完成
单纯for+数组,不行吧
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics