![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
Immature_7
努力努力再努力
展开
-
408计算机考研--数据结构--2020年统考真题(C语言)
2020年408统考真题(C语言)一、题目描述定义三元组(a,b,c)(a、b、c均为正数)的距离D=|a-b|+|b-c|+|c-a|。给定3个非空整数集合S1、S2、S3,按升序分别存储在3个数组中。请设计一个尽可能高效的算法,计算并输出所有可能的三元组(a,b,c)(a∈S1,b∈S2,c∈S3)中的最小距离。例如S1={-1,0,9},S2={-25,-10,10,11},S3={2,9,17,30,41},则最小距离为2,相应的三元组为(9,10,9)。二、算法的基本思想①使用Dmin记录原创 2021-08-24 19:06:04 · 3146 阅读 · 0 评论 -
408计算机考研--数据结构--2016年统考真题(C语言)
标题408数据结构–2016年统考真题(C语言)一、题目描述已知由n(n>=2)个正整数构成的集合A={ak|0<=k<n},将其划分为两个不相交的子集A1和A2,元素个数分别是n1和n2,A1和A2中的元素之和分别为S1和S2。设计一个尽可能高效的划分算法,满足|n1-n2|最小且|S1-S2|最大。要求:给出算法的基本设计思想。根据设计思想,采用C或C++语言描述算法,关键之处给出注释说明你所设计的算法的平均时间复杂度和空间复杂度。二、解决思路1. 暴力法–排序直接原创 2021-07-16 18:48:15 · 2420 阅读 · 0 评论 -
算法练习贴--75--在排序数组中查找元素的第一个和最后一个位置(C语言)
标题在排序数组中查找元素的第一个和最后一个位置(C语言)一、题目描述给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。(题目来源:力扣(LeetCode))进阶:你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?示例 1:输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]示例 2:输入:nums = [原创 2021-07-16 12:15:37 · 437 阅读 · 0 评论 -
算法练习帖--74--在排序数组中查找数字 I(C语言)
在排序数组中查找数字 I(C语言)一、题目描述统计一个数字在排序数组中出现的次数。(题目来源:力扣(LeetCode))示例 1输入: nums = [5,7,7,8,8,10], target = 8输出: 2示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: 0限制:0 <= 数组长度 <= 50000二、解决方法二分查找int search(int* nums, int numsSize, int target)原创 2021-07-16 11:57:48 · 133 阅读 · 0 评论 -
408计算机考研--数据结构--二叉排序树学习(C语言)
二叉排序树一、二叉排序树(创建、增删改查)学习#include<stdio.h>#include<stdlib.h>typedef struct BSTNode{ int key; struct BSTNode *lchild,*rchild;}BSTNode,*BSTree;//在二叉排序树插入关键字为k的新结点(递归实现),时间复杂度:O(h)-O(n)之间 int BST_Insert(BSTree &T,int k){ if(T==NULL){/原创 2021-07-09 19:03:09 · 206 阅读 · 0 评论 -
408计算机考研--数据结构--线索化二叉树学习(C语言)
线索化二叉树学习(C语言)一、线索二叉树的基本概念 传统的二叉链表存储仅能体现一种父子关系,不能直接得到结点在遍历中的前驱或后继。我们知道,在含n个结点的二叉树中,有n+1个空指针。利用这些空指针来存放其前驱或后继的指针,这样就可以使得我们在遍历二叉树时可以像遍历单链表那样方便。引入线索二叉树正是为了加快查找结点前驱和后继的速度。(有三种线索化二叉树,分别是先序线索化二叉树、中序线索化二叉树以及后序线索化二叉树)二、中序线索化二叉树创建、找前驱、找后继以及遍历#include<stdio.h原创 2021-07-08 18:01:23 · 575 阅读 · 0 评论 -
408计算机考研--数据结构--二叉树学习(C语言)
二叉树学习一、二叉树的前中后序递归遍历及应用(求树深度)#include<stdio.h>#inlcude<stdlib.h>typedef struct BiTNode{ int data; struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;//先序遍历void PreOrder(BiTree T){ if(T!=NULL){ visit(T);//访问根节点 PreOrder(T.lchild);//原创 2021-07-08 17:50:30 · 286 阅读 · 0 评论 -
算法练习贴--73--错误的集合(C语言)
错误的集合(C语言)一、题目描述集合 s 包含从 1 到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个数字复制了成了集合里面的另外一个数字的值,导致集合 丢失了一个数字 并且 有一个数字重复 。给定一个数组 nums 代表了集合 S 发生错误后的结果。请你找出重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。(题目来源:力扣(LeetCode))示例 1:输入:nums = [1,2,2,4]输出:[2,3]示例 2:输入:nums = [1,1]输出:[1,2]原创 2021-07-05 18:49:24 · 230 阅读 · 0 评论 -
408计算机考研--数据结构--队列学习(C语言)
队列学习(C语言)一、队列的顺序存储方式#include<stdio.h>#include<stdlib.h>#define MaxSize 10typedef struct SqQueue{ int data[MaxSize];//存储队列数据 int front,rear;//队头,队尾指针 }SqQueue; //初始化队列 void Init_SqQueue(SqQueue &Q){ Q.front=Q.rear=0;}//判队空boo原创 2021-07-03 16:14:37 · 210 阅读 · 0 评论 -
408计算机考研--数据结构--栈学习(C语言)
栈学习(C语言)一、栈的基本概念 栈(Stack)是只允许在一端进行插入或删除操作的线性表。首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作。栈顶(top):线性表允许进行插入和删除的那一端。栈底(Bottom):固定的,不允许进行插入和删除的另一端。空栈:不含任何元素的空表。二、栈的顺序存储结构#include<stdio.h>#include<stdlib.h> #define MaxSize 10 //定义栈中元素的最大个数typed原创 2021-07-02 22:23:05 · 694 阅读 · 2 评论 -
408计算机考研--数据结构--快慢指针学习(C语言指针)
快慢指针学习(C语言指针)一、判断环形链表1.1、题目描述给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。力扣(LeetCode)进阶:你能用 O(1)(原创 2021-07-02 18:04:15 · 730 阅读 · 2 评论 -
算法练习帖--72--重排链表(C语言)
重排链表一、题目描述给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。(题目来源:力扣(LeetCode))示例 1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 2:给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3原创 2021-07-02 17:06:19 · 492 阅读 · 0 评论 -
算法练习帖--71--反转链表(C语言)
反转链表一、题目描述定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。(题目来源:力扣官网)示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL 限制:0 <= 节点个数 <= 5000二、解决方法1.头插法struct ListNode* reverseList(struct ListNode* head){ if(head==NULL|原创 2021-07-01 23:12:05 · 135 阅读 · 1 评论 -
408统考真题--线性表(2013年)
[2013统考真题]已知一个整数序列A=(a0,a1,···,an-1),其中0<=ai<n(0<=i<n)。若存在ap1=ap2=···=apm=x且m>n/2(0<=pk<n,1<=k<=m),则称x为A的主元素。例如A=(0,5,5,3,5,7,5,5),则5为主元素;又如A=(0,5,5,3,5,1,5,7),则A中没有主元素。假设A中的n个元素保存在一个一维数组中,请设计一个尽可能高效的算法,找出A的主元素。若存在主元素,则输出该元素;否则输原创 2021-07-01 21:35:13 · 941 阅读 · 0 评论 -
算法练习贴--70--寻找两个正序数组的中位数(C语言)
寻找两个正序数组的中位数(C语言)一、题目描述给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。(题目来源:力扣(LeetCode))示例 1:输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2示例 2:输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数原创 2021-06-30 23:38:40 · 988 阅读 · 2 评论 -
算法练习帖--69--数据流中的第 K 大元素(java)
数据流中的第 K 大元素(java)一、题目简介设计一个找到数据流中第 k 大元素的类(class)。注意是排序后的第 k 大元素,不是第 k 个不同的元素。请实现 KthLargest 类:KthLargest(int k, int[] nums) 使用整数 k 和整数流 nums 初始化对象。int add(int val) 将 val 插入数据流 nums 后,返回当前数据流中第 k 大的元素。(题目来源:力扣(LeetCode))示例:输入:["KthLargest", "add"原创 2021-02-11 15:28:11 · 140 阅读 · 1 评论 -
算法练习帖--68--最长湍流子数组(Java)
最长湍流子数组一、题目简介当 A 的子数组 A[i], A[i+1], …, A[j] 满足下列条件时,我们称其为湍流子数组:若 i <= k < j,当 k 为奇数时, A[k] > A[k+1],且当 k 为偶数时,A[k] < A[k+1];或 若 i <= k < j,当 k 为偶数时,A[k] > A[k+1] ,且当 k 为奇数时, A[k] < A[k+1]。也就是说,如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是湍流子数原创 2021-02-08 14:40:52 · 164 阅读 · 0 评论 -
算法练习帖--67--可获得的最大点数(Java)
可获得的最大点数一、题目简介几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 k 张卡牌。你的点数就是你拿到手中的所有卡牌的点数之和。给你一个整数数组 cardPoints 和整数 k,请你返回可以获得的最大点数。(题目来源:力扣(LeetCode))示例 1:输入:cardPoints = [1,2,3,4,5,6,1], k = 3输出:12解释:第一次行动,不管拿哪张牌,你的点原创 2021-02-06 15:34:51 · 146 阅读 · 0 评论 -
算法练习帖--66--最小体力消耗路径(Java)
最小体力消耗路径(Java)一、题目简介你准备参加一场远足活动。给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表示格子 (row, col) 的高度。一开始你在最左上角的格子 (0, 0) ,且你希望去最右下角的格子 (rows-1, columns-1) (注意下标从 0 开始编号)。你每次可以往 上,下,左,右 四个方向之一移动,你想要找到耗费 体力 最小的一条路径。一条路径耗费的 体力值 是路径上相邻格子之间 高度差绝对值 的 最原创 2021-02-05 17:17:40 · 549 阅读 · 2 评论 -
算法练习帖--65--尽可能使字符串相等(Java)
尽可能使字符串相等一、题目简介给你两个长度相同的字符串,s 和 t。将 s 中的第 i 个字符变到 t 中的第 i 个字符需要 |s[i] - t[i]| 的开销(开销可能为 0),也就是两个字符的 ASCII 码值的差的绝对值。用于变更字符串的最大预算是 maxCost。在转化字符串时,总开销应当小于等于该预算,这也意味着字符串的转化可能是不完全的。如果你可以将 s 的子字符串转化为它在 t 中对应的子字符串,则返回可以转化的最大长度。如果 s 中没有子字符串可以转化成 t 中对应的子字符串,原创 2021-02-05 10:54:31 · 145 阅读 · 0 评论 -
算法练习帖--64--交换字符串中的元素(Java)
交换字符串中的元素(Java)一、题目简介给你一个字符串 s,以及该字符串中的一些「索引对」数组 pairs,其中 pairs[i] = [a, b] 表示字符串中的两个索引(编号从 0 开始)。你可以 任意多次交换 在 pairs 中任意一对索引处的字符。返回在经过若干次交换后,s 可以变成的按字典序最小的字符串。(题目来源:力扣(LeetCode))示例 1:输入:s = "dcab", pairs = [[0,3],[1,2]]输出:"bacd"解释: 交换 s[0] 和 s[3]原创 2021-02-04 14:58:52 · 194 阅读 · 0 评论 -
克鲁斯卡尔算法学习(Java)
克鲁斯卡尔算法(Java)学习视频:尚硅谷韩老师java讲解数据结构和算法一、应用场景-公交站问题某城市新增 7 个站点(A, B, C, D, E, F, G) ,现在需要修路把 7 个站点连通各个站点的距离用边线表示(权) ,比如 A – B 距离 12 公里问:如何修路保证各个站点都能连通,并且总的修建公路总里程最短?二、克鲁斯卡尔算法介绍2.1、以城市公交站问题来图解说明 克鲁斯卡尔算法的原理和步骤:在含有 n 个顶点的连通图中选择 n-1 条边,构成一棵极小连通子图,并使该连原创 2021-02-03 20:31:40 · 421 阅读 · 0 评论 -
算法练习帖--63--冗余连接(Java)
冗余连接一、题目简介在本问题中, 树指的是一个连通且无环的无向图。输入一个图,该图由一个有着N个节点 (节点值不重复1, 2, …, N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。结果图是一个以边组成的二维数组。每一个边的元素是一对[u, v] ,满足 u < v,表示连接顶点u 和v的无向图的边。返回一条可以删去的边,使得结果图是一个有着N个节点的树。如果有多个答案,则返回二维数组中最后出现的边。答案边 [u, v] 应满足相同的格式原创 2021-02-02 22:02:09 · 144 阅读 · 0 评论 -
算法练习帖--62--替换后的最长重复字符(Java)
替换后的最长重复字符一、题目简介给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。注意:字符串长度 和 k 不会超过 104。(题目来源:力扣(LeetCode))示例 1:输入:s = "ABAB", k = 2输出:4解释:用两个'A'替换为两个'B',反之亦然。示例 2:输入:s = "AABABBA", k = 1输出:4解释:将中间的一个'A'替换为'B',字符串变原创 2021-02-02 12:25:41 · 205 阅读 · 3 评论 -
算法练习帖--61--省份数量(Java)
省份数量一、题目描述有 n 个城市,其中一些彼此相连,另一些没有相连。如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连。省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。给你一个 n x n 的矩阵 isConnected ,其中 isConnected[i][j] = 1 表示第 i 个城市和第 j 个城市直接相连,而 isConnected[i][j] = 0 表示二者不直接相连。返回矩阵中 省份 的数量。(题目来源:力扣(原创 2021-02-01 21:36:14 · 424 阅读 · 0 评论 -
普里姆算法学习(Java)
普里姆算法学习(Java)学习视频:尚硅谷韩老师java讲解数据结构和算法一、应用场景-修路问题1.1、看一个应用场景和问题:有胜利乡有 7 个村庄(A, B, C, D, E, F, G) ,现在需要修路把 7 个村庄连通各个村庄的距离用边线表示(权) ,比如 A – B 距离 5 公里问:如何修路保证各个村庄都能连通,并且总的修建公路总里程最短?思路: 将 10 条边,连接即可,但是总的里程数不是最小.正确的思路:就是尽可能的选择少的路线,并且每条路线最小,保证总里程数最少二、最原创 2021-02-01 15:35:17 · 441 阅读 · 1 评论 -
算法练习帖--60--公平的糖果棒交换(Java)
公平的糖果棒交换一、题目描述爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝拥有的第 i 根糖果棒的大小,B[j] 是鲍勃拥有的第 j 根糖果棒的大小。因为他们是朋友,所以他们想交换一根糖果棒,这样交换后,他们都有相同的糖果总量。(一个人拥有的糖果总量是他们拥有的糖果棒大小的总和。)返回一个整数数组 ans,其中 ans[0] 是爱丽丝必须交换的糖果棒的大小,ans[1] 是 Bob 必须交换的糖果棒的大小。如果有多个答案,你可以返回其中任何一个。保证答案存在。(题目来源:力扣(LeetCod原创 2021-02-01 10:56:17 · 142 阅读 · 0 评论 -
算法练习帖--59--相似字符串组(Java)
相似字符串组一、题目简介如果交换字符串 X 中的两个不同位置的字母,使得它和字符串 Y 相等,那么称 X 和 Y 两个字符串相似。如果这两个字符串本身是相等的,那它们也是相似的。例如,“tars” 和 “rats” 是相似的 (交换 0 与 2 的位置); “rats” 和 “arts” 也是相似的,但是 “star” 不与 “tars”,“rats”,或 “arts” 相似。总之,它们通过相似性形成了两个关联组:{“tars”, “rats”, “arts”} 和 {“star”}。注意,“tar原创 2021-01-31 20:32:20 · 233 阅读 · 0 评论 -
贪心算法--集合覆盖问题(Java)
贪心算法–集合覆盖问题(Java)学习视频:尚硅谷韩老师java讲解数据结构和算法一、贪心算法介绍1.贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而 希望能够导致结果是最好或者最优的算法2.贪婪算法所得到的结果不一定是最优的结果(有时候会是最优解),但是都是相对近似(接近)最优解的结果二、贪心算法最佳应用-集合覆盖2.1、题目描述假设存在如下表的需要付费的广播台,以及广播台信号可以覆盖的地区。 如何选择最少的广播台,让所有 的地区都可以接收原创 2021-01-30 20:21:32 · 594 阅读 · 0 评论 -
KMP算法学习(Java、C语言)
KMP算法学习(Java)学习视频:尚硅谷韩老师Java讲解数据结构与算法学习资料:很详尽KMP算法(厉害)一、代码实现1:最大长度表package com.lxf.kmp;public class KMP { public static void main(String[] args) { String str1="BBC ABCDAB ABCDABCDABDE"; String str2="ABCDABD"; System.out.p原创 2021-01-30 17:25:09 · 94 阅读 · 0 评论 -
动态规划的四个最佳实践--Leecode的四个股票题(Java)
动态规划的四个最佳实践–Leecode的四个股票题(Java)一、 买卖股票的最佳时机(不是动规,作为引入)1.1、题目简介给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。(题目来源:力扣(LeetCode))示例 1:输入:[7,1,5,3,6原创 2021-01-30 11:55:43 · 253 阅读 · 0 评论 -
动态规划算法--0/1背包问题求解(Java)
动态规划算法–0/1背包问题求解(Java)学习视频:尚硅谷韩老师Java讲解数据结构与算法一、动态规划算法介绍动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解 的处理算法动态规划算法与分治算法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这 些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。 ( 即下一个子 阶段的求解是建立在上一个子阶段原创 2021-01-28 12:46:22 · 914 阅读 · 0 评论 -
算法练习帖--58--寻找数组的中心索引(Java)
寻找数组的中心索引一、题目描述给定一个整数类型的数组 nums,请编写一个能够返回数组 “中心索引” 的方法。我们是这样定义数组 中心索引 的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。如果数组不存在中心索引,那么我们应该返回 -1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。(题目来源:力扣(LeetCode))示例 1:输入:nums = [1, 7, 3, 6, 5, 6]输出:3解释:索引 3 (nums[3] = 6) 的左侧数之和 (1 +原创 2021-01-28 10:54:13 · 237 阅读 · 0 评论 -
算法练习帖--57--保证图可完全遍历(Java)
保证图可完全遍历(并查集)一、题目简介Alice 和 Bob 共有一个无向图,其中包含 n 个节点和 3 种类型的边:类型 1:只能由 Alice 遍历。类型 2:只能由 Bob 遍历。类型 3:Alice 和 Bob 都可以遍历。给你一个数组 edges ,其中 edges[i] = [typei, ui, vi] 表示节点 ui 和 vi 之间存在类型为 typei 的双向边。请你在保证图仍能够被 Alice和 Bob 完全遍历的前提下,找出可以删除的最大边数。如果从任何节点开始,Alic原创 2021-01-27 19:53:25 · 142 阅读 · 2 评论 -
算法练习帖--56--由斜杠划分区域(Java)
由斜杠划分区域(并查集)一、题目简介在由 1 x 1 方格组成的 N x N 网格 grid 中,每个 1 x 1 方块由 /、\ 或空格构成。这些字符会将方块划分为一些共边的区域。(请注意,反斜杠字符是转义的,因此 \ 用 “\” 表示。)。返回区域的数目。(题目来源:力扣(LeetCode))示例 1:输入:[ " /", "/ "]输出:2解释:2x2 网格如下:示例 2:输入:[ " /", " "]输出:1解释:2x2 网格如下:示例原创 2021-01-26 21:39:01 · 189 阅读 · 0 评论 -
算法练习帖--55--等价多米诺骨牌对的数量(Java)
等价多米诺骨牌对的数量一、题目简介给你一个由一些多米诺骨牌组成的列表 dominoes。如果其中某一张多米诺骨牌可以通过旋转 0 度或 180 度得到另一张多米诺骨牌,我们就认为这两张牌是等价的。形式上,dominoes[i] = [a, b] 和 dominoes[j] = [c, d] 等价的前提是 ac 且 bd,或是 ad 且 bc。在 0 <= i < j < dominoes.length 的前提下,找出满足 dominoes[i] 和 dominoes[j] 等价的原创 2021-01-26 15:10:20 · 228 阅读 · 1 评论 -
分治算法--汉诺塔问题求解(Java)
分治算法–汉诺塔问题求解(Java)一、分治算法介绍分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或 相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题 的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……分治算法可以求解的一些经典问题:二分搜索大整数乘法棋盘覆盖归并排序快速排序线性时间选择最接近点对问题循环赛日程表汉诺塔二、分治原创 2021-01-25 20:54:19 · 235 阅读 · 4 评论 -
算法练习帖--54--岛屿数量(Java)
岛屿数量(DFS、BFS、并查集)一、题目简介给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。(题目来源:力扣(LeetCode))示例 1:输入:grid = [ ["1","1","1","1","0"], ["1","1","0","1","0"], ["1","1","0","0","0"], ["0","0",原创 2021-01-25 18:48:51 · 275 阅读 · 1 评论 -
算法练习帖--53--将整数按权重排序(Java)
将整数按权重排序一、题目简介我们将整数 x 的 权重 定义为按照下述规则将 x 变成 1 所需要的步数:如果 x 是偶数,那么 x = x / 2如果 x 是奇数,那么 x = 3 * x + 1比方说,x=3 的权重为 7 。因为 3 需要 7 步变成 1 (3 --> 10 --> 5 --> 16 --> 8 --> 4 --> 2 --> 1)。给你三个整数 lo, hi 和 k 。你的任务是将区间 [lo, hi] 之间的整数按照它们的权重 升原创 2021-01-24 19:16:21 · 285 阅读 · 0 评论 -
算法练习帖--52--找到小镇的法官(Java)
找到小镇的法官一、题目描述在一个小镇里,按从 1 到 N 标记了 N 个人。传言称,这些人中有一个是小镇上的秘密法官。如果小镇的法官真的存在,那么:小镇的法官不相信任何人。每个人(除了小镇法官外)都信任小镇的法官。只有一个人同时满足属性 1 和属性 2 。给定数组 trust,该数组由信任对 trust[i] = [a, b] 组成,表示标记为 a 的人信任标记为 b 的人。如果小镇存在秘密法官并且可以确定他的身份,请返回该法官的标记。否则,返回 -1。(题目来源:力扣(LeetCode)原创 2021-01-24 16:13:54 · 246 阅读 · 0 评论