博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LintCode刷题——Largest Divisible Subset
阅读量:6324 次
发布时间:2019-06-22

本文共 1988 字,大约阅读时间需要 6 分钟。

题目内容:

Given a set of distinct positive integers, find the largest subset such that every pair (Si, Sj) of elements in this subset satisfies: Si % Sj = 0 or Sj % Si = 0.

注意事项:

If there are multiple solutions, return any subset is fine.

Given nums = [1,2,4,8], return [1,2,4,8]

题目概述:

给定一个含不重复正整数元素的集合,返回该集合的任意一个子集,使其满足该子集中的元素两两之间存在一个数对另一个数取余为0;

算法分析:

可以先从数学上对该问题进行分析,看一个简单的例子:

对于集合[1,2,4],其满足该返回集合的条件,当该集合中加入满足与4取余为0的数时,该集合仍满足返回集合的条件。对于数 i<j<k,若 j%i=0, k%j=0, 则很容易推出 k%i=0。

因此对于本题,将给定的数组num[]从小到大进行排序。建立一个数组maxLength[]用来记录数组num[]中每一个位置所对应的其能连接的最大长度;建立一个lastIndex[]数组用来记录当前位置能连接的上一个数字的位置,然后进行以下算法:

  ①对数组进行初始化,将数组lastIndex[]中的每一个元素的值均置为-1,表示当前节点不存在可连接的上一个节点;

  ②对于每一个num[i],对其之前的所有元素进行遍历,找到能连接的最大长度,同时更新maxLength[i]与lastIndex[i];

  ③找到maxLength[]中的最大长度同时利用lastIndex[]进行结果的处理,最后return result;

代码:

  算法复杂度为O(n^2);

public List
largestDivisibleSubset(int[] nums) { // Write your code here Arrays.sort(nums); int length = nums.length; int maxIndex = -1; int max = 0; List
result = new ArrayList<>(); if(length<2){ return result; } int[] maxLength = new int[length]; int[] lastIndex = new int[length]; for(int i=0;i
maxLength[i]){ maxLength[i] = temp; lastIndex[i] = j; } } } if(maxLength[i]>max){ max = maxLength[i]; maxIndex = i; } } //当数组nums中的每一个元素均不存在上一个可连的元素时则返回第一个元素节点链表; if(maxIndex==-1){ result.add(nums[0]); } else{ while(lastIndex[maxIndex]!=-1){ result.add(nums[maxIndex]); maxIndex = lastIndex[maxIndex]; } result.add(nums[maxIndex]); } return result; }

 

转载于:https://www.cnblogs.com/Revenent-Blog/p/7545347.html

你可能感兴趣的文章
rails 字符串 转化为 html
查看>>
Yii2.0 下的 load() 方法的使用
查看>>
iOS8 Push Notifications
查看>>
各大名企笔试及面经大全(程序猿必读)
查看>>
轨磁条简介
查看>>
如何设计高扩展的在线网页制作平台
查看>>
SpringBoot整合MyBatis
查看>>
Android 类库书签更新(一)
查看>>
DataWorks:任务未运行自助排查
查看>>
「镁客早报」特斯拉裁员,马斯克解释没有办法;微软推出Azure DevOps赏金计划...
查看>>
centos 7.4 使用 pgxc_ctl 安装与使用
查看>>
【数据库】表分区
查看>>
img垂直水平居中与div
查看>>
订餐系统之同步美团商家订单
查看>>
CentOS 6.9通过RPM安装EPEL源(http://dl.fedoraproject.org)
查看>>
采集音频和摄像头视频并实时H264编码及AAC编码
查看>>
堆排序算法
查看>>
STM32的TAMPER-RTC管脚作为Tamper的使用[转]
查看>>
[记]一个逐步“优化”的范例程序
查看>>
2012-01-09_2
查看>>