算法
风亦未止
小白一枚
展开
-
【算法】蒙德里安的梦想
例如当 N=2,M=4 时,共有 5 种方案。当 N=2,M=3 时,共有 3 种方案。求把 N×M 的棋盘分割成若干个 1×2 的长方形,有多少种方案。当输入用例 N=0,M=0 时,表示输入终止,且该用例无需处理。每组测试用例占一行,包含两个整数 N 和 M。每个测试用例输出一个结果,每个结果占一行。核心 : 先放横着的,再放竖着的。输入包含多组测试用例。原创 2023-06-24 14:34:24 · 207 阅读 · 1 评论 -
相差为k的数对数量
思路:使用哈希表存储每个出现的次数,枚举原数组,将每个数字 加上 或减去 k,如果哈希表中存在加上或减去k之后的数,答案累加上该数出现的次数。+ - 操作后,将枚举的数字在哈希表中减去 1 ,避免后续出现重复。原创 2023-04-18 19:33:30 · 139 阅读 · 0 评论 -
【算法】得分最高的单词集合Leetcode.1255
根据字母得分情况表score,字母 ‘a’, ‘b’, ‘c’, …, ‘z’ 对应的得分分别为 score[0], score[1], …请你帮忙计算玩家在单词拼写游戏中所能获得的「最高得分」:能够由 letters 里的字母拼写出的 任意 属于 words 单词子集中,分数最高的单词集合的得分。你将会得到一份单词表 words,一个字母表 letters (可能会有重复字母),以及每个字母对应的得分情况表 score。本场游戏的「得分」是指:玩家所拼写出的单词集合里包含的所有字母的得分之和。原创 2023-02-27 23:58:49 · 136 阅读 · 0 评论 -
【算法】笨拙的手指
奶牛贝茜正在学习如何在不同进制之间转换数字。但是她总是犯错误,因为她无法轻易的用两个前蹄握住笔。每当贝茜将数字转换为一个新的进制并写下结果时,她总是将其中的某一位数字写错。例如,如果她将数字 14 转换为二进制数,那么正确的结果应为 1110,但她可能会写下 0110 或 1111。贝茜不会额外添加或删除数字,但是可能会由于写错数字的原因,写下包含前导 0 的数字。给定贝茜将数字 N 转换为二进制数字以及三进制数字的结果,请确定 N 的正确初始值(十进制表示)。输入格式。原创 2023-02-24 09:54:10 · 112 阅读 · 0 评论 -
【算法】八数码
在一个 3×3 的网格中,1∼8这 8 个数字和一个x恰好不重不漏地分布在这 3×3 的网格中。在游戏过程中,可以把x与其上、下、左、右四个方向之一的数字交换(如果存在)。例如,示例中图形就可以通过让x先后与右、下、右三个方向的数字交换成功得到正确排列。现在,给你一个初始网格,请你求出得到正确排列至少需要进行多少次交换。原创 2023-01-11 18:15:35 · 124 阅读 · 0 评论 -
【算法】食物链
思路:初始化n个集合,p[x] = x 为祖宗节点,祖宗节点的不同表示不同的集合。定义一个数组d,代表每个节点到祖宗节点的距离,d[x] mod 3 得到的结果0,1,2 表示不同的动物。对每个说法进行分析,如果说 x和y不在同一个集合,将x与y存入同一个集合中,根据符合题意的说法更新距离d[x]与d[y]。原创 2023-01-04 20:56:27 · 312 阅读 · 0 评论 -
【算法】模拟队列
使用数组模拟,hh为队头指针,tt为队尾指针,当队列为空时 tt < hh原创 2022-12-07 14:48:27 · 281 阅读 · 0 评论 -
【算法】二分模板
2.将区间[l, r]被分为[l, mid-1]和[mid, r]时使用。将区间[l, r]被分为[l, mid]和[mid+1, r]时使用。原创 2022-11-27 23:15:54 · 102 阅读 · 0 评论 -
【蓝桥】植树
题目描述小明和朋友们一起去郊外植树,他们带了一些在自己实验室精心研究出的小树苗。小明和朋友们一共有 n个人,他们经过精心挑选,在一块空地上每个人挑选了一个适合植树的位置,总共 n个。他们准备把自己带的树苗都植下去。然而,他们遇到了一个困难:有的树苗比较大,而有的位置挨太近,导致两棵树植下去后会撞在一起。他们将树看成一个圆,圆心在他们找的位置上。如果两棵树对应的圆相交,这两棵树就不适合同时植下(相切不受影响),称为两棵树冲突。小明和朋友们决定先合计合计,只将其中的一部分树植下去,保证没有互相冲突的树原创 2021-12-19 17:15:15 · 896 阅读 · 2 评论 -
Leetcode206.反转链表
206. 反转链表给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]输入:head = [1,2]输出:[2,1]双指针:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNod原创 2021-12-12 18:52:37 · 383 阅读 · 0 评论 -
【蓝桥】跳跃
题目描述小蓝在一个 n行 m列的方格图中玩一个游戏。开始时,小蓝站在方格图的左上角,即第 11 行第 11 列。小蓝可以在方格图上走动,走动时,如果当前在第 r 行第 c列,他不能走到行号比 r 小的行,也不能走到列号比 c 小的列。同时,他一步走的直线距离不超过 33。例如,如果当前小蓝在第 33 行第 55 列,他下一步可以走到第 33 行第 66 列、第 33 行第 77 列、第 33 行第 88 列、第 44 行第 55 列、第 44 行第 66 列、第 44 行第 77 列、第 55 行第原创 2021-12-05 18:19:37 · 2932 阅读 · 0 评论 -
LeetCode506.相对名次
LeetCode506. 相对名次给出 N 名运动员的成绩,找出他们的相对名次并授予前三名对应的奖牌。前三名运动员将会被分别授予 “金牌”,“银牌” 和“ 铜牌”(“Gold Medal”, “Silver Medal”, “Bronze Medal”)。(注:分数越高的选手,排名越靠前。)示例:输入: [5, 4, 3, 2, 1]输出: ["Gold Medal", "Silver Medal", "Bronze Medal", "4", "5"]解释: 前三名运动员的成绩为前三高的,因此将原创 2021-10-31 17:39:00 · 144 阅读 · 0 评论 -
LeetCode 496.下个更大的数
LeetCode 496. 下一个更大元素 I给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。请你找出 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。示例:输入: nums1 = [4,1,2], nums2 = [1,3,4,2].输出: [-1,3,-1]解释: 对于原创 2021-10-24 17:31:41 · 2369 阅读 · 0 评论 -
LeetCode 495. 提莫攻击
LeetCode 495. 提莫攻击题目:在《英雄联盟》的世界中,有一个叫 “提莫” 的英雄,他的攻击可以让敌方英雄艾希(编者注:寒冰射手)进入中毒状态。现在,给出提莫对艾希的攻击时间序列和提莫攻击的中毒持续时间,你需要输出艾希的中毒状态总时长。你可以认为提莫在给定的时间点进行攻击,并立即使艾希处于中毒状态。示例1:输入: [1,4], 2输出: 4原因: 第 1 秒初,提莫开始对艾希进行攻击并使其立即中毒。中毒状态会维持 2 秒钟,直到第 2 秒末结束。第 4 秒初,提莫再次攻击艾希,使得艾原创 2021-10-17 19:00:06 · 75 阅读 · 0 评论 -
【算法】字符串中的单词数
力扣第434题:字符串中的单词数统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。请注意,你可以假定字符串里不包括任何不可打印的字符。示例:输入: “Hello, my name is John”输出: 5解释: 这里的单词是指连续的不是空格的字符,所以 “Hello,” 算作 1 个单词。解题:1.做字符的拆分:s.split(" "),得到一个新的数组", , , , ( 空格空格空格 )a, eaefa" 这个测试用例,数组中会存在 “” 元素,这不是我们想要的,所以需要原创 2021-10-07 16:27:02 · 201 阅读 · 0 评论 -
递归版二分查找
递归版二分查找使用递归进行二分查找,可以拆分成多个子问题。全范围二分查找:等价于三个子问题:左边找(递归)中间比右边找(递归) public static int binarySearch(int findNum,int front,int end,int[] nums){ if (end<front){ return -1; } int mid=(front+end)/2; if (find原创 2021-09-24 17:39:00 · 112 阅读 · 0 评论 -
判断是否为2的整数次方
用一条语句判断一个整数是不是2的整数次方。在二进制中,2的整数次方的数只有一个1,用位运算&就可做判断if((num-1)&num==0){ System.out.println("是2的整数次方");}原创 2021-09-17 10:24:58 · 83 阅读 · 0 评论 -
【算法】二进制中1的个数
题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例: 9的二进制表示为1001,有2位是1解法一:思路:用1从右到左比对二进制上的每一位,&运算为1的做计数。public static int oneNum(int num){ int count=0; for (int j = 1; j <=32; j++) { if ((num&(1<<j))==(1<<j)){原创 2021-09-15 18:49:09 · 153 阅读 · 0 评论 -
位运算-异或
位运算-异或运算异或运算特点:一个数和 0 做 XOR 运算等于本身:a⊕0 = a一个数和其本身做 XOR 运算等于 0:a⊕a = 0XOR 运算满足交换律和结合律:a⊕b⊕a = (a⊕a)⊕b = 0⊕b = b异或解法一般用于消除相同的数,运算满足交换律:a^ b^ a=a^ a^ b=b,如LeetCode第136题:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现原创 2021-09-15 17:44:39 · 541 阅读 · 0 评论