publicclass Solution { public ArrayList<ArrayList<Integer>> subsetsWithDup(int[] S) { Arrays.sort(S);
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>(); ArrayList<Integer> indexs = new ArrayList<Integer>(); result.add(new ArrayList<Integer>()); indexs.add(-1);
int slen = S.length; int start=0,end=0; for(int len=1;len<=slen;++len){ int e = end; for(int i=start;i<=end;++i){ ArrayList<Integer> ss = result.get(i); int index = indexs.get(i).intValue(); int last = S[0]-1; for(int j = index+1;j<slen;++j){ int v = S[j]; if(v!=last){ ArrayList<Integer> newss = new ArrayList<Integer>(ss); newss.add(v); result.add(newss); indexs.add(j); ++e; last = v; } } }
publicint maxProfit(int[] prices) { int days = prices.length; if(days<2){ return 0; } int[] profits = newint[days]; int min = prices[0]; int max = min; for(int i=1;i<days;++i){ int p = prices[i]; if(min>p){ max = min = p; } elseif(max<p){ max = p; } int profit = max - min; profits[i] = (profits[i-1]>profit)?profits[i-1]:profit; }
int[] nprofits = newint[days]; nprofits[days-1] = 0; max = min = prices[days-1]; for(int i=days-2;i>=0;--i){ int p = prices[i]; if(min>p){ min =p; } elseif(max<p){ max = min = p; } int profit = max - min; nprofits[i] = (nprofits[i+1]>profit)?nprofits[i+1]:profit; }