使用java(groovy来写) 毕竟目的是为了代码的精短
自己做练习的 不一定是对的 如有错误欢迎拍脸
48、找出数组中唯一的重复元素 1-1000放在含有1001个元素的数组中,只有唯一的一个元素值重复,其它均只出现一次. |
来自:http://blog.csdn.net/v_JULY_v/article/details/6234496 |
解法 其实很简单的...把那1001个元素加起来然后减去1+2+...+1000就可以了 解法: def arr=new int[1001]; arr=arr.collect({i -> -1}) //初始化数据 def r=new Random(); int dup=r.nextInt(1000)+1; //选中一个元素重复 1~1000 arr[r.nextInt(arr.size())]=dup; //确定重复的位置 for(def i=1;i<=1000;i++) { def loc=r.nextInt(arr.size()); while(arr[loc]!=-1) { loc=(loc+1)%arr.size(); } arr[loc]=i; } println dup arr.inject(0,{sum,value -> sum+value})-(1+1000)/2*1000
|
3、给出一个函数来输出一个字符串的所有排列。 |
来自:http://blog.csdn.net/v_JULY_v/article/details/6234496 |
代码直接输出 所以字符串如果有重复的元素就会有重复的结果 长一点的字符串会让这个程序挂掉,,
void sort(remain,newString){ if(remain=="") println newString for(int i=0;i<remain.length();i++) { sort(remain-remain[i],newString+remain[i]) } } sort("AbcDe","") 话说groovy中对String + -操作的支持真的很方便啊... |
|
来自:http://blog.csdn.net/v_july_v/article/details/11921021#comments |
原文使用C++的吧 我还是用groovy来做 这个是个很经典的压缩算法 叫什么来着忘记了.. 只要注意最后还需要一次判断就好了 def stringZip= { s-> def oldC="" def count=0 def newString="" for(def i=0;i<s.length();i++) { if(s[i]==oldC) { count++; } if(s[i]!=oldC){ if(count<=1){ newString+=oldC; }else{ newString+=count+oldC; } count=1; oldC=s[i] } } //这边额外多一次 if(count<=1){ newString+=oldC; }else{ newString+=count+oldC; } return newString } println stringZip("cccddecc") println stringZip("adef") println stringZip("xxxyyyyyyz") println stringZip("pppppppp")
|