2021.3.1 每日练习 133.克隆图(DFS+BFS)+ 134.加油站

133.克隆图(DFS+BFS)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

/*
// Definition for a Node.
class Node {
    public int val;
    public List<Node> neighbors;
    public Node() {
        val = 0;
        neighbors = new ArrayList<Node>();
    }
    public Node(int _val) {
        val = _val;
        neighbors = new ArrayList<Node>();
    }
    public Node(int _val, ArrayList<Node> _neighbors) {
        val = _val;
        neighbors = _neighbors;
    }
}
*/

class Solution {
    public Node cloneGraph(Node node) {
		Map<Node, Node> map = new HashMap<>(); //map中的key存储原始节点,value存储其对应的克隆节点
		return dfs(node, map);
    }
    //克隆node节点和其邻接节点
    public Node dfs(Node node, Map<Node, Node> map) {
    	if(node == null) return null;
    	//如果map中已存在node这个key,则说明这个节点已经被克隆过了,只需把对应的克隆节点value返回
    	if(map.containsKey(node)) return map.get(node);
    	//map中不存在node,则克隆该节点,并把这一对节点存入map中
    	Node colon = new Node(node.val, new ArrayList<>());
    	map.put(node, colon);
    	//克隆node节点的邻接节点
    	for(Node temp : node.neighbors) {
    		colon.neighbor.add(dfs(temp, map));
    	}
    	//返回克隆好的节点
    	return colon;
    }
}

134.加油站

在这里插入图片描述
在这里插入图片描述

class Solution {
    public int canCompleteCircuit(int[] gas, int[] cost) {
		int len = gas.length;
		int sum = 0; //当前油箱里的油
		int minSum = Integer.MAX_VALUE; //油箱里剩余最小的油
		int minIndex = 0; //此时所在的加油站编号
		for(int i = 0; i < len; i++) {
			sum += gas[i] - cost[i]; //当为负的,说明加油站的油小于需要消耗的油
			if(sum < minSum) {
				minSum = sum;
				minIndex = i;
			}
		}
		//当最后油箱里的油小于0时,说明不能环路一圈;
		//大于0时,油箱油量最低点的下一个点,因为此时油站的油大于消耗的油,所以以这个点为出发点
		return sum < 0 ? -1 : (minIndex + 1) % len;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值