增序子数组个数

问题描述:

    微软10.15笔试:对于一个数组{1,2,3}它的子数组有{1,2},{1,3}{2,3},{1,2,3},元素之间可以不是连续的,对于数组{5,9,1,7,2,6,3,8,10,4},

        升序子序列有多少个?或者换一种表达为:数组int a[]={5,9,1,7,2,6,3,8,10,4}  。求其所有递增子数组(元素相对位置不变)的个数,  

        例如:{5,9},{5,7,8,10},{1,2,6,8}。

 

思想: 动态规划

 

代码: 

 1 import java.util.Scanner;
 2 
 3 
 4 public class Main {
 5 
 6     public static void main(String[] argv){
 7         
 8         Scanner in = new Scanner(System.in);        
 9         String [] k = in.nextLine().split(" ");        
10         int [] s = new int[k.length];
11         int [] id = new int[k.length];
12         int [] out = new int[k.length];
13         int sum=0;
14         //System.out.println(k.length);
15         for (int i=0; i<k.length; i++){
16             s[i]=Integer.parseInt(k[i]);
17             out[i]=0;
18         }
19         in.close();
20         /* 每个值在数组中的大小序号 */
21         for(int i=0; i<s.length; i++){
22             int n=0;
23             for(int j=0; j<s.length; j++){
24                 if(s[i]>s[j])
25                     n++;
26             }
27             id[i]=n;            
28         }
29         //System.out.println(" "+id[0]+id[1]+id[2]+id[3]);
30         
31         /* 动态规划 */
32         for(int i=0; i<id.length; i++){
33             
34             out[id[i]]=out[id[i]]+1;
35             for(int j=0; j<id[i]; j++){
36                 out[id[i]]=out[id[i]]+out[j];
37             }
38             //System.out.println(" "+id[i]+": "+out[id[i]]);
39             sum=sum+out[id[i]];
40         }
41         
42         /* 输出结果 */
43         System.out.println(sum);
44         
45     }
46     
47 }

 

转载于:https://www.cnblogs.com/udld/p/4218415.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值