
算法
始七月上
qqqqqqq
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
牛客练习-整数拆分(完全背包,可重复方案数)
题目描述一个整数总可以拆分为2的幂的和,例如: 7=1+2+4 7=1+2+2+2 7=1+1+1+4 7=1+1+1+2+2 7=1+1+1+1+1+2 7=1+1+1+1+1+1+1 总共有六种不同的拆分方式。 再比如:4可以拆分成:4 = 4,4 = 1 + 1 + 1 + 1,4 = 2 + 2,4=1+1+2。 用f(n)表示n的不同拆分的种数,例如f(7)=6. 要求编写程序,读入n...原创 2019-11-08 22:29:08 · 381 阅读 · 0 评论 -
牛客网-代理服务器(贪心思想)
使用代理服务器能够在一定程度上隐藏客户端信息,从而保护用户在互联网上的隐私。我们知道n个代理服务器的IP地址,现在要用它们去访问m个服务器。这 m 个服务器的 IP 地址和访问顺序也已经给出。系统在同一时刻只能使用一个代理服务器,并要求不能用代理服务器去访问和它 IP地址相同的服务器(不然客户端信息很有可能就会被泄露)。在这样的条件下,找到一种使用代理服务器的方案,使得代理服务器切换的次数尽可能得...原创 2019-11-03 00:16:26 · 255 阅读 · 0 评论 -
leetcode练习-337. 打家劫舍 III(dfs,记忆化)
在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。示例 1:输入: [3,2,3,n...原创 2019-09-16 20:58:07 · 211 阅读 · 0 评论 -
leetcode 练习148.排序链表(快慢指针,链表归并排序)
在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5来源:力扣(LeetCode)链接:https://leetcode-cn.c...原创 2019-09-15 09:42:40 · 261 阅读 · 0 评论 -
leetcode练习——不同的二叉搜索树(动态规划)
给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树:1 3 3 2 1\ / / / \ 3 2 1 1 3 2/ / \ ...原创 2019-09-12 19:18:01 · 216 阅读 · 0 评论 -
leetcode练习最小路径和(动态规划)
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/minimu...原创 2019-09-12 17:21:49 · 194 阅读 · 0 评论 -
leetcode练习-Combination Sum(排列组合,回溯法)
Given a set of candidate numbers (candidates) (without duplicates) and a target number (target), find all unique combinations in candidates where the candidate numbers sums to target.The same repeate...原创 2019-09-11 23:06:53 · 414 阅读 · 0 评论 -
leetcode练习比特位计数(位运算)
给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。示例 1:输入: 2输出: [0,1,1]示例 2:输入: 5输出: [0,1,1,2,1,2]进阶:给出时间复杂度为O(n*sizeof(integer))的解答非常容易。但你可以在线性时间O(n)内用一趟扫描做到吗?要求算法的空间复杂度为O(n)...原创 2019-09-07 16:46:05 · 241 阅读 · 0 评论 -
leetcode练习~颠倒二进制位(位运算)
示例 1:输入: 00000010100101000001111010011100输出: 00111001011110000010100101000000解释: 输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596,因此返回 964176192,其二进制表示形式为 00111001011110000010100101000000...原创 2019-09-03 17:44:07 · 250 阅读 · 0 评论 -
leetcode练习—— 最大子序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。ans:存放答案也就是最大的和,初始为nums[0]sum:运算过程中保...原创 2019-09-01 12:32:51 · 162 阅读 · 0 评论 -
leetcode练习前 K 个高频元素(优先队列和哈希表的使用)
给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]说明:你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。思路:...原创 2019-08-07 17:17:34 · 251 阅读 · 0 评论 -
leetcode练习无重复字符的最长子串(哈希表的应用和滑动窗口)
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所...原创 2019-08-07 15:23:18 · 175 阅读 · 0 评论 -
leetcode练习两数相加(队列+按位处理较大数据)
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> ...原创 2019-08-08 17:54:36 · 358 阅读 · 0 评论 -
leetcode练习单词搜索 II——(前缀树+BFS java实现)
单词搜索 II给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。示例:输入:words = [“oath”,“pea”,“eat”,“rain”] and board =[[...原创 2019-08-06 14:43:14 · 318 阅读 · 0 评论 -
leetcode练习-213. 打家劫舍 II(动态规划)
你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [2,3,2]输出: 3解释: 你不能...原创 2019-09-16 23:00:57 · 192 阅读 · 0 评论 -
leetcode练习-213. 打家劫舍 II(动态规划)
你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:来源:力扣(LeetCode)链接:https:...原创 2019-09-16 23:38:17 · 268 阅读 · 0 评论 -
leetcode练习-240. 搜索二维矩阵 II(行列有序矩阵的查找)
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例:现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, ...原创 2019-09-26 16:00:52 · 296 阅读 · 0 评论 -
leetcode练习-221. 最大正方形(动态规划)
在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入:1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximal-square著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。d...原创 2019-09-26 14:54:39 · 360 阅读 · 2 评论 -
leetcode练习-560. 和为K的子数组(hashmap实现的动态规划+前缀和问题)
给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长度为 [1, 20,000]。数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。来源:力扣(LeetCode)链接:h...原创 2019-09-24 23:53:23 · 293 阅读 · 0 评论 -
leetcode练习-139. 单词拆分(动态规划+重复背包问题)
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入: s = “leetcode”, wordDict = [“leet”, “code”]输出: true解释: 返回 true 因为 “leetcode” 可以被拆分成...原创 2019-09-24 17:23:37 · 349 阅读 · 0 评论 -
leetcode练习-300. 最长上升子序列(动态规划)
给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2) 。进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗?来源:力扣(LeetC...原创 2019-09-23 11:14:53 · 226 阅读 · 0 评论 -
leetcode练习 -146. LRU缓存机制(双向链表+HashMap实现LinkedHashMap)
运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最近最少使用的数...原创 2019-09-22 23:54:46 · 288 阅读 · 0 评论 -
leetcode练习-416. 分割等和子集(dp 01背包问题)
给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素不会超过 100数组的大小不会超过 200示例 1:输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11].示例 2:输入: [1, 2, 3, 5]输出: false解释: 数组不能分割成两个元素和相等的子集....原创 2019-09-22 12:37:02 · 492 阅读 · 0 评论 -
leetcode练习-399. 除法求值(BFS+回溯)
给出方程式 A / B = k, 其中 A 和 B 均为代表字符串的变量, k 是一个浮点型数字。根据已知方程式求解问题,并返回计算结果。如果结果不存在,则返回 -1.0。示例 :给定 a / b = 2.0, b / c = 3.0问题: a / c = ?, b / a = ?, a / e = ?, a / a = ?, x / x = ?返回 [6.0, 0.5, -1.0, 1....原创 2019-09-21 13:56:45 · 237 阅读 · 0 评论 -
leetcode练习-332. 重新安排行程(BFS+回溯法+访问项的判定)
给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序。所有这些机票都属于一个从JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 出发。说明:如果存在多种有效的行程,你可以按字符自然排序返回最小的行程组合。例如,行程 [“JFK”, “LGA”] 与 [“JFK”, “LGB”] 相比就更小,排序更靠前所有...原创 2019-09-20 22:03:11 · 515 阅读 · 0 评论 -
leetcode练习-310. 最小高度树(图+bfs+拓扑排序+贪心思想)
对于一个具有树特征的无向图,我们可选择任何一个节点作为根。图因此可以成为树,在所有可能的树中,具有最小高度的树被称为最小高度树。给出这样的一个图,写出一个函数找到所有的最小高度树并返回他们的根节点。格式该图包含 n 个节点,标记为 0 到 n - 1。给定数字 n 和一个无向边 edges 列表(每一个边都是一对标签)。你可以假设没有重复的边会出现在 edges 中。由于所有的边都是无向边,...原创 2019-09-19 20:53:13 · 442 阅读 · 0 评论 -
leetcode练习-207. 课程表(拓扑排序+图+BFS)
现在你总共有 n 门课需要选,记为 0 到 n-1。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,判断是否可能完成所有课程的学习?示例 1:输入: 2, [[1,0]]输出: true解释: 总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。所以这是可能的。示例 ...原创 2019-09-17 21:47:02 · 214 阅读 · 0 评论 -
leetcode练习-17. 电话号码的字母组合(BFS)
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:“23”输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。来源:力扣(LeetCode)链接:ht...原创 2019-09-17 19:48:53 · 515 阅读 · 0 评论 -
leetcode练习(二叉树)从中序与后序遍历序列构造二叉树
根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树:3/ 9 20/ 15 7https://leetcode-cn.com/explore/learn/card/data-structure-b...原创 2019-07-28 15:19:52 · 282 阅读 · 0 评论 -
leetcode练习(bfs)113. 路径总和 II
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1返回:...原创 2019-07-25 21:45:42 · 211 阅读 · 0 评论 -
1040 有几个PAT (25 分)
我的思路如下:先统计整个字符串中的T出现的次数用T记录。然后遍历字符串,遇到A就算这个A之前的P*T的个数+sum遇到‘P’就使P得次数+1,‘T’就使T的次数-1,因为我们算的时候只是在乎A左边P和右边 T的次数,在遍历的时候遇到A表示下一个A左边多了一个P,遇到P表示下一个A的右边少了一个T,这样的话就是一种动态的计算。#include<stdio.h>int mai...原创 2019-05-04 16:52:55 · 389 阅读 · 0 评论 -
PAT1012 数字分类 (20 分)
测试点8 错误1012 数字分类 (20 分)给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字:A1 = 能被 5 整除的数字中所有偶数的和;A2 = 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 n1 −n2 +n3 −n4 ⋯;A3 = 被 5 除后余 2 的数字的个数;A4...原创 2019-04-24 14:28:50 · 186 阅读 · 0 评论 -
PAT1020 月饼 (25 分)
测试点3的问题在于剩余的需求还存在,但是库存没有了,我的前面的判断出循环的条件是需求没了并且N不是0,修改在于当前种类的月饼库存小于剩余需求,并且此种类是排序后的嘴一个元素#include<stdio.h>struct product{ double save; double sumprice; double per;//单价用来最为选择的标准 };void sor...原创 2019-04-26 21:38:21 · 272 阅读 · 0 评论 -
1007 素数对猜想 (20 分)
第一次交的时候显示运行超时,死循环?还是值太大?排除第一种,在网上参考别人的博客后有以下两点优化。1.对于<=2的数字是可以略过,循环从i=3开始,每次i=i+2,偶数一定不是奇数,减少判断2.在素数判断时,循环的上限为sqrt(n)(闭区间)代码如下:#include<stdio.h>#include<math.h>int prime(int n){...原创 2019-04-22 18:17:56 · 132 阅读 · 0 评论 -
1019 数字黑洞 (20 分)
测试点,2,5不过。2.回顾题目后发现是在输出的地方没有对四位数做限制,而是直接输出两数之差(0999和999),5.就是在题目的一句话的含义,6174以差的形式输出,我之前的代码是直接放到循环的开头判断输入的是否是6174,否则…改了后是在算出差之后再判断是否是6174.AC码如下#include<stdio.h>void sort(int *a,int n)//升序排序 ...原创 2019-04-26 16:42:17 · 485 阅读 · 0 评论 -
PAT1017 A除以B (20 分)
本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。输入格式:输入在一行中依次给出 A 和 B,中间以 1 空格分隔。输出格式:在一行中依次输出 Q 和 R,中间以 1 空格分隔。输入样例:123456789050987654321 7输出样例:17636684150141093474 3...原创 2019-04-25 22:55:56 · 129 阅读 · 0 评论 -
PTA结构体
本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中奇数值的结点重新组成一个新的链表。链表结点定义如下:struct ListNode {int data;ListNode *next;};函数接口定义:struct ListNode *readlist();struct ListNode *getodd( struct ListNode **L );函数readlist从...原创 2019-04-12 23:10:33 · 1144 阅读 · 0 评论 -
PTA指针
6-9 长整数转化成16进制字符串 (15 分)本题要求实现一个将长整数转化成16进制字符串的简单函数。函数接口定义:void f( long int x, char *p );其中x是待转化的十进制长整数,p指向某个字符数组的首元素。函数f的功能是把转换所得的16进制字符串写入p所指向的数组。16进制的A~F为大写字母。裁判测试程序样例:#include <stdio.h>...原创 2019-04-07 21:34:50 · 3007 阅读 · 0 评论 -
PTA函数
返回6-44 报数 (20 分)报数游戏是这样的:有n个人围成一圈,按顺序从1到n编好号。从第一个人开始报数,报到m(<n)的人退出圈子;下一个人从1开始报数,报到m的人退出圈子。如此下去,直到留下最后一个人。本题要求编写函数,给出每个人的退出顺序编号。函数接口定义:void CountOff( int n, int m, int out[] );其中n是初始人数;m是游戏规定的...原创 2019-04-06 14:45:05 · 755 阅读 · 0 评论 -
PTA函数
6-34 删除字符 (20 分)本题要求实现一个删除字符串中的指定字符的简单函数。函数接口定义:void delchar( char *str, char c );其中char *str是传入的字符串,c是待删除的字符。函数delchar的功能是将字符串str中出现的所有c字符删除。裁判测试程序样例:#include <stdio.h>#define MAXN 20vo...原创 2019-04-05 14:22:57 · 464 阅读 · 0 评论