前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >算法【最大子序列问题】

算法【最大子序列问题】

作者头像
梅花
发布2020-09-28 10:26:18
5520
发布2020-09-28 10:26:18
举报
文章被收录于专栏:梅花的学习记录

     问题描述:

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

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

        例如说 1 , 2 ,3

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

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

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

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

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

     代码:

代码语言:javascript
复制
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);
        
    }
    
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-11-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档