
算法
文章平均质量分 86
每天刷一点算法
蝉沐风的码场
这个作者很懒,什么都没留下…
展开
-
让ChatGPT做当年的高考现代文阅读
我让ChatGPT做一道当年的高考现代文阅读题,看看能得几分原创 2023-02-15 11:16:30 · 4471 阅读 · 1 评论 -
求最大子矩阵的大小
【题目】给定整型矩阵map,其中只有0和1两种数值,求其中全是1的所有矩形区域中,最大的矩形区域为1的数量例如:1 1 1 0其中,最大矩形区域有3个1,因此返回3再比如:1 0 1 11 1 1 11 1 1 0最大矩形区域有6个1,返回6【解答】package com.chanmufeng.codingInterviewGuide.stackAndQueue_10;...原创 2018-11-27 16:49:15 · 582 阅读 · 0 评论 -
最大值减去最小值不超过num的子数组数量
【问题】给定数组arr和整数numnumnum,返回共有多少个子数组满足如下情况:max(arr[i...j])−min(arr[i...j])&lt;=nummax(arr[i...j])-min(arr[i...j])&lt;=nummax(arr[i...j])−min(arr[i...j])<=num【解答】package com.chanmufeng.c...原创 2018-11-27 12:44:56 · 515 阅读 · 0 评论 -
用栈实现另一个栈的排序
package com.chanmufeng.codingInterviewGuide.stackAndQueue_10;import java.util.Stack;/** * 用栈实现另一个栈的排序(由大到小) */public class SortStackByStack { public static void solve(Stack<Integer> s...原创 2018-11-27 11:28:58 · 291 阅读 · 0 评论 -
排序算法总结2---快速排序
本文承接排序算法总结11 快速排序—版本1算法思想: 分治算法思想的典型应用 将数组中第一个元素arr[0]作为标志元素,通过一趟快速排序将待排数组分成两部分,其中左侧部分的元素值都比标志元素小,而右侧部分的元素值都大于等于标志元素;然后接着对两部分数组递归应用快速排序,直至全部有序。 从上图中我们可以看出,第一趟快速排序结束后,标志元素所处的位置即为它的最终位置;同时我们也可以...原创 2018-05-12 23:50:54 · 1178 阅读 · 0 评论 -
堆、堆排序与索引堆
完整代码参见github堆的概念定义 堆就是一棵二叉树,每个节点包含一个键,不过还需要满足以下两个条件: (1)必须是完全二叉树,也就是说,树的每一层都必须是满的,除了最后一层最右边的元素可能有所缺失 (2)堆特性(又称为父母优势,这里我们以最大堆为例),每一个节点都要大于或等于它的子节点(对于叶子节点我们认为是满足这个条件的) 举例说明,上图中只有第一棵树是堆,第二棵树违背了...原创 2018-05-16 15:44:33 · 682 阅读 · 0 评论 -
排序算法总结1
下面介绍的所有排序默认都为非递减排序!简单排序简单排序算法主要包括冒泡排序、选择排序、插入排序以及由插入排序改进而来的希尔排序,其时间复杂度都为 nlognnlognnlogn冒泡排序算法思想: 属于暴力解法 从第一个元素开始,两两比较大小,如果后者 &amp;lt; 前者,则交换两者顺序,以此类推,直到最大的元素“冒泡”到它的最终位置 代码如下:#include...原创 2018-05-12 21:36:25 · 302 阅读 · 0 评论 -
二叉树的非递归遍历
import java.util.Stack;public class PreOrder { public static class Node { public int value; public Node left; public Node right; public Node(int value) { ...原创 2018-11-20 13:40:45 · 455 阅读 · 0 评论 -
生成滑动窗口的最大值数组
package com.chanmufeng.codingInterviewGuide.stackAndQueue_10;import java.util.LinkedList;/** * 生成窗口的最大值数组 */public class MaxWindow { /** * @param arr 给定数组 * @param w 窗口长度 *...原创 2018-11-27 12:02:25 · 280 阅读 · 0 评论 -
用两个栈实现队列功能
package com.chanmufeng.codingInterviewGuide.stackAndQueue_10;import java.util.Stack;/** * 用两个栈实现队列功能 */public class StackQueue { private static Stack<Integer> pushStack; private s...原创 2018-11-27 08:43:20 · 296 阅读 · 0 评论 -
求数组中等于给定值的最长子数组
算法原型/** 1. 求数组中等于给定值的最长子数组 */public class LongestSubArrayEqualsAim { public static int solve(int[] arr, int target) { if (arr == null || arr.length == 0) return 0; ...原创 2018-11-25 10:17:20 · 647 阅读 · 0 评论 -
5. Longest Palindromic Substring
package com.chanmufeng.leetcode;/** * faster than 61.63% * 最后求取子串的处理不是很地道 */public class LongestPalindromicSubString_5 { private static char[] manacherString(String str) { char[] str...原创 2018-11-24 18:09:44 · 143 阅读 · 0 评论 -
218. The Skyline Problem
package com.chanmufeng.questions;import java.util.*;public class Skyline { public static class Node { public int pos; public int height; public boolean isUp; pu...原创 2018-11-24 16:04:57 · 138 阅读 · 0 评论 -
数组heapify变为堆结构
public class Heapify { public static void heapify(int[] arr) { int length = arr.length; for (int i = (length - 1) / 2; i >= 0; i--) { shiftDown(arr, i); } ...原创 2018-11-19 17:00:30 · 363 阅读 · 0 评论 -
获取数组中前K小的数字
public class GetMinKNums { //向堆中插入元素 public static void insert(int[] arr, int index, int value) { arr[index] = value; while (index != 0) { int parent = (index - 1) ...原创 2018-11-19 16:00:24 · 420 阅读 · 0 评论 -
75. Sort Colors
方法1:快速排序的partition思想class Solution { public void sortColors(int[] nums) { int l = 0; int r = nums.length-1; int cur = l; while (cur <= r){ if (nums[...原创 2018-11-16 11:57:34 · 184 阅读 · 0 评论 -
402. Remove K Digits
faster than 88.79% of Java online submissions for Remove K Digits.public class Solution { public String removeKdigits(String num, int k) { int newLength = num.length() - k; char...原创 2018-11-13 07:45:50 · 276 阅读 · 0 评论 -
实现带有返回栈中最小元素功能的栈结构
实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作要求:pop、push、getMin操作的时间复杂度都是O(1)版本1import java.util.Stack;/** * 实现含有获取栈内最小元素功能的栈结构 * 版本一 */public class StackWithGetMinMethod { public static class...原创 2018-11-03 11:28:40 · 412 阅读 · 0 评论 -
一文读懂KMP算法
/** * 判断str2是否在str1中,是则返回起始字符索引在str1中的索引,否则返回-1 */public class KMP { public static int getIndexOf(String str1, String str2) { if (str1 == null || str2 == null || str2.length() &amp;lt; 1 |...原创 2018-11-15 16:17:46 · 454 阅读 · 3 评论 -
使用固定长度的数组实现队列
/** * 固定长度数组实现队列 */public class ArrayQueue { private int[] data; private int start; private int end; private int size; public ArrayQueue(int capacity) { if (capacity &l...原创 2018-11-02 23:02:32 · 1324 阅读 · 0 评论 -
使用固定大小的数组实现栈结构
/** * 使用数组实现固定大小的栈结构 */public class ArrayStack { private int[] data; private int index; public ArrayStack(int capacity){ if (capacity < 0) throw new IllegalArgum...原创 2018-11-02 23:01:23 · 302 阅读 · 0 评论 -
求数组相邻两数的最大差值
给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度O(N)O(N)O(N),且要求不能用非基于比较的排序import java.util.Arrays;/** * 求给定数组排序之后相邻两数的最大差值,要求时间复杂度为O(N) */public class MaxGap { public static int maxGap(int[] arr) { ...原创 2018-11-02 21:15:29 · 3941 阅读 · 1 评论 -
奶牛生牛的问题
2018/11/2母牛每年生已知母牛,新出生的母牛三年后也能每年生已知母牛,假设母牛不会死亡,求N年后,母牛的数量其实这道题非常简单,假设我们要求第N年的母牛的数量,我们表示为F(N)F(N)F(N)那么首先第N−1N-1N−1年的母牛数量一定包含在了第NNN年当中,即F(N−1)F(N-1)F(N−1)除此之外还应该包括新出生的小母牛,主要问题就是我们要知道新出生的小母牛的数量,本质...原创 2018-11-02 14:22:38 · 1103 阅读 · 0 评论 -
打印字符串所有子序列
2018/11/2打印一个字符串的全部子序列,包括空字符串public class SubSequences { /** * 打印字符串的所有子序列 * * @param chars 字符数组 * @param index 当前所在的字符位置 * @param res 之前获得的子序列 */ public ...原创 2018-11-02 11:27:09 · 1618 阅读 · 1 评论 -
二维矩阵的最小路径问题
2018/11/2给定一个二维数组,数组中每个数都是正数,要求从左上角出发走到右下角,并且只能向右或向下移动,求沿途经过的数字的最小累加和public class MinPath { //最短路径的递归算法 public static int minPath1(int[][] matrix) { return solve(matrix, matrix.le...原创 2018-11-02 10:26:21 · 2286 阅读 · 0 评论 -
利用递归,不使用额外数据结构实现栈的逆序
给你一个栈,在不能申请额外数据结构,之u能使用递归函数的情况下,实现逆序栈的操作import java.util.Stack;public class ReverseStack { //获取并删除栈底元素 public static int getBottomElement(Stack&lt;Integer&gt; stack) { int res = ...原创 2018-11-02 09:56:53 · 723 阅读 · 0 评论 -
彻底理解0-1背包问题
0-1背包问题给定n个重量为w1,w2,w3,…,wn,价值为v1,v2,v3,…,vn的物品和容量为C的背包,求这个物品中一个最有价值的子集,使得在满足背包的容量的前提下,包内的总价值最大0-1背包问题指的是每个物品只能使用一次递归方法首先我们用递归的方式来尝试解决这个问题我们用F(n,C)F(n,C)F(n,C)表示将前nnn个物品放进容量为CCC的背包里,得到的最大的价值。我们用自...原创 2018-10-07 08:33:04 · 170050 阅读 · 56 评论