算法
文章平均质量分 71
个人算法思路
是馄饨呀
我想,认真工作、相信生活的人,才会被世界温柔以待!
展开
-
【算法】旋转矩阵
说一下今天的面试吧,面试官人挺好的,细心听我讲完了我实习项目,然后,咱们来做道题吧。旋转矩阵,说一下感受吧,其实以前做过的,那还是大一,但今天一做,感觉没啥思路了,确实算法是要每天进行的工作,也意识到算法的重要性。那么来看下旋转矩阵。给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。不占用额外内存空间能否做到?示例 1:给定 matrix =[[1,2,3],[4,5,6],[7,8,9]],原地旋转输入矩阵,使其变为:.原创 2021-07-26 17:23:23 · 762 阅读 · 0 评论 -
【剑指Office】反转链表
这道题我们有两种解法,遍历链表,将链表数值装入到集合中,根据集合重构链表。但是很明显,这个题考察的点是在链表的指针上,所以我们也是用指针的解法。条件:我们知道,链表的指向都是指向下一个节点,但是如果我们反向指,会导致我们当前节点的下一个指向断开,无法遍历后续元素,例如这张图。所以这里我们应该要定义一个保存后续节点的指针,使得当前指针在找后续节点时可以被找到。我们定义三个指针,分别是前缀指针 pre,当前指针 cur 和后缀指针 next,先让 next 保存当前节点的下一个节点,记录后,进行.原创 2021-07-22 08:42:48 · 174 阅读 · 1 评论 -
【算法】程序员面试经典01.01. 判定字符是否唯一
引言我们会发现这道题下面有一句话,如果你不使用额外的数据结构,会很加分,所以其实根本解法还是用位移运算符,可惜我没了解过这的东西,又一次难受。在做完后看了一个老哥的说法,如果我是面试官我怎么看,确实给了自己很多思考如果我是面试官,我会希望看到什么?可能有点偏题,毕竟这里主要就是做题的地方。。如果我是面试官,会考虑主要考察什么,就我的工作经验看,大多数主要是招聘工程师的,面试者如果什么问题都没有,直接写个二重循环搞定,会首先给个50分,如果能写点判断字符串是否为null的,60分。直原创 2021-07-21 10:59:03 · 142 阅读 · 0 评论 -
【力扣】69. x 的平方根
文章目录求开方69. x 的平方根Math工具类计算二分查找牛顿迭代法求开方69. x 的平方根题目描述:实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明:8 的平方根是 2.82842…,由于返回类型是整数,小数部分将被舍去。Math工具类计算我们知道 java 的工具类中有计算平方根的方法,我们直原创 2021-06-20 16:13:46 · 383 阅读 · 0 评论 -
【算法】双指针题解
双指针算法解释:(直接照搬齐姐的了)双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务。也可以延伸到多个数组的多个指针。若两个指针指向同一数组,遍历方向相同且不会相交,则也称为滑动窗口(两个指针包围的区域即为当前的窗口),经常用于区间搜索。若两个指针指向同一数组,但是遍历方向相反,则可以用来进行搜索,待搜索的数组往往是排好序的。对于 C++ 语言,指针还可以玩出很多新的花样。一些常见的关于指针的操作如下。指针与常量int x;int * p1 = &x; // 指原创 2021-06-07 11:48:16 · 285 阅读 · 1 评论 -
有n个人正在饭堂排队买海北鸡饭。每份海北鸡饭要25元。奇怪的是,每个人手里只有一张钞票(每张钞票的面值为25、50、100元)……
思路:一个数组存储n个人的费用,另一个集合来存所要找的零钱,考虑顺序代码:import java.util.ArrayList;import java.util.Scanner;public class Main{ public static void main(String[] args) { ArrayList<Integer> li...原创 2020-03-04 23:31:00 · 935 阅读 · 0 评论 -
贪心算法题解
文章目录贪心算法分配问题力扣455 分发饼干1.暴力破解法求最值2.采用贪心策略,求最值(**齐姐思路**)力扣135 分发糖果贪心策略区间问题力扣435 无重叠区间贪心策略练习力扣 605 种花问题贪心算法分配问题力扣455 分发饼干题目描述:假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我原创 2021-05-30 14:43:06 · 325 阅读 · 0 评论 -
学习算法和刷题的思路指南
文章目录学习算法和刷题的思路指南**⼀、**数据结构的存储⽅式数组与链表的优缺点**⼆、**数据结构的基本操作总结学习算法和刷题的思路指南**⼀、**数据结构的存储⽅式数据结构的存储⽅式只有两种:数组(顺序存储)和链表(链式存储)。「队列」、「栈」这两种数据结构既可以使⽤链表也可以使⽤数组实现。⽤数组实现,就要处理扩容缩容的问题;⽤链表实现,没有这个问题, 但需要更多的内存空间存储节点指针。「图」的两种表⽰⽅法,邻接表就是链表,邻接矩阵就是⼆维数组。邻接矩 阵判断连通性迅速,并可以进⾏矩阵运算解原创 2021-05-12 15:16:27 · 343 阅读 · 2 评论 -
【力扣】1720.解码异或后的数组
文章目录题目题解代码实现题目未知 整数数组 arr 由 n 个非负整数组成。经编码后变为长度为 n - 1 的另一个整数数组 encoded ,其中 encoded[i] = arr[i] XOR arr[i + 1] 。例如,arr = [1,0,2,1] 经编码后得到 encoded = [1,2,3] 。给你编码后的数组 encoded 和原数组 arr 的第一个元素 first(arr[0])。请解码返回原数组 arr 。可以证明答案存在并且是唯一的。示例 1:输入:encoded =原创 2021-05-06 09:44:21 · 188 阅读 · 0 评论 -
【力扣】7.整数翻转
文章目录题目利用数组+String进行翻转【官方算法】利用数学方法进行翻转题目给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1:输入:x = 123输出:321示例 2:输入:x = -123输出:-321示例 3:输入:x = 120输出:21示例 4:输入:x = 0输出:0提示:-23原创 2021-05-03 20:15:57 · 225 阅读 · 1 评论 -
【算法】在控制台输入一个日期,判断这个日期是这一年的第几天?
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;/** * @ClassName test * @Description 测试类 * @Author asus * @Date 2020/12/15 16:02 * @Version 1.0 **/public class Main{ /** * @return * @Descri原创 2020-12-16 09:26:21 · 922 阅读 · 2 评论 -
【算法笔记】B1001.害死人不偿命的(3n+1)猜想
题目描述卡拉兹(Callatz)猜想:对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半。这样一直反复砍下去,最后一定在某一步得到n=1。卡拉兹在1950年的世界数学家大会上公布了这个猜想,据说当时耶鲁大学师生齐动员,拼命想证明这个貌似很荒唐的命题,结果闹得学生们无心学业,一心只证(3n+1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展……此处并非要证明卡拉兹猜想,而是对给定的任一不超过1000的正整数n,简单地数一下,需要多少步原创 2020-12-13 16:40:46 · 192 阅读 · 0 评论 -
【算法笔记】学习算法帮助内容
文章目录一、 如何选择编程语言和编辑器二、 在线评测系统(1) PAT(2) codeup三、常见的评测结果(1)答案正确(Accepted,AC)(2)编译错误(Compile Error,CE)(3)答案错误(Wrong Answer,WA)(4)运行超时(Time Limit Exceeded,TLE)(5)运行错误(Runtime Error,RE)(6)内存超限(Memory Limit Exceeded,MLE)(7)格式错误(Presentation Error,PE)(8)输出超限(Outp原创 2020-12-05 10:56:55 · 773 阅读 · 0 评论 -
【算法】归并排序
#include<iostream>using namespace std;const int N = 1000010;int n;int q[N],temp[N];void merge_sort(int q[], int l,int r){ if(l>=r) return; //找分界点 int mid= (l+r) >> 1; //先将两段排序 merge_sort(q,l,mid); merge_sort(q,mid+1,r); //合并原创 2020-11-29 21:37:48 · 130 阅读 · 0 评论 -
【算法】快速排序——分治算法
文章目录思想步骤动画演示:代码c++java思想通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。步骤(1)首先设定一个分界值,通过该分界值将数组分成左右两部分。(2)将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值。(3)然后,左边和右边原创 2020-11-09 16:26:13 · 1871 阅读 · 0 评论 -
【蓝桥杯java】复数幂
【题目】设i为虚数单位。对于任意正整数n,(2+3i)^n 的实部和虚部都是整数。求 (2+3i)^123456 等于多少? 即(2+3i)的123456次幂,这个数字很大,要求精确表示。答案写成 “实部±虚部i” 的形式,实部和虚部都是整数(不能用科学计数法表示),中间任何地方都不加空格,实部为正时前面不加正号。(2+3i)^2 写成: -5+12i,(2+3i)^5 的写成: 122-597i注意: 需要提交的是一个很庞大的复数,不要填写任何多余内容。在写这道题时,我们必须要认真,原创 2020-10-14 11:42:55 · 841 阅读 · 0 评论 -
【算法java】升级版三角形
升级版三角形输入一个大写字母(A-Z)或者一个数字(1-9)。比如输入是F的时候,输出: A ABA ABCBA ABCDCBA ABCDEDCBAABCDEFEDCBA输入是3的时候,输出: 1 12112321输入格式输入一个数字(1-9)或者一个大写字母(A-Z)。.原创 2020-10-13 20:59:12 · 173 阅读 · 0 评论 -
【蓝桥杯java】煤球数目
题目:有一堆煤球,堆成三角棱锥形。具体: 第一层放1个,第二层3个(排列成三角形),第三层6个(排列成三角形),第四层10个(排列成三角形), …如果一共有100层,共有多少个煤球?请填表示煤球总数目的数字。注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。【思路】我们可以这样理解第一行:1第二行:1+2第三行:1+2+3第四行:1+2+3+4....第100行:1+2+3+…+100所以我们可以对每行进行分别相加,然后计算总和【代码实现】pub原创 2020-10-13 17:31:42 · 398 阅读 · 2 评论 -
【算法】dd大牛的背包九讲
https://www.cnblogs.com/jbelial/articles/2116074.html转载 2020-10-09 20:46:56 · 618 阅读 · 0 评论 -
【蓝桥杯java算法提高】整商问题
【问题描述】 提示用户输入被除数(dividend)和除数(divisor),若除数为0,则提示用户重新输入,直至除数非零为止。最后输出商。程序建议大家将被除数、除数和商都定义为整形。 输入被除数提示语句为:Please enter the dividend: 输入除数提示语句为:Please enter the divisor: 提示除数为0需要重新输入的语句为: Error: divisor can not be zero! Please enter a new divisor: 建原创 2020-10-08 23:00:28 · 252 阅读 · 0 评论 -
【蓝桥杯java】特别数的和
题目描述小明对数位中含有 2、0、1、9 的数字很感兴趣(不包括前导 0),在 1 到40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。请问,在 1 到 n 中,所有这样的数的和是多少?样例【输入格式】输入一行包含两个整数 n。【输出格式】输出一行,包含一个整数,表示满足条件的数的和。【样例输入】40【样例输出】574javapublic class Main { static Boolean check(int t)原创 2020-10-07 21:20:59 · 378 阅读 · 0 评论 -
【蓝桥杯java】数的分解
【问题描述】把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包含数字 2 和 4,一共有多少种不同的分解方法?注意交换 3 个整数的顺序被视为同一种方法,例如 1000+1001+18 和1001+1000+18 被视为同一种。【答案提交】这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。思路:首先,我们要读懂题,我一开始理解的就是2,0,1,9 这四个数分别组合,用枚举直接求出来,然后发现求出原创 2020-10-06 22:09:00 · 1372 阅读 · 8 评论 -
【蓝桥杯java】数列求值
【问题描述】给定数列 1, 1, 1, 3, 5, 9, 17, …,从第 4 项开始,每项都是前 3 项的和。求 第 20190324 项的最后 4位数字。【答案提交】这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个 4 位整数(提示:答案的千位不为0),在提交答案时只填写这个整数,填写 多余的内容将无法得分。思路:声明三个变量num1,num2,num3初始值为1,1,1,声明变量sum为前三项的合,每次计算,依次改变第一项,第二项,第三项的值,然后输出解法原创 2020-10-05 22:52:11 · 574 阅读 · 3 评论 -
【蓝桥杯java】不同子串
【问题描述】一个字符串的非空子串是指字符串中长度至少为 1 的连续的一段字符组成的串。例如,字符串aaab 有非空子串a, b, aa, ab, aaa, aab, aaab,一共 7 个。注意在计算时,只算本质不同的串的个数。请问,字符串 0100110001010001 有多少个不同的非空子串?思路:用枚举的方法,遍历字符串 0100110001010001,找出每一个子字符串,然后用set集合自带的去重,找出不重复的子字符串,获取set集合的大小即可。import java.awt.原创 2020-10-04 15:52:08 · 360 阅读 · 0 评论 -
【蓝桥杯java】历届试题 小计算器
问题描述 模拟程序型计算器,依次输入指令,可能包含的指令有 1. 数字:‘NUM X’,X为一个只包含大写字母和数字的字符串,表示一个当前进制的数 2. 运算指令:‘ADD’,‘SUB’,‘MUL’,‘DIV’,‘MOD’,分别表示加减乘,除法取商,除法取余 3. 进制转换指令:‘CHANGE K’,将当前进制转换为K进制(2≤K≤36) 4. 输出指令:‘EQUAL’,以当前进制输出结果 5. 重置指令:‘CLEAR’,清除当前数字指令按照以下规则给出: 数字,运算指令不会连原创 2020-09-30 10:23:41 · 149 阅读 · 0 评论 -
【力扣】 两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]class Solution { public int[] twoSum(int[] nums, int target) {原创 2020-09-28 16:50:37 · 99 阅读 · 0 评论 -
【数据结构】基于栈的中缀算式表达式求值
基于栈的中缀算式表达式求值问题:要求:运行软件调试引用函数将字符串转换成浮点数atof函数:strtod函数:memset函数判断符号优先级表代码实现:问题:输入一个中缀算术表达式,求解表达式的值。运算符包括+、-、*、/、(、)、=,参加运算的数为double类型且为正数。(要求:直接针对中缀算术表达式进行计算,不能转换为后缀或前缀表达式再进行计算,只考虑二元运算即可。)要求:(1)创建名为kcsj12.cpp的文件,并编写程序实现指定功能;(2)输入:多组数据,每组数据一行,对应一个算术表达式原创 2020-06-15 20:47:19 · 5138 阅读 · 9 评论 -
【数据结构】二叉树遍历的实现
递归实现二叉树遍历算法思想(1)先序遍历:(2)中序遍历(3)后序遍历二叉树示意图先序遍历中序遍历后续遍历代码实现算法思想按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次。由于二叉树是非线性结构,因此,树的遍历实质上是将二叉树的各个结点转换成为一个线性序列来表示(1)先序遍历:访问根结点先序遍历左子树先序遍历右子树(2)中序遍历中序遍历左子树访问根节点中序遍历右子树(3)后序遍历二叉树后序遍历左子树后序遍历右子树访问根节点示意图先原创 2020-06-12 11:12:38 · 8254 阅读 · 0 评论 -
【数据结构】链表结构实现约瑟夫环
约瑟夫环问题什么是约瑟夫环问题来历问题解决思路代码什么是约瑟夫环约瑟夫问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题。在计算机编程的算法中,类似问题又称为约瑟夫环。又称“丢手绢问题”.)问题来历17世纪的法国数学家加斯帕在《数目的游戏问题》中讲了这样一个故事:15个教徒和15 个非教徒在深海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了一个办法:30个人围成一圆圈,从第一个人开始依次报数,每数到第九个人就将他扔入大海,如此循环进行直到仅余15个人为止。问怎样排法,原创 2020-06-11 16:17:12 · 1968 阅读 · 5 评论 -
给定区间[-2的31次方, 2的31次方]内的3个整数A、B和C,请判断A+B是否大于C。
题目描述给定区间[-2的31次方, 2的31次方]内的3个整数A、B和C,请判断A+B是否大于C。输入描述:输入第1行给出正整数T(<=10),是测试用例的个数。随后给出T组测试用例,每组占一行,顺序给出A、B和C。整数间以空格分隔。输出描述:对每组测试用例,在一行中输出“Case #X: true”如果A+B>C,否则输出“Case #X: false”,其中X是测试用例的...原创 2020-01-12 20:11:45 · 344 阅读 · 1 评论