算法
super_taotao
这个作者很懒,什么都没留下…
展开
-
算法:分糖果问题
题目:一群孩子做游戏,现在请你根据游戏得分来发糖果,要求如下:1 每个孩子不管得分多少,起码分到一个糖果。2. 任意两个相邻的孩子之间,得分较多的孩子必须拿多一些糖果。(若相同则无此限制)给定一个数组arr代表得分数组,请返回最少需要多少糖果。输入:31 2 2输出:4解析:这道题可以用贪心算法来做,给每个孩子尽量少的糖果数。用一维数组表示每个孩子最终分到的糖果的数目。那么本题可以拆分成两个方向的维度:首先从左向右遍历,得分多的孩子的糖果数也要多;其次,从右向左遍历,得分多的孩子的糖果原创 2020-12-23 00:24:56 · 2862 阅读 · 0 评论 -
算法:变形的最大矩阵面积
题目在X轴上水平放置着 N 个条形图,这 N 个条形图就组成了一个柱状图,每个条形图都是一个矩形,求出这些矩阵所能包含的最大矩阵面积,例如x坐标为{1,1,1,1,2,1,1},y坐标为{5,2,5,4,5,1,6},则最大矩阵面积为(1+1+2)* 4 = 16分析以到第四个索引作为结尾来求此时的最大矩阵面积为例,此时的最大矩阵面积可以是(1+1+2)* 4或者(1+1+1+1+2)* 2或者是2 * 5,取他们中的最大值,有了这个想法,下面给出代码。代码package algorithm;原创 2020-08-27 21:39:05 · 317 阅读 · 0 评论 -
算法:在字符串里数字的两边加上“*”
题目:字符中所有出现的数字前后加上符号“*”,其他字符保持不变解析:题目比较简单,不动脑子直接判断也可以做出来:import java.util.*;public class Main{ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { String str =原创 2020-08-26 18:14:18 · 848 阅读 · 0 评论 -
算法:未排序的数组中累加和为给定数字的最长子数组的长度
题目:给定一个数组arr,该数组无序,但每个值均为正数,再给定一个正数k。求arr的所有子数组中所有元素相加和为k的最长子连续数组的长度例如,arr = [1, 2, 1, 1, 1], k = 3累加和为3的最长子数组为[1, 1, 1],所以结果返回3[要求]时间复杂度为O(n),空间复杂度为O(1)没怎么动脑子,给出了一种解法,但是时间复杂度和空间复杂度应该都不对,import java.util.*;public class Main { public static voi原创 2020-08-26 00:47:35 · 269 阅读 · 2 评论 -
算法:求出最长公共子序列与最长公共子串
最长公共子序列:import java.util.*;public class Main{ // 注意这里是最长公共子序列而不是最长公共子串 public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String str1 = scanner.nextLine(); String str2 = scanner.nextLine();原创 2020-07-18 23:24:54 · 102 阅读 · 0 评论 -
算法:换钱的最少货币数
题目给定数组arr,arr中所有的值都为正整数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个aim,代表要找的钱数,求组成aim的最少货币数。输入输入包括两行,第一行两个整数n(0<=n<=1000)代表数组长度和aim(0<=aim<=5000),第二行n个不重复的正整数,代表arr(1≤arri≤109)\left( 1 \leq arr_i \leq 10^9 \right)(1≤arri≤109)。输出输出一个整数,表示组成aim的最原创 2020-07-09 16:43:12 · 432 阅读 · 0 评论 -
剑指offer刷题:滑动窗口的最大值
题目:给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2,6原创 2020-07-02 17:17:31 · 136 阅读 · 0 评论 -
快速排序_你所未见过的船新版本
快速排序的思想大家应该都很熟,但是时间长了,我相信至少有50%的科班生都不一定能够在半小时之内写出来,在这里,我们重新捋一遍快排的思想:其实它的思想也还是分治法,(1)找到一个基准点(可以是起始点,也可以是任何一个位置),比它大的放在右边,比它小的放在左边,这样一个循环下来,这个基准点的位置就确定下来;(2)循环往复,子问题就变成了新的起始点到刚才那个基准点 + 基准点到终点两个子问题 (3)递归解决子问题。时间复杂度:再最坏的情况下,快排的时间复杂度也会达到O(N^2),但是平均复杂度是O(nlog(n)原创 2020-06-28 00:15:11 · 125 阅读 · 0 评论 -
字符数组的全排列
先上代码:import java.util.*;public class FullPermutation { public static void main(String[] args) { List<String> list = new ArrayList<String>(); char[] str = new char[]{'a','b','c','d'}; solution(str,list,0); System.out.println(list);原创 2020-06-26 17:28:41 · 202 阅读 · 0 评论