zoukankan      html  css  js  c++  java
  • 算法【最大子序列问题】

         问题描述:

            (这个问题描述可能不太准确     是根据我个人的理解写出来的)

             输入一个序列的数字   求他的最大子序列   包括空集合

            例如说 1 , 2 ,3  

             那么他的子序列就是   【    [1,2,3]      [1,2]     [1,3]     [2,3]     [ 1 ]     [2 ]     [3]   []  】

              

            我的解决思路是通过递归调用 

            1.   每个元素有两种状态,一种状态是取当前元素,一种状态是不取当前元素   所以需要 一个单独的辅助数组 用来记录当前元素是否取

               取完所有取当前元素的子情况,就获取所有不取当前元素的子情况

                                            

            2.    需要一个索引记录 当前循环到的层数,如果获取完所有元素就添加到List中

              

               

         代码:

          

    import java.util.ArrayList;
    import java.util.List;
    
    public class Solution {
        public static boolean v[] = new boolean[100];
        public static List<List<Integer>> ans = new ArrayList<List<Integer>>();
    
        public void robot(int idx, int[] nums) {
            if (idx >= nums.length) {
                List<Integer> r = new ArrayList<Integer>();
                for (int i = 0; i < nums.length;i++) {
                    if (v[i]) {
                        r.add(nums[i]);
                    }
                }
                ans.add(r);
                return;
            }
            
            //这个是取当前元素的所有结果
            v[idx] = true;
            robot(idx+1,nums);
            //这个是不取当前元素的所有结果
            v[idx] = false;
            robot(idx+1,nums);
        }
        
        
        public List<List<Integer>> subsets(int [] nums)
        {
            ans.clear();
            robot(0, nums);
            return ans;
        }
        
        public static void main(String[] args) {
            for (int i = 0; i < v.length; i++) {
                v[i] = false;
            }
            int [] nums = new int [3];
            nums[0] = 1;
            nums[1] = 2;
            nums[2] = 3;
        
            Solution solution = new Solution();
            List<List<Integer>> list = solution.subsets(nums);
            System.out.println(list);
            
        }
        
    }

              

     

              

     

  • 相关阅读:
    POJ 1953 World Cup Noise
    POJ 1995 Raising Modulo Numbers (快速幂取余)
    poj 1256 Anagram
    POJ 1218 THE DRUNK JAILER
    POJ 1316 Self Numbers
    POJ 1663 Number Steps
    POJ 1664 放苹果
    如何查看DIV被设置什么CSS样式
    独行DIV自适应宽度布局CSS实例与扩大应用范围
    python 从入门到精通教程一:[1]Hello,world!
  • 原文地址:https://www.cnblogs.com/kangxinxin/p/9975276.html
Copyright © 2011-2022 走看看