java数组转list问题

JAVA数组初始化及应用_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
JAVA数组初始化及应用
上传于|0|0|暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩9页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢问题:定义一个一维数组,其中存储随机生成0以内的整数,统计每个整数出现的次数。
会的尽量详细的,用java编写,不要用其他的语言,我先谢啦……
int numArray[] = new int[100];
for(int j = 0; j < 100; j++){
numArray[j] = 0;
for(int i = 0; i < 1000; i++){
numArray[Math.random()*100]++;
for(int k = 0; k < 100; k++){
System.out.println("The count of " + k + " is " + numArray[k]);
n/=10 配合用来取出每一个位置上的数字
2和3如果不用 break
那么程序会顺序执行下去 C语言就是这样设计的 没有什么道理可...
使用java.util.Vector就可以了 ,不过此类不能存储基本数据类型,要使用对应的类替代,如int与Integer,float与Float等等。
就是String[] str = new String[5]; //创建一个长度为5的String(字符串)型的一维数组
#丽枫酒店(麗枫LAVANDE三亚解放路第一市场店)#怎么只有一个房型?其他的房型呢?
答: 这个要设计到JNI的开发,就是用Java来调用C语言的函数库,还要编写缓冲器来解决传输问题,还有就是网络协议一定要了解,做的时候要用多线程来控制你所有的缓冲器,...
答: 所谓的网络编程,不论c还是java,本质上都是通过socket进行数据传输;
一般情况下可以使用的传输协议有tcp、udp、ftp等等,这些协议为网络变成提供...
大家还关注
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区
相关问答:123456789101112131415Java数组优缺点浅谈 - 赫家旺 - ITeye博客
博客分类:
数组是Java语言的基本知识之一,在深入学习Java基础后,我们都知道那些容器,在之后,在我们学习、工作的过程中基本就是使用容器了,很少很使用数组,那么为什么还要有数组呢,我也是今天才遇到这个问题,专门的找资料学习了一下。
数组与其他种类的容器之间的区别有三方面:效率、类型和保存基本类型的能力,当然现在有泛型,保存类型的区别已经不大了。
数组较容器,最大的优点就是效率。在Java中,数组是一种效率最高的存储和随机访问对象引用序列的方式,数组就是一个简单的线性序列,这使得元素访问非常快速,无论使用哪种类型的数组,数组标识符其实只是一个引用,指向在堆中创建的一个真实对象,这个(数组)对象用以保存指向其他对象的引用。数组是第一级对象,可以作为数组初始化语句的一部分隐式地创建此对象,或者用New表达式显示地创建。
数组的优点是效率高,但为此,所付出的代价就是数组对象的大小被固定。这也使得在工作中,数组并不实用。
所以我们应该优选容器,而不是数组。只有在已证明性能成为问题的时候,并且确定切换到数组对性能提高有帮助时,才应该将项目重构为使用数组,
莫欺少年穷Java
浏览: 86432 次
来自: 沈阳
在JDK 8中,Javadoc中添加了doclint,而这个工 ...
我也遇到这个问题了,不知道怎么解决。。。
你自己验证过吗?可以运行出结果吗?1878人阅读
java基础(27)
1.&&&&&&要求输入一组英文字符串数组,让这个字符串数组中前面一个元素的最后一个字母和下一个元素的首位上的字母相等,并且每个元素的长度大于等于2且小于等于100
publicstatic void main(String[] a )&& {
&&&&&&&&&&&&&&&&&& &Two t = new Two();
&&&&&&&&&&&&&&&&&& &System.out.println(t.s());&&&&&& }
&&&&&&&& &public int s(){&&&&&&&&&&
&&&&&&&& //&&&&& String[]args={&abcd&,&def&,&fgr&,&rtg&};
&&&&&&&&&&&&&&&&&& &String[] args={&abcd&,&def&,&A&,&rtg&};
&&&&&& for (int i=0;i&args.length-1;i&#43;&#43;){
&&& &&&&&&&& &&&boolean b1=args[i].matches(&[a-z]&#43;&);
&&& &&&&&&&& &&&boolean b2 = args[i].length()&=2 ;
&&& &&&&&&&& &&&boolean b3 = args[i].length()&=100 ; &&
&&& &&&&&&&& &&&if(b1&&b2&&b3){
&&& &&&&&&&&&&&&&&&&&& &char& c1= args[i].charAt(args[i].length()-1);
&&& &&&&&&&&&&&&&&&&&& &char&&c2 = args[i&#43;1].charAt(0);
&&& &&&&&&&&&&&&&&&&&& &&&if(c1==c2){&&& &&&&&&&&&&&&&&&&&&& &&b= Two.show1();&&&& &&&&&&&&&&&&&&&&&&&&&&&&&& &&&&
&&& &&&&&&&&&&&&&&&&&& &&&}else{&&&&b=& Two.show2();
&&& &&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&& &&&}
&&& &&&&&&&& &&&}else{
&&& &&&&&&&&&&&&&&&&&& &&&b=&Two.show2();
&&& &&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&& &&&}&&&&&&}
&&&&&& if(b==true){
&&& &&&&&&&& &&&return 1;
&&&&&& }else{
&&& &&&&&&&& &&&return -1;&&&&&& }&&&
&&&&&&&& &}
&&&&&&&& public static boolean show1(){
&&&&&&&&&&&&&&&&&&
&&&&&&&& }
&&&&&&&& public static boolean show2(){
&&&&&&&&&&&&&&&&&&
&&&&&&&& }&
2、快速找出一个数组中的最大数、第二大数。
&&&& 思路:如果当前元素大于最大数 max,则让第二大数等于原来的最大数 max,再把当前元素的&#20540;赋给 max。如果当前的元素大于等于第二大数secondMax的&#20540;而小于最大数max的&#20540;,则要把当前元素的&#20540;赋给 secondMax。
public static void main(String[] a1 )&& {
&&&&&&&&&&&&&&&&&& &Two t = new Two();
&&&&&&&&&&&&&&&&&& &int[] a={12,233,,1,234};
&&&&&&&&&&&&&&&&&& &pare(a);
&&&&&&&& }
&&&&&&&& &public void compare(int[] a){
&&&&&&&&&&&&&&&&&& &int max = a[0];
&&&&&&&&&&&&&&&&&& &int max2 = a[a.length-1];
&&&&&&&&&&&&&&&&&& &for(int i=0;i&a.i&#43;&#43;){
&&&&&&&&&&&&&&&&&&&&&&&&&&& &if(a[i]&max){
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &max2 =
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &max = a[i];
&&&&&&&&&&&&&&&&&&&&&&&&&&& &}else if(a[i]&max2 && a[i]&max){
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &max2 = a[i];&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&& &System.out.println(&这个数组最大的是:&&#43;max);
&&&&&&&&&&&&&&&&&& &System.out.println(&这个数组第二大的是:&&#43;max2);&&&&&& }
public static void main(String[] a1 )&& {
&&&&&&&&&&&&&&&&&& &Two t = new Two();
&&&&&&&&&&&&&&&&&& &int[] a={12,233,,1,234};
&&&&&&&&&&&&&&&&&& &java.util.Arrays.sort(a);
System.out.println(java.util.Arrays.toString(a));//输出数组可以不用遍历
&&&&&&&&&&&&&&&&&& &System.out.println(&这个数组最大的是:&&#43;a[a.length-1]);
&&&&&&&&&&&&&&&&&& &System.out.println(&这个数组第二大的是:&&#43;a[a.length-2]);
&&&&&&&& }
3、试着用最小的比较次数去寻找数组中的最大&#20540;和最小&#20540;。
解法一:扫描一次数组找出最大&#20540;;再扫描一次数组找出最小&#20540;。比较次数2N-2
解法二:将数组中相邻的两个数分在一组,每次比较两个相邻的数,将较大&#20540;交换至这两个数的左边,较小&#20540;放于右边。对大者组扫描一次找出最大&#20540;,对小者组扫描一次找出最小&#20540;。
比较1.5N-2次,但需要改变数组结构
每次比较相邻两个数,较大者与MAX比较,较小者与MIN比较,找出最大&#20540;和最小&#20540;。
方法如下:先将一对元素互相进行比较,然后把最小&#20540;跟当前最小&#20540;进行比较,把最大&#20540;跟当前最大&#20540;进行比较。因此每两个元素需要3次比较。如果n为奇数,那么比较的次数是3*(n/2)次比较。如果n为偶数,那么比较的次数是3n/2-2次比较。因此,不管是n是奇数还是偶数,比较的次数至多是1.5n :
public static void main(String[] a1 )&& {
&&&&&&&&&&&&&&&&&& &Two t = new Two();
&&&&&&&&&&&&&&&&&& &int[] a={12,233,,1,234};
&&&&&&&&&&&&&&&&&& &pare(a);&&&&&&&& }
&&&&&&&& & public void compare(int[] a){
&&&&&&&&&&&&&&&&&& &int max = a[0];
&&&&&&&&&&&&&&&&&& &int min = a[a.length-1];
&&&&&&&&&&&&&&&&&& &for(int i=0;i&a.length-1;i&#43;&#43;){
&&&&&&&&&&&&&&&&&&&&&&&&&&& &if(a[i]&a[i&#43;1]){
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &if(a[i]&max){
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &max = a[i];
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &}
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &if(a[i&#43;1]&min){
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &min = a[i&#43;1];&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&& &System.out.println(&这个数组的最大&#20540;是:&&#43;max);
&&&&&&&&&&&&&&&&&& &System.out.println(&这个数组的最小&#20540;是:&&#43;min);
&&&&&&&& &}
4、重排问题
给定含有n个元素的整型数组a,其中包括0元素和非0元素,对数组进行排序,要求:
1、排序后所有0元素在前,所有非零元素在后,且非零元素排序前后相对位置不变
2、不能使用额外存储空间
输入 0、3、0、2、1、0、0
输出 0、0、0、0、3、2、1
分析: 如果当前位置上为0,他前面的不为0 ,则交换
public static void main(String[] a1 )&& {
&&&&&&&&&&&&&&&&&& int[]a ={0,1,2,0,3,0,2,0,0};
&&&&&&&&&&&&&&&&&& for(intj=0;j&a.j&#43;&#43;) {
&&&&&&&&&&&&&&&&&&&&&&&&&&& for(inti=1;i&a.i&#43;&#43;){&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& if(a[i]== 0&& a[i-1]!=0){
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& a[i]=a[i-1];
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& a[i-1]=0;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&& System.out.println(java.util.Arrays.toString(a));
&&&&&&&& &}
5、找出绝对&#20540;最小的元素
给定一个有序整数序列(非递减序),可能包含负数,找出其中绝对&#20540;最小的元素,比如给定序列 -5、-3、-1、2、8 则返回1。
分析:由于给定序列是有序的,而这又是搜索问题,所以首先想到二分搜索法,只不过这个二分法比普通的二分法稍微麻烦点,可以分为下面几种情况
&&& 如果给定的序列中所有的数都是正数,那么数组的第一个元素即是结果。
&&& 如果给定的序列中所有的数都是负数,那么数组的最后一个元素即是结果。
&&& 如果给定的序列中既有正数又有负数,那么绝对&#20540;的最小&#20540;一定出现在正数和负数的分界处。
为什么?因为对于负数序列来说,右侧的数字比左侧的数字绝对&#20540;小,如上面的-5、-3、-1,而对于整整数来说,左边的数字绝对&#20540;小,比如上面的2、8,将这个思想用于二分搜索,可先判断中间元素和两侧元素的符号,然后根据符号决定搜索区间,逐步缩小搜索区间,直到只剩下两个元素。
单独设置一个函数用来判断两个整数的符号是否相同
public static void main(String[] a1 )&& {
&&&&&&&&&&&&&&&&&& int[]a ={-5,-3,12,-1,90,2,9};
&&&&&&&&&&&&&&&&&& int[]b = new int[a.length];
&&&&&&&&&&&&&&&&&& &for(int i=0;i&a.i&#43;&#43;){
&&&&&&&&&&&&&&&&&&&&&&&&&&& b[i]= Math.abs(a[i]);&&&&&&& & &&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&& &int minAbs = b[0];
&&&&&&&&&&&&&&&&&& &for(int i=0;i&b.i&#43;&#43;){
&&&&&&&&&&&&&&&&&&&&&&&&&&& &if(b[i]&minAbs){
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &minAbs = b[i];&&&&&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&& System.out.println(java.util.Arrays.toString(a));
&&&&&&&&&&&&&&&&&& System.out.println(java.util.Arrays.toString(b));
&&&&&&&&&&&&&&&&&& System.out.println(minAbs);&& }
6、从长度为n的数组(元素互不相同)中任意选择m个数的所有组合。
7、从长度为n的数组(元素有可能相同)中任意选择m个数的所有组合。
先对数组进行排序,然后设置一个标记pre,记录前一个选择的数字,然后进行比较。
import java.util.*;
public class& Two {
&&&&&&&& &public static void main(String[] a1 )&& {
&&&&&&&& &&&&& String[] data = {&1&,&2&, &2&,&3&, &4&, &5&};
&&&&&&&& &&&&&&& int num = 3;
&&&&&&&& &&&&&&& List&List&String&& result =parade(Arrays.asList(data), num);
&&&&&&&& &&&&&&&& for (List&String& x : result) {
&&&&&&&& &&&&&& &&&&&System.out.println(x);
&&&&&&&& &&&&&&& }&
&&&&&&&& &&&&&& /* //相当于
&&&&&&&& &&&&&&& for (int i=0;i&result.size();i&#43;&#43;) {
&&&&&&&& &&&&&&&&&&& System.out.println(result.get(i));
&&&&&&&& &&&&&&& }*/
&&&&&&&& &&&&&&&System.out.printf(&total:%s\n&, result.size());
&&&&&&&& &&& }&&&&&&&
&&&&&&&& &&& public static List&List&String&&parade(List&String& data, int num) {
&&&&&&&& &&&&&&& List&List&String&& result =new ArrayList&List&String&&();
&&&&&&&& &&&&&&& if (num == 1) { //只排一个元素的时候(递归结束条件)
&&&&&&&& &&&&&&&&&&& for (String s : data) {
&&&&&&&& &&&&&&&&&&&&&&& List&String& l = newArrayList&String&();
&&&&&&&& &&&&&&&&&&&&&&& l.add(s);
&&&&&&&& &&&&&&&&&&&&&&& result.add(l); //每个元素分别保存到结果集
&&&&&&&& &&&&&&&&&&& }
&&&&&&&& &&&&&&&&&&& //并返回结果集
&&&&&&&& &&&&&&& }
&&&&&&&& &&&&&&& for (int i=0; i&data.size(); i&#43;&#43;) {//num&1,即排多个元素的时候,循环
&&&&&&&& &&&&&&&&&&& List&String& list = newArrayList&String&(data);
&&&&&&&& &&& &&list.remove(i);//去掉当前循环的元素作为下次递归的参数,即剩余的元素做递归
&&&&&&&& &&&&&&&&&&& List&List&String&& sub= parade(list, num-1); //递归调用
&&&&&&&& &&&&&&&&&&& for (List&String& l : sub) {//然后循环递归得到的结果
&&&&&&&& &&&&&&&&&&&&&&& l.add(0, data.get(i)); //把当前元素排在每个结果的前面
&&&&&&&& &&&&&&&& &&&&&&&result.add(l); //并保存到结果集
&&&&&&&& &&&&&&&&&&& }
&&&&&&&& &&&&&&& }
&&&&&&&& &&&&&&& //最后返回结果集
&&&&&&&& &&& }
&&&&&&&& }
8、三色旗排序问题
假设有一根绳子,上面有一些红、白、蓝色的旗子。起初旗子的顺序是任意的,现在要求用最少的次数移动这些旗子,使得它们按照蓝、白、红的顺序排列。注意只能在绳子上操作,并且一次只能调换两个旗子。
public class Two {
&&&&&&&& publicstatic final char BLUE = 'b';
&&&&&&&& publicstatic final char RED = 'r';
&&&&&&&& publicstatic final char WHITE = 'w';
&&&&&&&& publicstatic final char[] color = { 'r', 'w', 'b', 'w', 'w', 'b', 'r', 'b', 'w', 'r'};
&&&&&&&& //交换彩旗的方法
&&&&&&&& publicstatic void SWAP(int x, int y) {
&&&&&&&&&&&&&&&&&& chartemp = color[x];
&&&&&&&&&&&&&&&&&& color[x]= color[y];
&&&&&&&&&&&&&&&&&& color[y]=
&&&&&&&& }
&&&&&&&& publicstatic void main(String[] a1) {
&&&&&&&&&&&&&&&&&& intbFlag = 0;
&&&&&&&&&&&&&&&&&& intwFlag = 0;
&&&&&&&&&&&&&&&&&& intrFlag = color.length - 1;
&&&&&&&&&&&&&&&&&& for(int i = 0; i & color. i&#43;&#43;) {
&&&&&&&&&&&&&&&&&&&&&&&&&&& System.out.print(color[i]);
&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&& System.out.println();
&&&&&&&&&&&&&&&&&& while(wFlag &= rFlag) {
&&&&&&&&&&&&&&&&&&&&&&&&&&& if(color[wFlag] == WHITE) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& wFlag&#43;&#43;;
&&&&&&&&&&&&&&&&&&&&&&&&&&& }else if (color[wFlag] == BLUE) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& SWAP(bFlag,wFlag);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& bFlag&#43;&#43;;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& wFlag&#43;&#43;;
&&&&&&&&&&&&&&&&&&&&&&&&&&& }else {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& while(wFlag & rFlag && color[rFlag] == RED) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& rFlag--;
&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&& }
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& SWAP(rFlag,wFlag);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& rFlag--;&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&& for(int i = 0; i & color. i&#43;&#43;) {
&&&&&&&&&&&&&&&&&&&&&&&&&&& System.out.print(color[i]);
&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&& System.out.println();&&&&&&& }}
9、一个int数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它。能否只用一个额外数组和少量其它空间实现。
分析:最原始的方法是检查每一个数 array[i] ,看是否左边的数都小于等于它,右边的数都大于等于它。这样做的话,要找出所有这样的数,时间复杂度为O(N^2)。
其实可以有更简单的方法,我们使用额外数组,比如rightMin[],来帮我们记录原始数组array[i]右边(包括自己)的最小&#20540;。假如原始数组为: array[] = {7, 10, 2, 6, 19, 22, 32}, 那么rightMin[] = {2, 2,2, 6, 19, 22, 32}. 也就是说,7右边的最小&#20540;为2, 2右边的最小&#20540;也是2。
有了这样一个额外数组,当我们从头开始遍历原始数组时,我们保存一个当前最大&#20540; max,如果当前最大&#20540;刚好等于rightMin[i],那么这个最大&#20540;一定满足条件,还是刚才的例子。
第一个&#20540;是7,最大&#20540;也是7,因为7 不等于 2,继续,
第二个&#20540;是10,最大&#20540;变成了10,但是10也不等于2,继续,
第三个&#20540;是2,最大&#20540;是10,但是10也不等于2,继续,
第四个&#20540;是6,最大&#20540;是10,但是10不等于6,继续,
第五个&#20540;是19,最大&#20540;变成了19,而且19也等于当前rightMin[4] = 19, 所以,满足条件。如此继续下去,后面的几个都满足。
public class Two {
&&&&&&&& publicstatic void main(String s[]) {
&&&&&&&&&&&&&&&&&& try{
&&&&&&&&&&&&&&&&&&&&&&&&&&& smallLarge(newint[] { 7, 10, 2, 6, 19, 22, 32 });
&&&&&&&&&&&&&&&&&& }catch (Exception e) {
&&&&&&&&&&&&&&&&&&&&&&&&&&& e.printStackTrace();
&&&&&&&&&&&&&&&&&& }
&&&&&&&& }
&&&&&&&& publicstatic void smallLarge(int[] array) throws Exception {
&&&&&&&&&&&&&&&&&& if(array == null || array.length & 1) {
&&&&&&&&&&&&&&&&&&&&&&&&&&& thrownew Exception(&the array is null or the array has no element!&);
&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&& int[]rightMin = new int[array.length];
&&&&&&&&&&&&&&&&&& rightMin[array.length- 1] = array[array.length - 1];
&&&&&&&&&&&&&&&&&& for(int i = array.length - 2; i &= 0; i--) {
&&&&&&&&&&&&&&&&&&&&&&&&&&& if(array[i] & rightMin[i &#43; 1]) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& rightMin[i]= array[i];
&&&&&&&&&&&&&&&&&&&&&&&&&&& }else {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& rightMin[i]= rightMin[i &#43; 1];
&&&&&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&& intleftMax = Integer.MIN_VALUE;
&&&&&&&&&&&&&&&&&& for(int i = 0; i & array. i&#43;&#43;) {
&&&&&&&&&&&&&&&&&&&&&&&&&&& if(leftMax &= array[i]) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& leftMax= array[i];
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& if(leftMax == rightMin[i]) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& System.out.println(leftMax);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&& }
&&&&&&&& }
&10、整数的拆分问题
如,对于正整数n=6,可以拆分为:
4&#43;1&#43;1
3&#43;2&#43;1
3&#43;1&#43;1&#43;1
2&#43;2&#43;2
2&#43;2&#43;1&#43;1
2&#43;1&#43;1&#43;1&#43;1
1&#43;1&#43;1&#43;1&#43;1&#43;1
现在的问题是,对于给定的正整数n,程序输出该整数的拆分种类数
public class Two {
&&&&&&&& & /**正整数加法不同的分解法
&&&&* @param sum:和& * @param max:最大&#20540;& * @param data:记录不同的加法形式&&&&& * @param index:加法分解数的最大个数&&&&& * @return 分解个数 &&&&&*/&
&&&public static int&splitInteger(int sum, int max, int[] data, int index) {&
&&&&&&&if (max & sum) max =&
&&&&&&&if (sum & 1 || max & 1) return 0;&
&&&&&&&if (sum == 1 || max == 1) {&
&&&&&&&&&&&if (sum == 1) {&
&&&&&&&&&&&&&&& data[index] =&
&&&&&&&&&&&&&&& print(data, index&#43;1);&
&&&&&&&&&&&} else {&
&&&&&&&&&&&&&&& for (int i = 0; i &i&#43;&#43;) {&
&&&&&&&&&&&&&&&&&&&data[index&#43;&#43;] =&&&&&&&&&&&&&&&&& }&
&&&&&&&&&&&&&&& print(data, index);&&&&&&&&&&&&& }&
&&&&&&&&&&&return 1;&&&&&&&&& }&
&&&&&&&if (sum == max) {&
&&&&&&&&&&&data[index] =&
&&&&&&&&&&&print(data, index&#43;1);&
&&&&&&&&&&&return 1 &#43; splitInteger(sum, max-1, data, index);&
&&&&&&&} else if (sum & max) {&
&&&&&&&&&&&data[index] =&
&&&&&&&&&&&//一定注意这里的先后顺序&
&&&return splitInteger(sum-max, max, data, index&#43;1) &#43; splitInteger(sum,max-1, data, index);&&&&&&&&&&&&
&&&&&&&} else {&&
&&&&&&&&&&&//sum & max&
&&&&&&&&&&&return splitInteger(sum, sum, data, index);&&&&&&&&& }&&&&}&&&&&&&
&&& &&&&public static void print(int[] data, intindex) {& //打印数组&
&&&&&&&for (int i = 0; i & index -1; i&#43;&#43;) {&
&&&&&&&&&&&System.out.print(data[i] &#43; &&#43;&);&&&&&&&&& }&
&&&&&&&System.out.println(data[index-1]);&&&&&}&
* 正整数加法不同分解的个数:最大&#20540;为max,和为sum的加法个数
递归形式: f(sum, max) = f(sum-max, max) &#43; f(sum, max-1);&
&&&public static int count(int sum, int max) {&
&&&&&&&if (sum & 1 || max & 1) return 0;&
&&&&&&&else if (sum == 1 || max == 1){&&
&&&&&&&&&&&return 1;&
&&&&&&&} else if (sum & max) {&
&&&&&&&&&&&return count(sum,sum);&
&&&&&&&} else if (sum == max) {&
&&&&&&&&&&&return 1&#43;count(sum, sum-1);&
&&&&&&&} else { &
&&&&&&&&&&&return count(sum, max-1)&#43;count(sum-max,max);&&&&&&&& }&&&&&}&&&&&&&
&&&public static void main(String[] args) {&
&&&&&&&int n = 4;&
&&&&&&&int[] data = new int[n];&
&&&&&&&System.out.println(&正整数\'& &#43; n &#43; &\'可以分解为如下不同的加法形式:&);&
&&& &&&&System.out.println(&正整数\'& &#43;n &#43; & \'加法分解个数为:\t& &#43; splitInteger(n,n,data,0));&
&&&&&&&n = 100;&
&&&&&&&System.out.println(&正整数\'& &#43; n &#43; &\'加法分解个数为(包含本身):\t& &#43;count(n,n));&
&&&System.out.println(&正整数\'& &#43; n &#43; &\'加法分解个数为(不包含本身):\t& &#43;count(n,n-1));&
&11、在数组中寻找和为给定&#20540;的组合
&publicclass Two {
&&&&&&&& staticint[] arr ={1, 5, 9, 3, 4, 7, 6, 2, 8};
&&&static int maxIndex = arr.length - 1;// 索引最大&#20540;
&&&static int sum = 11;// 求两个数的和等于的&#20540;
&&&public static void main(String[] args)
&&&{&&&&&&& find1(arr);&&& }
// 1.所有数字两两组合,计算;时间复杂度O(n*n)
// 2.先把数组排序,然后利用二分查找在数组中查找,判断sum-arr[i]是否在数组中;时间复杂度O(n*longn)
// 3.先对数组排序i=0,j=n-1,如果:sum&arr[i]&#43;arr[j]i&#43;&#43;;如果:sum&arr[i]&#43;arr[j] j--
// 如果有序,直接两个指针两端扫描,时间O(N);如果无序,先排序后两端扫描,时间O(N*logN&#43;N)=O(N*logN),空间始终都为O(1)
&static void find1(int[] arr) {
&&&&&&&Arrays.sort(arr);// 对数组排序
&&&&&&&for (int i = 0, j = maxI i &)
&&&&&&&&&&&if (arr[i] &#43; arr[j] == sum)
&&&&&&&&&&&{
&&&&&&&&&&&&&&& System.out.println(sum &#43; &= & &#43; arr[i] &#43; & &#43; & &#43; arr[j]);
&&&&&&&&&&&&&& &i&#43;&#43;;// 没有这一句死循环
&&&&&&&&&&&}
&&&&&&&&&&&else if (arr[i] &#43; arr[j] & sum)
&&&&&&&&&&&{
&&&&&&&&&&&&&&& i&#43;&#43;;
&&&&&&&&&&&}
&&&&&&&&&&&else
&&&&&&&&&&&{
&&&&&&&&&&&&&&& j--;
&&&&&&&&&&&}&&&&&&& }&&& }}
&12、求数组中两个元素差的最大&#20540;
import java.util.*;
public class Two {
&&&&&&&& publicstatic void main(String[] a1) {
&&&&&&&&&&&&&&&&&& List&Integer&result = new ArrayList&Integer&();
&&&&&&&&&&&&&&&&&& &int[] aa = {12,2,34,54,65,3,2,5,-12,4,0};
&&&&&&&&&&&&&&&&&& &for(int i =0;i&aa.i&#43;&#43;){
&&&&&&&&&&&&&&&&&&&&&&&&&&& &for(int j =0; j&aa.length && j!=i;j&#43;&#43;){
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &int cha = aa[i]-aa[j];
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &int cha2 = aa[j]-aa[i];
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &result.add(cha);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &result.add(cha2);
&&&&&&&&&&&&&&&&&&&&&&&&&&& &}
&&&&&&&&&&&&&&&&&& &}
&&&&&&&&&&&&&&&&&& &int min = result.get(0);
&&&&&&&&&&&&&&&&&& &for(int i =0;i&result.size();i&#43;&#43;){
&&&&&&&&&&&&&&&&&&&&&&&&&&& &if(result.get(i)& min){
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &min = result.get(i);
&&&&&&&&&&&&&&&&&&&&&&&&&&& &}
&&&&&&&&&&&&&&&&&& &}
&&&&&&&&&&&&&&&&&& &System.out.println(&两个元素的差为:&);
&&&&&&&&&&&&&&&&&& &for(Integer x : result){
&&&&&&&&&&&&&&&&&&&&&&&&&&& &System.out.print(x&#43;&& &);
&&&&&&&&&&&&&&&&&& &}
&&&&&&&&&&&&&&&&&& &System.out.println();
&&&&&&&&&&&&&&&&&& &System.out.println(&两个元素的差总共有&&#43;result.size()&#43;&个&);
&&&&&&&&&&&&&&&&&& &System.out.println(&两个元素的差的最小&#20540;时:&&#43;min);
&&&&&&&& }
13、输入一个正数 n,输出所有和为 n 连续正数序列。
例如输入 15,由于 1&#43;2&#43;3&#43;4&#43;5=4&#43;5&#43;6=7&#43;8=15,所以输出 3 个连续序列 1-5、4-6 和 7-8。
package com.
public class Two {
&&&&&&&& & public static&void getAns(int n){
&&&&&&&& &&&& int beg=1;
&&&&&&&& &&&& int sum=1;
&&&&&&&& &&&& int cur=1;&&&&&&& &&&&
&&&&&&&& &&& while(beg&=n/2&#43;1){ &&&&&
&&&&&&&& &&&&& if(sum==n){
&&&&&&&& &&&&&&& for(int k=k&=k&#43;&#43;){
&&&&&&&& &&&&&&& &&&&&&&& if(k == cur){
&&&&&&&& &&&&&&& &&&&&&&&&&&&&&&&&& System.out.print(k&#43;&=15&);
&&&&&&&& &&&&&&& &&&&&&&& }else{
&&&&&&&& & &&&& &&&&&&&&&&System.out.print(k&#43;&&#43;&);
&&&&&&&& &&&&&&& &&&&&&&& }
&&&&&&&& &&&&&&& }
&&&&&&&& &&&&&&& System.out.println();
&&&&&&&& &&&&&&& sum=sum-
&&&&&&&& &&&&&&& beg&#43;&#43;;
&&&&&&&& &&&&&&& cur&#43;&#43;;
&&&&&&&& &&&&&&& sum&#43;=&&&&&&& &&&&&&&
&&&&&&&& & &&&&}
&&&&&&&& &&&&&& if(sum&n){& &&&&&&&
&&&&&&&& &&&&&&&& sum=sum-
&&&&&&&& &&&&&&&& beg&#43;&#43;;&& &&&&&&&
&&&&&&&& &&&&& }else&&&& {
&&&&&&&& &&&&&& cur&#43;&#43;;
&&&&&&&& &&&&&& sum&#43;=
&&&&&&&& &&&&&& } &&&&
&&&&&&&& &&& }&
&&&&&&&& & }
&&&&&&&& & public static void main(String[] args) {
&&&&&&&& &&& getAns(15);
&&&&&&&& & }
&&&&&&&& }
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:38176次
积分:1216
积分:1216
排名:千里之外
原创:85篇
转载:20篇
(11)(1)(21)(14)(14)(10)(15)(2)(11)(6)}

我要回帖

更多关于 java 创建数组 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信