
算法题
ChasonPc
-
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
分解质因数
题目:输入一个正整数,求其分解之后的质因数,如有重复的质因数,则只输出一个。解析:暴力求解例如输入:12输出:2, 3 (全部的质因数为2 2 3,由于2重复了,所以输出一个2)参考答案:#include <iostream>#include <cstdio>using namespace std;int main(){ int n; scanf("%d", &n); int k = 2; int res = 0; while(n原创 2020-08-30 09:41:00 · 724 阅读 · 0 评论 -
判断字符串括号是否匹配
题目:给定一个只包括 ‘(’,’(’,’[’,’]’,’{’,’}’ 的字符串,判断字符串是否匹配解析:利用栈的思想解题。参考答案:#include <iostream>#include <cstring>#include <stack>#include <algorithm>using namespace std;stack<char> s;int Check(char* p){ int len = strlen(p原创 2020-08-23 16:18:12 · 563 阅读 · 0 评论 -
字符串分割
题目:给定一个字符串s和一组单词dict,判断s是否可以用空格分割成一个单词序列,使得单词序列中所有的单词都是dict中的单词(序列可以包含一个或多个单词)。例如:给定s=“leetcode”;dict=[“leet”, “code”].返回true,因为"leetcode"可以被分割成"leet code".解析:动态规划问题。参考答案:class Solution{public: bool wordBreak(string s, unordered_set<string>原创 2020-07-31 15:48:21 · 616 阅读 · 0 评论 -
二叉搜索树的第k个结点
题目:给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。 5 / \ 3 7 / \ / \2 4 6 8解析:方法一: 中序遍历二叉搜索树(递归方式),得到从小到大的排好序的数,然后找出第k个结点。方法二: 利用栈求解,直接看代码。参考答案:/**** typedef struct node{* int val;* struct node *lef原创 2020-07-29 23:50:29 · 228 阅读 · 0 评论 -
按之字形顺序打印二叉树
题目:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 3 / \ 9 20 / / \16 15 7解析:利用队列的先入先出思想来求解,先把根节点放入队列中的队首,如果有子结点,则把子结点依次(先左儿子后右儿子)放入队尾,然后弹出队首元素。接下来重复前面的操作,把奇数层的从左往右存入数组,偶数层从右往左存入数组,直到队列元素全部弹出。<知识点:层序遍历的改进&原创 2020-07-29 22:46:04 · 142 阅读 · 0 评论 -
环形链表入环的第一个节点(力扣:环形链表 II)
题目:给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index 1解释:链表中有一个环,其尾部连接到第二个节点。解析:双指针解法(快慢指针)。快慢指针(慢指针一次走一个步长,快指针一次走两个步长)第一次相遇的地原创 2020-07-28 09:16:59 · 454 阅读 · 0 评论 -
回文数索引
题目:给定一个仅由小写字母组成的字符串。现在请找出一个位置,删掉那个字母之后,字符串变成回文。请放心总会有一个合法的解。如果给定的字符串已经是一个回文串,那么输出-1。输入描述:第一行包含T,测试数据的组数。后面跟有T行,每行包含一个字符串。输出描述:如果可以删去一个字母使它变成回文串,则输出任意一个满足条件的删去字母的位置(下标从0开始)。例如:bcc我们可以删掉位置0的b字符。示例输入:3aaabbaaaaa输出:30-1解析:双指针解法。参考答案:#i原创 2020-07-27 22:16:36 · 156 阅读 · 0 评论 -
股票的最大利润
题目:假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。(注意:利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。)输入: [7,6,4,3,1]输出: 0解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。解析:如果使用暴力求解即两层for循环找到最大值和原创 2020-06-18 11:39:50 · 366 阅读 · 0 评论 -
和为K的子数组
题目:给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。输入: nums = [1, 1, 1], k = 2;输出: 2 解释: [1, 1] 与 [1, 1] 为两种不同的情况。解析**方法一:**暴力枚举法。**方法二:**前缀和(用到哈希表)。参考答案:class Solution{public: int subarraySum(vector<int>& nums, int k){ //方法一:暴力枚举法 int c原创 2020-06-13 11:44:57 · 356 阅读 · 0 评论 -
字符串压缩
题目:字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母。输入: "aabcccccaaa"输出: "a2b1c5a3"输入: "abbccd"输出: "abbccd"解释: "abbccd"压缩后为"a1b2c2d1",比原字符串长度更长。参考答案:class Solution{public: string co原创 2020-06-12 16:32:15 · 153 阅读 · 0 评论 -
字符串消除
1. 题目:给定一个只包含大写英文字母的字符串s,按照以下规则消除:(1)如果s包含长度为2的由相同字母组成的子串,那么这些子串会被消除,余下的子串拼成新的字符串。例如"ABCCBCCCAA"中"CC",“CC"和"AA"会被同时消除,余下"AB”,“C"和"B"拼成新的字符串"ABBC”。(2)重复上述操作,直到新的字符串不包含相邻的相同字符为止。例如”ABCCBCCCAA”经过一轮消...原创 2020-04-29 09:54:33 · 1514 阅读 · 0 评论 -
最长递增子序列 (动态规划)
题目: 给定一个无序的整数数组,找到其中最长上升序列的长度。输入: [10, 9, 2, 5, 3,7, 101, 18]输出: 4 //最长的上升子序列是[2, 3, 7, 101], 它的长度是4.解析: 先开一个和nums[]长度相等的新数组dp[],因为只有一个元素的时候,结果必为1,所以把dp[]全都初始化为1。利用两个指针i,j进行比较,把i比j大的上升序列长度存在d...原创 2020-04-17 12:31:48 · 525 阅读 · 0 评论 -
不同路径(二维数组的动态规划)LeetCode #62
题目: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?解析: 利用动态规划的三个步骤来解题:(1)定义数组元素的含义定义二维数组dp[i][j],即机器人从左上角走到[i][j]的位置需要dp[i][j]种路径。那么dp...原创 2020-04-16 12:04:50 · 486 阅读 · 0 评论 -
青蛙跳台阶(一维的动态规划)
题目: 一只青蛙一次可以跳一级台阶,也可以跳两级台阶,求青蛙跳上一个n级台阶有多少种跳法。解析: 利用动态规划进行求解,首先介绍动态规划解题三要素:(1)定义数组元素的含义首先定义dp[i]的含义,要求跳上n级台阶有多少种跳法,则跳上i级太极的跳法一共有dp[i]种跳法,这样计算出dp[n]就可以得到答案。(2)找出数组元素之间的含义动态规划的思想主要是,把一个规模比较大的问题分成几个...原创 2020-04-16 11:30:17 · 388 阅读 · 0 评论 -
最小路径和(二维的动态规划) LeetCode #64
题目: 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。每次只能向下或者向右移动一步。输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7 //因为路径 1→3→1→1→1 的总和最小。解析: 三个步骤:(1)定义数组元素的含义定义为二维数组dp[i][j],则dp[m - 1][n - ...原创 2020-04-16 18:38:51 · 290 阅读 · 0 评论 -
学生成绩排名系统(c++实现)
题目:学生有两门课语文和数学,实现一个班级名次排名,要求总分高的排在前面,当总分相同时,数学成绩高的在前面,若两门课程均相等时,按姓名笔画排序。输入(第一行输入 几个学生,第二行输入学生姓名,语文成绩,数学成绩)3 abc 88 89aaa 88 89bcd 87 90输出bcd 87 90aaa 88 89abc 88 89#include <iostr...原创 2020-04-06 22:23:56 · 5445 阅读 · 0 评论 -
罗马数字转阿拉伯数字
#include <iostream>#include <cstdio>#include <cstring>using namespace std;#define N 7char digits[N] = {'I', 'V', 'X', 'L', 'C', 'D', 'M'};int values[N] = { 1 , 5 , 10, 5...原创 2019-11-08 22:09:46 · 168 阅读 · 0 评论 -
在字符串中找出第一个不重复的字符
#include <iostream>#include <cstdio>using namespace std;void firstUniqChar(string s){ char arr[26] = {0}; for(int i = 0; i < s.size(); i++){ int index = s[i] - 'a';...原创 2019-10-25 17:26:31 · 631 阅读 · 0 评论 -
把数组中所有的零移动到最后面
#include <iostream>using namespace std;//方法一void moveZero1(int arr[], int n){ int zero = 0; for(int i = 0; i < n; i++){ if(0 != arr[i]){ arr[i - zero] = arr[i]; }else{ zero++...原创 2019-10-24 22:23:40 · 1022 阅读 · 0 评论 -
汉诺塔问题(递归)
#include <iostream>using namespace std;void hanoi(int n,char A, char B, char C){ if(1 == n){ cout << A << "->" << C << endl; }else{ hanoi(n-1, A, C, B); co...原创 2019-10-24 14:47:48 · 125 阅读 · 0 评论 -
二进制中1的个数
#include <iostream>using namespace std;//方法一(位操作)int CountOnes1(int num){ int count = 0; while(num > 0){ if( (num & 1) == 1 ){ count++; } num = num >> 1; } return ...原创 2019-10-23 22:10:31 · 116 阅读 · 0 评论 -
判断数组中是否有重复元素
题目描述:判断数组中是否有重复元素,如果有重复元素输出Yes,否者输出No。解题思路:采用计数器原理。例:输入:1,3,2,5,6,4输出:Yes#include <iostream>using namespace std;void print(bool b){ if(b){ cout << "Yes" <...原创 2019-10-19 21:40:40 · 1029 阅读 · 0 评论 -
二进制个位不同个数
1、题目描述输入两个整数,求两个整数二进制格式有多少个位不同。输入示例:22 33输出示例:52、题目解析解题思路:两个数进行异或,将异或的结果与其减一进行与操作,直至为零,就是二进制不同位数的数量。实例解释1、22和33进行异或。-十进制数二进制数a2210110b33100001⊕551101112、然后...原创 2019-09-29 14:56:31 · 377 阅读 · 0 评论 -
Young Tableaus(杨氏矩阵)
1、题目描述Young Tableau是满足如下定义的二维数表:1、所有行均为左对齐,所有行的最左端在同一行,且每一行均连续无空位;2、从上到下每一行的列数非严格单调递增;3、每一行中的数从左到右严格单调四递增;4、每一行中的数从上到下严格单调递增。请编写一个程序,判断一个数表是否是Young Tableau。数表的行数和列数至多为10,所有数值均为正整数。输入样例:1...原创 2019-09-28 15:44:52 · 494 阅读 · 0 评论 -
计算重复字符串长度
1、题目描述请从字符串中找出至少重复一次的子字符串的最大长度输入描述:字符串,长度不超过1000输出描述:重复子串的长度,不存在输出0输入示例:ababcdabcefsgg输出示例:3说明:abc为重复的最大子串,长度为32、参考答案#include <iostream>using namespace std;int main(){ string...原创 2019-09-27 22:39:47 · 151 阅读 · 0 评论 -
字符串碎片
1、题目描述一个由小写字母组成的字符串看成一些统一字母的最大碎片组成的。例如,"aaabbaaac"是由碎片组成的:"aaa","bb","c"。牛牛现在给定一个字符串,请你帮助计算这个字符串的所有碎片的平均长度是多少。输入描述:输入包括一个字符串s,字符串s的长度length(1 ≤ length ≤ 50),s只含小写字母('a' - 'z')输出描述输出一个整数,表示所有碎片的平...原创 2019-09-18 17:16:30 · 339 阅读 · 0 评论 -
斐波那契数列普通、递归和优化递归实现
斐波那契数列斐波那契额数列,又称为黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、······简单来说就是前两项的和是第三项的值。1、普通实现#include <iostream>using namespace std;int fibon(int n){ int a = 1; int b = 1; int c = a; while(n &...原创 2019-09-12 16:11:23 · 467 阅读 · 0 评论 -
输入两个字符串 从第一个字符串中删除第二个字符串中所包含的所有字符
#include <iostream>#include <cstring>using namespace std;char* string_del_characters(char* const src, const char* const dest){ int destlen = strlen(dest); int hash_table[256] = 0; ...原创 2019-09-11 22:17:07 · 1083 阅读 · 0 评论