数据结构和算法
华达州
一起卷吧
展开
-
L2-025 分而治之 (25分)团体程序设计天梯赛
思路:一开始用邻接矩阵和并查集做的,但是超时了之后改成了用邻接表的方式就能过了代码如下:#include<iostream>#include<algorithm> #include<string>#include<vector>using namespace std;int visit[10001];vector<int> map[10001];int main(){ int n,m; scanf("%d %d"原创 2021-08-31 00:33:52 · 165 阅读 · 0 评论 -
L2-022 重排链表 (25 分)团体程序设计天梯赛
思路:建立一个结构体保存节点利用结构体数组保存当前节点的下一节点再用一个vector保存完整的链表,之后就是双指针遍历#include<iostream>#include<algorithm> #include<string>#include<vector>using namespace std;struct Node{ int val; int next;}node[100005];int main(){ int head原创 2021-08-30 20:13:02 · 63 阅读 · 0 评论 -
L2-020 功夫传人(25 分) 团体程序设计天梯赛
思路:这题明显是并查集,最后一个测试点超时,但是只有三分,没去专研了,其实可以改进的,可以存储每一层的功力值,就不必每次去运算了,只需要算一次直接上代码#include<iostream>#include<algorithm> #include<string>using namespace std;int p[100005];int main(){ int n; double z,r,sum = 0; scanf("%d %lf %lf",&a原创 2021-08-30 19:06:43 · 129 阅读 · 0 评论 -
L2-013 红色警报 (25 分) 团体程序设计天梯赛
这道题有两种做法求图的连通分量,如果失去一个城市之后,连通分量增加了两个或两个以上,则会影响城市之间的通讯使用并查集方法一:#include<iostream>#include<algorithm>using namespace std;int map[505][505];int visit[505]; int n,m;//深度搜索 void dfs(int root){ visit[root] = 1; for(int i=0; i<n;原创 2021-08-28 13:44:19 · 168 阅读 · 0 评论 -
L2-012 关于堆的判断 (25 分) Java实现
思路:首先是建立小顶堆,可以用java的优先队列, 再转换为数组,也可以手动创建更改数组索引从1开始,因为这样的话就能保证索引除2能拿到他的双亲节点根据输入判断命令并且把里面的数值取出来把建立好的小顶堆存到一个HashMap里面,方便查找,因为val的值有负数,所以用数组不太方便上代码:package pta;import java.util.Arrays;import java.util.HashMap;import java.util.Map;import java.util.原创 2021-08-27 09:39:59 · 317 阅读 · 0 评论 -
八大排序算法详解(java版)
1.冒泡排序//冒泡排序 //冒泡排序就是每次选择一个最大值放到后面 public void bubbleSort(int[] arr) { //外层循环控制需要比较的次数 一共是n-1次 for(int i=0; i<arr.length-1; i++) { //内层循环进行冒泡,因为每完成一次外层循环,就会在后面多一个有序序列,因此可以不用比较 for(int j=0; j<arr.length-i-1; j++) { if(arr[j]>ar原创 2021-05-14 20:29:32 · 488 阅读 · 0 评论 -
栈数据结构的实现
本文采用java实现栈结构栈的特点是先进后出首先定义栈结构和其中的基本方法public class StackDemo { //初始容量为10 private int[] arr = new int[10]; private int flag = 0; //入栈方法 public void push(int val){ //判断数组是否需要扩容 if(flag==arr.length) { int[] newArr = new int[2*arr.length];原创 2021-05-11 18:13:04 · 56 阅读 · 0 评论 -
java单向链表和双向链表的反转(迭代和递归)
单向链表反转(逆置)//定义单链表的节点public class ListNode { int data; ListNode next; public ListNode(int val) { this.data = val; } }方法一:迭代法(遍历)//单向链表反转,迭代反转public ListNode reverse1(ListNode head) { //参数传入链表的头指针(不带头结点) if(head==null || head.next==null) ret原创 2021-05-11 12:57:28 · 645 阅读 · 0 评论