算法题(java)

  1. 查找有效服务
    (凭记忆描叙)有一系列的服务,例如a1,a2,a3,…等,a1-a2表示a1依赖a2,如果服务a2出错,那么a1也就不正常了,假设a1-a2,a2-a3, a3出错,或导致a1,a2都不正常,但如果只是a1出错,不会影响a2.
    输入的第一行是依赖关系,第二行是出错的服务,以逗号隔开,例如:
    输入:
    a1-a2,a3-a4,a5-a6
    a2,a5

输出(能正常运行的服务,按关系列表前后顺序)
a3,a4,a6

如果没有存活的服务,打印error

算法分析:
算法的关键点是要注意传递依赖关系,例如a1-a2,a2-a3这种。

算法描叙:在出错列表中,选择第一个出错服务ai,查找依赖列表,将所有依赖ai的关系找出来,例如aj-ai,将ai设置为ERROR(flag),并把aj加入到出错列表,知道所有错误服务都已查询,将关系列表中存活的服务打印出来即可。

package test;

import java.util.Scanner;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Set;
import java.util.HashSet;

public class Main {
   
	static final String flag = "error";
	static class Relation{
   
		String node;
		String rNode;
		public Relation(String node, String rNode) {
   
			this.node = node;
			this.rNode = rNode;
		}
	}
	
	public static void main(String[] args) {
   
		Scanner sc = new Scanner(System.in);
		String relations = sc.nextLine();
		String errors = sc.nextLine();
		sc.close();
		long startTime = System.currentTimeMillis(); 
		ArrayList<String> errList = new ArrayList<>();
		Collections.addAll(errList, errors.split(","));
		ArrayList<Relation> rList = new ArrayList<>();
		for(String relation:relations.split(",")) {
   
			String rStr[] = relation.split("-");
			rList.add(new Relation(rStr[0], rStr[1]));
		}
		Set<String> checked = new HashSet<>(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值