9.4---集合子集(CC150)
2015-12-29 18:56
197 查看
这题非常复杂。牛客网上对应的题目对结果要求比较苛刻,所以要调整。
整体思路是:先放进去一个,然后第二个来的时候插入到已有的,并且把自己也放进去。
整体思路是:先放进去一个,然后第二个来的时候插入到已有的,并且把自己也放进去。
public static ArrayList<ArrayList<Integer>> getSubsets(int[] a, int n){ ArrayList<ArrayList<Integer>> res = new ArrayList(); if(n <= 0) return res; ArrayList<Integer> tmp = new ArrayList(); tmp.add(a[n-1]); res.add(tmp); for(int i = n-2; i >=0; i--){ ArrayList<ArrayList<Integer>> res2 = new ArrayList(res); for(ArrayList<Integer> list : res){ ArrayList<Integer> list2 = new ArrayList(list); list2.add(a[i]); res2.add(list2); } ArrayList<Integer> list3 = new ArrayList(); list3.add(a[i]); res2.add(list3); res = new ArrayList(res2); } ArrayList<ArrayList<Integer>> res3 = new ArrayList(); ArrayList<Integer> max = new ArrayList(); int flag = 0; int h = res.size(); while(res3.size() != h){ max = res.get(0); for(int i = 1; i < res.size(); i++){ if(big(res.get(i),res.get(flag))){ max = res.get(i); flag = i; } } ArrayList<Integer> list4 = new ArrayList(max); res3.add(list4); res.remove(flag); flag = 0; } return res3; } public static boolean big(ArrayList<Integer> list1, ArrayList<Integer> list2){ for(int i = 0; i < list1.size() && i<list2.size(); i++){ if(list1.get(i) > list2.get(i)){ return true; } else if(list1.get(i) < list2.get(i)){ return false; } else{ } } if(list1.size() > list2.size()) return true; else{ return false; } }
相关文章推荐
- 变态跳台阶
- Mac OSX 中java7 java8环境的配置
- Esper 20章 优化
- 【LCA】bzoj 2144:跳跳棋
- Linux编程之一:创建第一个C/C++程序
- 开荒新系列之LeetCode: 006-Valid Anagram
- Nginx报错 connect() failed (111: Connection refused) while connecting to upstream 的解决方法
- Linux管道通信
- 适配移动
- linux编译64bitHadoop (eg: ubuntu14.04 and hadoop 2.3.0)
- Docker基础命令
- TopCoder SRM 677 Div. 2 550 - FourStrings (枚举)
- HDU 2083 简易版之最短距离
- 利用Canvas saveLayer手动绘制圆角View
- mahout math中相关matrix和vector的用法DEMO
- 预译头之前世今生
- STM32F103学习3:通过器件参考手册和具体程序学习I/O输出操作(MDK软件仿真+硬件实验)
- Phpstorm常用设置
- (3) 编写一个截取字符串的函数,输入一个字符串和字节数,输出按字节书截取的字符串,但是要保证汉字不能截半个
- 【Lua】将Lua5.1的setfenv迁移到Lua5.2的_ENV