算法+刷题记录
文章平均质量分 63
算法实现+刷题记录
Van-bo
Get busy living or get busy dying
展开
-
JavaSE-八大经典排序算法及优化算法思路与实现
目录1.冒泡排序1.1算法思想1.2 算法实现1.3 算法改进1.4 算法分析2.选择排序2.1 算法思想2.2 算法实现2.3 算法改进2.4 算法分析1.冒泡排序1.1算法思想冒泡排序的过程就如同它的名字一样,每次冒泡的过程会将元素中最大/小的一个数冒出来,这样最后的一个元素就会是最大/小的元素,下一次冒泡过程就可以对前n-1个再进行排序,n趟过程下来整个序列就变成有序的了。以上图为例,它的过程如下: 比较相邻的元素。如果...原创 2020-12-02 15:24:00 · 13882 阅读 · 4 评论 -
JavaSE数组练习-句子翻转+字符替换+打印特殊三角
要求:给定字符串如"hello, i am a student!",对英语句子进行翻转,并保持英语单词的顺序不变,对标点符号当成字母处理。代码实现:import java.util.Arrays;/** * Created on 2020/9/20. * * @author Resumebb * @Description:英语句子单词翻转,保持原句意不变,标点符号当字母处理 */public class wordReverse { //思路:先翻转整个句子,然后翻转每个.原创 2020-09-20 17:39:30 · 349 阅读 · 0 评论 -
JavaSE学习记录-整数逆序+数组删除元素
JavaSE学习记录-整数逆序+数组删除元素实现代码原创 2020-09-06 23:08:27 · 172 阅读 · 0 评论 -
滑动窗口框架算法
最长覆盖子串,异位词,最长无重复子串等等许多子串问题用常规暴力法费时费力,一些大佬的解法虽然很强效率很高,但是太难想到了,这类问题用滑动窗口算法解决非常的快捷简便。滑动窗口算法思想1、在字符串S中使用双指针中的左右指针技巧,初始化left = right = 0,把索引左闭右开区间[left, right)称为一个「窗口」。2、先不断地增加right指针扩大窗口[left, right),直到窗口中的字符串符合要求(包含了T中的所有字符)。3、此时,停止增加right,转而不断增加left指原创 2021-11-18 11:37:54 · 2874 阅读 · 0 评论 -
围圈抽牌报数问题
问题描述米免参加公司司建,100个同事围坐圈,裁判开始顺时针从头发牌,每发3张白牌就会发出1张黑牌,抽到黑牌的人出局,每局第N个抽到黑牌的将获得奖励。问如果米免想获得奖品,需要坐在最开始100人里第几个位置?输入描述正整数N,表示要计算的为第N个抽到黑牌的同学,0< N ≤100输出描述第N个抽到黑牌的同学在最开始100人里的位置(1 ~100).思路:典型的约瑟夫环问题,构建环形链表,遍历环形链表会是一个无限循环,如果链表中的数据逐渐减少,不控制终究会一个不剩,这又不满.原创 2021-09-08 22:53:29 · 137 阅读 · 0 评论 -
完美数问题
题目描述对于一个十进制正整数,如果z的每一位数字只可能是1,2,3中的其中一个,则称α是完美数。如:123,1,3321都是完美数而5,1234则不是。牛牛想写一个函数f(n),使得其返回最大的不大于n的完美数,请你帮助牛牛实现这个函数。输入描述:第一行一个正整数T表示单组测试数据的组数。接下来T行每行一个正整数n。(1<T ≤,1 ≤n ≤)4 213 3244 22 100输出描述:对于每组输入的n,输出f(n)的值。213 3233 22 33如题原创 2021-09-07 21:12:54 · 392 阅读 · 1 评论 -
剑指Offer-面试算法题
1.二分查找(递归与非递归实现)2.二维数组中查找3.旋转数组中最小的数4.调整数组使得奇数在前偶数在后5.顺时针打印矩阵6.数组中超过一半的数7.统计一个数字在排序数组中出现的次数8.求数组中最小的K个数原创 2021-07-20 20:11:25 · 238 阅读 · 2 评论 -
遗传算法求解TSP旅行商问题
旅行商问题旅行商问题(traveling salesman problem,TSP)可描述为:已知N个城市之间的相互距离,现有一个商人必须遍访这N个城市,并且每个城市只能访问一次,最后又必须返回出发城市。如何安排他对这些城市的访问次序,使其旅行路线总长度最短。旅行商问题是一个典型的组合优化问题,其可能的路径数目是与城市数目N呈指数型增长的,一般很难精确地求出其最优解,因而寻找其有效的近似求解算法具有重要的理论意义,特别是当N的数目很大时,用常规的方法求解计算量太大。对庞大的搜索空间中寻求最优解,对原创 2021-07-07 16:41:06 · 10416 阅读 · 5 评论 -
排序、查找、链表、栈、队列等常见数据结构算法代码实现(C语言版)
本文章所有程序均摘取自老师课件,仅供自己方便查看。插入排序#include <stdio.h>typedef struct{int key;}datatype;void D_InsertSort(datatype R[ ],int n)/*待排序的n个元素放在数组R中,用直接插入法进行排序*/{ int i,j; for ( i=2; i<=n; i++) /...原创 2018-06-30 10:24:03 · 7547 阅读 · 3 评论 -
动态规划+贪心算法实现背包问题
问题描述 给定一个十进制整数n,输出n的各位数字之和。 输入格式 输入一个整数n。 输出格式 输出一个整数,表示答案。 样例输入 20151220 样例输出 13 样例说明 20151220的各位数字之和为2+0+1+5+1+2+2+0=13。 评测用例规模与约定 所...原创 2018-07-28 12:49:37 · 241 阅读 · 0 评论 -
Leetcode-234,844,19
234-回文链表请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true思路:本想将链表逆置然后进行比较,后来想了想用栈去做更简单,因为栈的性质是先进后出,所以就相当于给逆置了,每次只需要比较链表当前结点的值和栈顶的值是否相等就行,如果出现有一个不相等的情况就返回false,否则就返回true。/** * Definition for singly-linked list.原创 2020-10-24 10:46:57 · 73 阅读 · 1 评论 -
代码模拟确定有限自动机(DFA)执行过程
给你一个仅包含小写英文字母和 '?' 字符的字符串 s,请你将所有的 '?' 转换为若干小写字母,使最终的字符串不包含任何 连续重复 的字符。注意:你 不能 修改非 '?' 字符。题目测试用例保证 除 '?' 字符 之外,不存在连续重复的字符。在完成所有转换(可能无需转换)后返回最终的字符串。如果有多个解决方案,请返回其中任何一个。可以证明,在给定的约束条件下,答案总是存在的。示例 1:输入:s = "?zs"输出:"azs"解释:该示例共有 25 种解决方案,从 "azs" .原创 2020-10-02 23:52:58 · 1251 阅读 · 0 评论 -
LeetCode-二进制串和+宝石与石头
给你两个二进制字符串,返回它们的和(用二进制表示)。输入为 非空 字符串且只包含数字1和0。示例1:输入: a = "11", b = "1"输出: "100"示例2:输入: a = "1010", b = "1011"输出: "10101"提示:每个字符串仅由字符 '0' 或 '1' 组成。1 <= a.length, b.length <= 10^4字符串如果不是 "0" ,就都不含前导零。错题思路:一开始想的是将二进制字符...原创 2020-09-16 21:09:50 · 97 阅读 · 0 评论 -
Leetcode-最短路径和+最大子串和(动态规划)
给定一个包含非负整数的 mxn网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[[1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。思路:起初分析题目,题意就是要求左上角到左下角的路径和,也就是单元最短路径,开始就想着用迪杰斯特拉来求,但是仔细看了一下说明,每次只能向下或者向右移动,也就是说它这个和迪杰斯特拉求算法不一样,这个要...原创 2020-09-13 11:44:22 · 616 阅读 · 0 评论 -
Leetcode-旋转数组+最后一个单词长度
给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。示例 1:输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]示例2:输入: [-1,-100,3,99] 和 k = 2输出: [3,99,-1,-100]解释:向右旋转 1 步: [99,-1,-100,3]...原创 2020-09-12 20:15:50 · 211 阅读 · 0 评论 -
基于Keras实现电影评论文本分类与RNN实现
第一种这种方法是通用性强 u8 C2D(u8 c) { if (c >= '0' && c <= '9') return c - '0'; if (c >= 'a' && c <= 'f') return 10 + c -'a'; if (c >= 'A' && c <= 'F') return 10 + c -'A'; return (char)c;}u16 ATOI(u8.原创 2020-08-29 18:40:37 · 834 阅读 · 0 评论 -
整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为[−231,231− 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。来源:力扣(Lee...原创 2020-08-23 10:18:00 · 95 阅读 · 0 评论 -
LeetCode-搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0class Solution { public int searchInsert(int[]...原创 2020-07-13 12:01:21 · 119 阅读 · 0 评论 -
盛水最多的容器
题目描述:给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画 n 条垂直线,垂直线 i的两个端点分别为(i,ai) 和 (i, 0)。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且n的值至少为 2。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/container-with-most-water图中垂直线代表输入数组 [1,8...原创 2020-06-23 12:39:25 · 106 阅读 · 0 评论 -
LeetCode-整数转罗马数字
罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做II,即为两个并列的 1。12 写做XII,即为X+II。 27 写做XXVII, 即为XX+V+II。通常...原创 2020-06-12 16:22:30 · 163 阅读 · 0 评论 -
买卖股票的最佳时机①
给定一个数组,它的第i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 ...原创 2020-01-15 12:59:13 · 123 阅读 · 0 评论 -
二叉树最大深度与最小深度
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度3 。第一个能想到的解法就是用递归求解,做完发现大部分人也都是用的递归思想,或者间...原创 2020-01-05 09:30:22 · 1380 阅读 · 2 评论 -
杨辉三角①与②
给定一个非负整数numRows,生成杨辉三角的前numRows行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:输入: 5输出:[ [1], [1,1], [1,2,1], [1,3,3,1],[1,4,6,4,1]思路:动态规划问题,每一行第一个和最后一个元素恒为1,故可以使用双重循环,设置一个List temp,外层循环...原创 2020-01-04 11:17:11 · 195 阅读 · 0 评论 -
外观数组
「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项如下:1. 12. 113. 214. 12115. 1112211被读作"one 1"("一个一") , 即11。11 被读作"two 1s"("两个一"), 即21。21 被读作"one 2", "one 1"("一个二",...原创 2020-01-02 21:18:13 · 296 阅读 · 0 评论 -
LeetCode-括号匹配
给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例2:输入: "()[]{}"输出: true示例3:输入: "(]"输出: false示例4:输...原创 2020-01-01 17:58:52 · 459 阅读 · 0 评论 -
LeetCode罗马数字转整数
罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做II,即为两个并列的 1。1...原创 2019-12-29 16:56:44 · 152 阅读 · 0 评论 -
KMP算法的理解
串的模式匹配算法主要有两种,一是简单模式匹配,而是KMP算法。 简单模式匹配算法很容易理解,每一次从主串的第一个位置起和模式串的第一个字符开始比较,如果相等就按照顺序一直比下去,如果不相等就把模式串和第二个位置开始继续进行比较,最后若匹配成功则返回主串中与模式串匹配的第一个字符的位置,虽然简单易懂也容易实现,但过程及其繁琐,有许多冗余的步骤降低了匹配效率。 因此采用无回溯效率更...原创 2019-09-19 22:47:13 · 318 阅读 · 0 评论 -
汇编练习
1.将下面C语言程序的代码片段转换为功能等价的汇编语言代码片段;编写一完整的汇编语言程序验证转换的正确性,其中sign与sinteger均为双字变量。 if (sinteger == 0) sign = 0; else if ( siteger > 0) ...原创 2019-05-15 13:16:01 · 4943 阅读 · 2 评论 -
普利姆算法和克鲁斯卡尔算法求解最小生成树
Q:最小生成树有什么用? A:譬如我要去五个城市旅游,每两个城市之间可能有路也可能没有,路的距离可能一样也可能不一样,随机从一个城市出发,我想要把每个城市走一遍,怎么样走过的路距离最短,比如我想从上海出发,要走遍其他城市,要怎样确定一条路径最短,这就是最小生成树的作用。求解最小生成树有两种基础算法:普利姆算法和克鲁斯卡尔算法。Q: 如何保证最小生成树唯一?A: 所有边的...原创 2019-09-30 15:21:08 · 2878 阅读 · 0 评论 -
Java分治法实现日程表
算法描述: 设有n=2的k次个运动员要进行网球比赛,现在要设计一个满足一下要求的比赛日程表:每个选手必须要与其他n-1个选手各赛一次每个选手一天只能赛一次循环赛一共进行n-1天 日程表1234567821436587341278564321876556781234658721437856341287654321代码如下:package keshe;import java.awt.Bord...原创 2018-07-03 21:46:06 · 1102 阅读 · 0 评论 -
矩阵连乘-动态规划
问题:给定n个矩阵:A1,A2,...,An,其中Ai与Ai+1是可乘的,i=1,2...,n-1。确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。输入数据为矩阵个数和每个矩阵规模,输出结果为计算矩阵连乘积的计算次序和最少数乘次数。分析:由于矩阵乘法满足结合律,故计算矩阵的连乘积可以有许多不同的计算次序。这种计算次序可以用加括号的方式来确定。若一个矩阵连乘积的...原创 2018-05-17 18:20:39 · 1088 阅读 · 0 评论 -
流水作业调度-算法设计
问题描述:算法描述:具体代码:#include <stdio.h>#include <iostream>using namespace std;class Jobtype{ public: int operator <=(Jobtype a) cons...原创 2018-05-17 18:52:37 · 3146 阅读 · 1 评论 -
动态规划解决01背包问题
问题描述:简单的说就是容量为c的背包,有n个物品,物品i的重量为wi,其价值为vi,问要如何选择装入物品使得背包中物品总价值最大?(在选择装入背包的物品时,对于每个物品i都只有两种选择,装入或者不装入,不能将一个物品装入多次,更不能将物品拆分成部分装入)状态递归方程:m(i,j)=max{m(i+1,j),m(i+1,j-wi)+vi}(装入) ...原创 2018-05-17 19:11:00 · 1043 阅读 · 0 评论 -
石子合并问题
问题描述:在一个圆形操场的四周摆放着n堆石子,现在要将石子有次序的合并成一堆,规定每次只能选取相邻的两堆石子合并成一堆新的一堆,并将新的一堆石子数记为此次合并的得分,要求设计一个算法,计算出将n堆石子合并成一堆的最小得分和最大得分。例如:现有4堆石子,每堆石子数分别为4, 4, 5, 9,假设先合并1,2堆石子,合并后石子总数为8,得分8,然后合并新的石子和第3堆石子,合并后石子总数为13,得分为...原创 2018-05-17 19:31:50 · 389 阅读 · 0 评论