`
daojin
  • 浏览: 690273 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Android面试题目之五: 算法题--嵌套的信封

 
阅读更多

题目:

有很多随机大小的明信片,也有很多随机大小的信封。希望把一个明信片装到多个信封里。明信片只能装入比自己大的信封,信封也只能装入更大的信封。相同的大小无法装入。

 

为了保证最大数量的信封被使用和装入最多数量的卡片,请设计算法。

 

解决方法

1.将明信片和信封各自排序。

2.找到第一个明信片。

3.找到没使用的第一个信封。

4. 是否可装入,是则装入。否按顺序向前从大到小找卡片,能装入则装入。不能装入则继续从大到小找卡片。直到没有卡片可找。

 

代码

package sort;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class NestedEnvelope {

	public static void main(String[] args) {
		List<Card> cards = new ArrayList<>();
		for (int i = 0; i < 5; ++i) {
			Card card = new Card();
			card.size = i * 2;
			card.id = i;
			cards.add(card);
		}

		List<Envelop> evelops = new ArrayList<>();

		for (int i = 0; i < 10; ++i) {
			Envelop env = new Envelop();
			env.size = i;
			env.id = i;
			evelops.add(env);
		}

		HashMap<Card, List<Envelop>> results = putInCard(cards, evelops);

		for (Map.Entry<Card, List<Envelop>> entry : results.entrySet()) {
			System.out.println("[");
			System.out.println("card:" + entry.getKey().size);
			for (Envelop env : entry.getValue()) {
				System.out.println("envelop:" + env.size);
			}
			System.out.println("]");
		}
	}

	static class Card implements Comparable<Card> {
		int id;
		int size;

		@Override
		public int compareTo(Card o) {
			// TODO Auto-generated method stub
			return size - o.size;
		}
	}

	static class Envelop implements Comparable<Envelop> {
		int id;
		int size;

		@Override
		public int compareTo(Envelop o) {
			// TODO Auto-generated method stub
			return size - o.size;
		}
	}

	public static HashMap<Card, List<Envelop>> putInCard(List<Card> cards, List<Envelop> envelops) {

		Collections.sort(cards);

		Collections.sort(envelops);
		
		HashMap<Card, List<Envelop>> cardWithEnvelops = new HashMap<Card, List<Envelop>>();
		
		for (int i = 0; i < cards.size(); ++i) {

			Card card = cards.get(i);

			Card nextCard = null;

			if (i + 1 < cards.size()) {
				nextCard = cards.get(i + 1);
			}

			List<Envelop> cardEnvelops = new ArrayList<Envelop>();
			
			cardWithEnvelops.put(card, cardEnvelops);
			
			Envelop lastEnvelop = null;
			
			while (envelops.size() > 0) {
				
				Envelop envelop = envelops.get(0);
				
				if ((lastEnvelop != null && envelop.size == lastEnvelop.size) || envelop.size == card.size) {
					
					for (int indexCard = i - 1; indexCard >= 0; --indexCard) {
						
						List<Envelop> preEnvelops = cardWithEnvelops.get(cards.get(indexCard));
						
						if (preEnvelops.size() == 0) {
							
							preEnvelops.add(envelop);
						
						} else {
							
							Envelop maxEnv = preEnvelops.get(preEnvelops.size() - 1);
							
							if (maxEnv.size < envelop.size) {
								
								preEnvelops.add(envelop);
							}
						}
					}
					
					envelops.remove(envelop);
					
					continue;
				}
				
				if (envelop.size > card.size && (nextCard == null || envelop.size <= nextCard.size)) {
					
					cardEnvelops.add(envelop);
					
					lastEnvelop = envelop;
					
					envelops.remove(envelop);
				
				} else {
					break;
				}
			}
		}
		return cardWithEnvelops;
	}
}

 

打印:

  

[
card:4
envelop:5
envelop:6
]
[
card:8
envelop:9
]
[
card:0
envelop:1
envelop:2
]
[
card:2
envelop:3
envelop:4
]
[
card:6
envelop:7
envelop:8
]

 

总结:

    结果并不是只有一种装法最多,但是设计的这个算法能保证装的最多卡片,和最多信封。

 

 

 

 

0
0
分享到:
评论

相关推荐

    JAVA经典算法面试39题及答案

    JAVA经典算法面试39题及答案 本资源总结了39道经典的 JAVA 算法面试题目,每个题目都附带答案,涵盖了常见的算法问题,旨在帮助读者更好地掌握 JAVA 编程语言和算法设计。 算法概述 算法是计算机科学中最重要的...

    算法大全-面试题-数据结构.pdf.zip_算法

    《算法大全-面试题-数据结构.pdf》是一个深入探讨算法和数据结构的资源,对于程序员,尤其是准备面试的开发者来说,这是一个极其宝贵的学习材料。它涵盖了算法和数据结构的基础概念,以及在实际问题中的应用,旨在...

    算法面试题100道for阿里、百度、腾讯、京东、美团、今日头条.pdf

    本书《算法面试题100道for阿里、百度、腾讯、京东、美团、今日头条.pdf》是一份面向希望进入中国顶尖互联网公司(如阿里、百度、腾讯、京东、美团、今日头条等)工作,尤其是软件开发岗位的求职者,所准备的面试材料...

    Educoder题目:数据结构与算法 - 线性表答案解析.md

    Educoder题目:数据结构与算法 - 线性表答案解析.md

    2008年11月全国计算机软考软件设计师考试下午试题和答案.txt

    **题目五:** - **题目描述**:关于用户角色及其功能权限的定义。 - **解答思路**:需要理解A1至A4代表的不同用户角色以及它们各自的职责范围,如User、Author、Reviewer和PCChair。 **题目六:** - **题目描述**:...

    cpp-剑指Offer算法面试题目总结CC实现

    《C++剑指Offer算法面试题目总结:CC++实现》 在编程面试中,C++与C语言常常是考察的重点,因为它们提供了底层控制和高效性能。本资料集以"剑指Offer"系列为基础,结合C++语言特性,对一系列经典的算法面试题目进行...

    华为od的面试算法真题

    ### 华为OD面试算法真题解析:抢7游戏 ...以上是对华为OD面试算法真题“抢7游戏”的详细解析及实现过程,通过此题不仅能够加深对应聘者对动态规划这一算法思想的理解,还能提高解决实际问题的能力。

    android面试题目及其答案大全

    【Android面试知识点详解】 在Android面试中,面试官通常会关注候选人的基础知识、编程技能、设计模式理解以及项目经验。以下是一些常见的面试题目及答案的解析: 1. **++i 和 i++的区别**: - `++i`是前缀操作符...

    android面试题整理

    以上就是“android面试题整理”中可能涵盖的主要知识点,每个话题都值得深入探讨和实践,以确保在面试中能够全面展示自己的专业能力。通过持续学习和项目实践,开发者可以不断提高自己的技术水平,为面试做好充分...

    基于Android的多种填充算法测试--计算机图形学

    本项目专注于在Android平台上实现多种填充算法,以测试其效率和性能。以下将详细阐述这些填充算法及其在Android环境中的应用。 1. **逐点判别填充**(Bresenham's Line Algorithm): 这是一种用于绘制像素点到点...

    leetcode中国-algorithm-pattern-python:算法模式-python

    是大部分公司的出题源头,刷完面试中基本会遇到现题或者变形题,基本刷完这三部分,大部分国内公司的面试题应该就没什么问题了~ 1、 2、 3、 刷题时间可以合理分配,如果打算准备面试了,建议前面两部分 一个半月 ...

    PTA-数据结构与算法题目集.zip

    PTA-数据结构与算法题目集 PTA-数据结构与算法题目集 PTA-数据结构与算法题目集 PTA-数据结构与算法题目集 PTA-数据结构与算法题目集 PTA-数据结构与算法题目集 PTA-数据结构与算法题目集 PTA-数据结构与算法题目集 ...

    leetcode中国-algorithm-pattern:算法模板-Golang

    刷完这些练习题,基本对数据结构和算法有自己的认识体会,基本大部分面试题都能写得出来,国内的 BAT、TMD 应该都不是问题 从 4 月份找工作开始,从 0 开始刷 LeetCode,中间大概花了一个半月(6 周)左右时间刷完 240...

    玩转算法面试- Leetcode真题分门别类

    玩转算法面试-- Leetcode真题分门别类 资源列表: 00-The-Opening 01-What-is-Algorithm-Interview 02-Time-Complexity 03-Using-Array 04-Using-Hash-Table 05-About-Linked-List 06-Stack-and-Queue 07-Binary-...

    数据结构和算法面试题---微软、百度

    1. 数据结构与算法面试准备:文章提到的是微软和百度的面试题,这提示我们对于准备面试,特别是那些知名的科技公司,需要对数据结构和算法有深入的了解和准备。这包括但不限于对二元查找树、双向链表等基本数据结构...

    软件工程算法面试题目

    【算法面试题】 一、构建最小多位数 这个问题的核心是找到一种有效的方法,将一组正整数连接起来形成一个最小的多位数。解决方案是采用基数排序的思路。 1. **算法描述**: - 初始化一个数字集合S。 - 选取最小...

    newcoder-oj:牛客题霸-算法篇-程序员面试高频题(c ++)

    《牛客题霸-算法篇-程序员面试高频题(C++)》是针对准备程序员面试的C++学习者设计的一套资源集。这个压缩包文件包含了一个名为`newcoder-oj-main`的主目录,很可能包含了源代码、题目描述、测试数据以及解题思路等...

    某集团大数据平台整体方案建议书 下载

    - 随着信息技术的发展,大数据已成为推动企业数字化转型的关键因素之一。通过构建大数据平台,可以更好地利用数据资产,提升决策效率和服务水平。 **1.2 建设目标** - **总体目标:** - 构建一个集数据采集、...

    新鲜出炉:微软等数据结构+算法面试100题第81-100题[V0.1版最后20题]

    微软等公司数据结构与算法面试题的背景 - **作者**: July,一位热衷于分享数据结构和算法知识的博主。 - **发布时间**: 2010年12月5日。 - **目的**: 分享微软及其他知名IT公司面试中常见的数据结构与算法题目,...

Global site tag (gtag.js) - Google Analytics