hi各位大佬,我是小菜鸟。一个数组中的递增子序列可能有多个,那么需要创建一个二维数组或者集合(或者数组集合混用,参考java博文之集合)
这也是一个常见的题,原力扣官方地址见此。
I'm here waiting for you
1,再补充一个知识,Integer初始化后不赋值,默认是null,这点与一般的数据类型不同,如下:
- int test[]=new int[4];
- for (int i:test)
- System.out.println(i);
- Integer q[]= new Integer[4];
- for (Integer j:q)
- System.out.println(j);
-
- #分别是4个0和4个null
2,集合套集合
- Integer p[] = new Integer[]{1,2,3,4};
- Integer q[]= new Integer[4];
- List
>array6=new ArrayList<>(){};
- array6.add(Arrays.asList(p));
- array6.add(Arrays.asList(q));
- System.out.println(array6);
-
- #[[1, 2, 3, 4], [null, null, null, null]]
3,数组集合
- List
array5[]=new ArrayList[2]; - array5[0]=new ArrayList<>(Arrays.asList(p));
- array5[1]=new ArrayList<>(){{Arrays.asList(q);}};
- System.out.println(array5[1]);
数组只能按索引打印,不能一下子打印出所有,而集合可以。
4,今天的题目:深度有限搜索,枚举所有的情况,然后剪枝。
- class Solution {
- List
temp = new ArrayList(); - List
> ans = new ArrayList>();
-
- public List
> findSubsequences(int[] nums) {
- dfs(0, Integer.MIN_VALUE, nums);
- return ans;
- }
-
- public void dfs(int cur, int last, int[] nums) {
- if (cur == nums.length) {
- if (temp.size() >= 2) {
- ans.add(new ArrayList
(temp)); - }
- return;
- }
- if (nums[cur] >= last) {
- temp.add(nums[cur]);
- dfs(cur + 1, nums[cur], nums);
- temp.remove(temp.size() - 1);
- }
- if (nums[cur] != last) {
- dfs(cur + 1, last, nums);
- }
- }
- }
4.1.最小值,最大值
- System.out.println(Integer.MIN_VALUE+","+Integer.MAX_VALUE);
- -2147483648,2147483647
就是-2**31和2**31-1
4.2,ans的add为啥要重新初始化赋值,不初始化结果不对,我试了。
这个就是深浅复制的问题,如下示例:也可说啥重新开辟了空间,而不是指针(地址啥玩意的)
- List
> itest=new ArrayList<>();
- List
temp =new ArrayList<>(); - temp.add(12);
- temp.add(37);
- itest.add(temp);
- temp.remove(temp.size()-1);
- System.out.println(itest);
- System.out.println(temp);
-
- #[[12]]
- #[12]
题目中的,如下:类似
- List
> itest=new ArrayList<>();
- List
temp =new ArrayList<>(); - temp.add(12);
- temp.add(37);
- itest.add(new ArrayList<>(temp));
- temp.remove(temp.size()-1);
- System.out.println(itest);
- System.out.println(temp);
- #[[12, 37]]
- #[12]