算法
qican_7
这个作者很懒,什么都没留下…
展开
-
数学表达式
示例1输入:str = "3+1*4"输出:7示例2输入:str = "48*((70-65)-43)+8*1"输出:-1816思路1. 对括号内的部分进行递归;2. 运算符优先级的问题,遇到"*" 和 "/" 号优先计算,遇到加和减暂时不处理,最后统一处理;3. 对于像3 + (-3)中,后面的(-3) 部分,在负号前加一个0变成(0-3),使之成...原创 2019-10-22 17:48:15 · 1783 阅读 · 0 评论 -
最长有效括号
示例输入:(()(())输出:6实现int maxLenBracket(string data) { if (data.length() == 0) { return 0; } vector<int> dp(data.length(), 0); int pre = 0; int res = 0; for (int i = 1; ...原创 2019-10-22 15:03:22 · 188 阅读 · 0 评论 -
全排列
整数数组按字典序全排列,输出全排列的所有结果。#include <iostream>#include <cstring>#define con 100using namespace std;void permutation(int* a, int k, int m){ int i, j; if (k == m) { for (i = 0; i &...原创 2019-10-21 20:09:11 · 59 阅读 · 0 评论 -
单词接龙(2)
题目描述给定两个单词(beginWord 和 endWord)和一个字典 wordList,找出所有从 beginWord 到 endWord 的最短转换序列。转换需遵循如下规则:每次转换只能改变一个字母。 转换过程中的中间单词必须是字典中的单词。说明:如果不存在这样的转换序列,返回一个空列表。 所有单词具有相同的长度。 所有单词只由小写字母组成。 字典中不存在重复的...原创 2019-10-18 10:41:13 · 299 阅读 · 0 评论 -
单词接龙
题目描述给定两个单词(beginWord和 endWord)和一个字典,找到从beginWord 到endWord 的最短转换序列的长度。转换需遵循如下规则:每次转换只能改变一个字母。 转换过程中的中间单词必须是字典中的单词。说明如果不存在这样的转换序列,返回 0。 所有单词具有相同的长度。 所有单词只由小写字母组成。 字典中不存在重复的单词。 你可以假设 b...原创 2019-10-18 10:31:52 · 133 阅读 · 0 评论 -
判断两个矩形是否重叠
题目(2018-11-20)用一个对象的数据来表示一个矩形的位置和大小:{ x: 100, y: 100, width: 150, height: 250}它表示一个宽为150高为250的矩形在页面上的(100, 100)的位置。请你完成一个函数isOverlap可以接受两个矩形作为参数,判断这两个矩形在页面上是否重叠。例如:const rect1 = ...原创 2019-10-17 21:30:29 · 2314 阅读 · 0 评论 -
数组分成两个尽量相等的子数组
类似于0-1背包问题将一个数组分成两部分,不要求两部分所包含的元素个数相等,要求使得这两个部分的和的差值最小。比如对于数组{1,0,1,7,2,4},可以分成{1,0,1,2,4}和{7},使得这两部分的差值最小。思路:这个问题可以转化为求数组的一个子集,使得这个子集中的元素的和尽可能接近sum/2,其中sum为数组中所有元素的和。这样转换之后这个问题就很类似0-1背包问题了:在...原创 2019-09-22 18:46:15 · 5734 阅读 · 0 评论 -
电话号码的字母组合
题目描述:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].解题方案:这道题也没有什么难点,我是写了一个子函数,输入数字,将对应的字母存在向量里返回,回...原创 2019-09-17 13:07:24 · 100 阅读 · 0 评论 -
最长等差数列
N个不同的正整数,找出由这些数组成的最长的等差数列。例如:1 3 5 6 8 9 10 12 13 14等差子数列包括(仅包括两项的不列举)1 3 51 5 9 133 6 9 123 8 135 9 136 8 10 12 14其中6 8 10 12 14最长,长度为5。Input第1行:N,N为正整数的数量(3<=N<=10000)。第2-...原创 2019-09-17 11:40:39 · 783 阅读 · 0 评论 -
旋转矩阵
题目描述任意输入两个9阶以下矩阵,要求判断第二个是否是第一个的旋转矩阵,如果是,输出旋转角度(0、90、180、270),如果不是,输出-1。 要求先输入矩阵阶数,然后输入两个矩阵,每行两个数之间可以用任意个空格分隔。行之间用回车分隔,两个矩阵间用任意的回车分隔。输入描述:输入有多组数据。每组数据第一行输入n(1<=n<=9),从第二行开始输入两个n阶矩阵。输出描述:...原创 2019-09-16 17:08:30 · 836 阅读 · 0 评论 -
发糖果问题
题目描述:老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。相邻的孩子中,评分高的孩子必须获得更多的糖果。那么这样下来,老师至少需要准备多少颗糖果呢?示例 1:输入: [1,0,2]输出: 5解释: 你可以分别给这三个孩子分发 2、1、2 颗糖果...原创 2019-09-14 21:29:59 · 421 阅读 · 0 评论 -
根号
方法一:二分法double radical(double num){ double a = 0, b = num + 0.25, m; while (1) { m = (a + b) / 2; if (m - a < 0.00001 || b - m < 0.00001) { break; } if ((a * a - num) * (m * m...原创 2019-09-09 15:14:07 · 498 阅读 · 0 评论 -
找出一个无序数组的中位数
要解决这个问题首先要了解什仫是中位数,所谓的中位数就是在一组有序的数字中找到中间的那个数字。如果数字的个数是奇数则直接返回中间的那个数,如果数字的个数是偶数此时这组数据的中位数有两个,取中间两个数的平均值即可。想法一、不论用什仫排序算法使得该组数据有序,直接取中间值即可。这种只要你掌握常见的排序算法就可以了,在这里就不实现了。想法二、利用快排的思想1、先进行一趟快排,使得div左边...原创 2019-09-08 14:25:21 · 588 阅读 · 0 评论 -
二叉树的序列化和反序列化(括号表示法)
一. 数的括号表示法1、树的线性表示树型结构和线性结构的主要区别在于树型结构具有分支性和层次性。使用树的遍历操作,可以将树中的结点按照规定的顺序排成一个线性序列;然而仅凭借树的某种遍历序列有时无法唯一地确定一棵树,但只要在遍历序列的基础上增加一些附加信息便可以唯一地确定一棵树,从而得到树的线性表示。树的线性表示便于树的输入、输出,同时在存储时也比较节省空间。2、树的括号表示规则...原创 2019-09-07 10:38:32 · 5538 阅读 · 0 评论 -
连续子数组的最大和
题目描述给定一个数组 array[1, 4, -5, 9, 8, 3, -6],在这个数字中有多个子数组,子数组和最大的应该是:[9, 8, 3],输出20,再比如数组为[1, -2, 3, 10, -4, 7, 2, -5],和最大的子数组为[3, 10, -4, 7, 2],输出18。暴力解法思路分析1、可以将给定数组的的所有子数组列出来,然后找到子数组和做大的情况,具体来说...原创 2019-09-06 16:51:58 · 77 阅读 · 0 评论 -
堆排序
什么是堆堆(英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:堆中某个节点的值总是不大于或不小于其父节点的值; 堆总是一棵完全二叉树。通常将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。堆的存储堆一般使用数组存储。当堆中有n个元素的时,可以将这些元素存放在数组array的前n个单元里,其中堆...原创 2019-09-04 16:21:09 · 83 阅读 · 0 评论 -
动态规划--01背包问题
问题描述有n个物品,它们有各自的体积和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和?为方便讲解和理解,下面讲述的例子均先用具体的数字代入,即:eg:number=4,capacity=8i(物品编号) 1 2 3 4 w(体积) 2 3 4 5 v(价值) 3 4 5 6 总体思路...原创 2019-09-02 22:08:20 · 236 阅读 · 0 评论