algorithm
我只会html
这个作者很懒,什么都没留下…
展开
-
最大公约数与最小公倍数
题目描述输入两个正整数m和n,求其最大公约数和最小公倍数。C代码#include <stdio.h>#include <math.h>int gcd(int a,int b){ // Greatest Common Divisor // 辗转相除法求最大公约数 if(a%b == 0){ return b; }else{ return gcd(...原创 2020-04-23 19:39:35 · 313 阅读 · 0 评论 -
31.下一个排列
题目描述实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1代码package pid31;public...原创 2020-04-09 18:53:55 · 178 阅读 · 0 评论 -
122.买卖股票的最佳时机II
best-time-to-buy-and-sell-stock-ii题目描述给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格...原创 2020-04-09 17:36:02 · 75 阅读 · 0 评论 -
96.不同的二叉搜索树(动态规划法)
unique-binary-search-trees题目描述给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?代码package pid96;public class Solution { public int numTrees(int n){ int[] G = new int[n+1]; G[0] = 1; G[1] = 1; for(i...原创 2020-04-07 15:15:25 · 93 阅读 · 0 评论 -
22. 括号生成(回溯法)
题目描述给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]代码package pid22;import java.util.List;import java.util.ArrayList;publ...原创 2020-03-26 13:46:58 · 279 阅读 · 0 评论 -
面试题17.16.按摩师(动态规划法)
题目描述一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。注意:本题相对原题稍作改动示例 1:输入: [1,2,3,1]输出: 4解释: 选择 1 号预约和 3 号预约,总时长 = 1 + 3 = 4。示例 2:输入...原创 2020-03-24 12:39:46 · 334 阅读 · 0 评论 -
面试题42:连续子数组的最大和(动态规划法)
lian-xu-zi-shu-zu-de-zui-da-he-lcof题目描述输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。代码public c...原创 2020-03-20 22:25:57 · 148 阅读 · 0 评论 -
695.岛屿的最大面积
题目描述给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为0。)示例 1:[[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,...转载 2020-03-15 23:06:38 · 136 阅读 · 0 评论 -
733. 图像渲染
题目描述有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间。给你一个坐标 (sr, sc) 表示图像渲染开始的像素值(行 ,列)和一个新的颜色值 newColor,让你重新上色这幅图像。为了完成上色工作,从初始坐标开始,记录初始坐标的上下左右四个方向上像素值与初始坐标相同的相连像素点,接着再记录这四个方向上符合条件的像素点与他们对应四个方向上像...原创 2020-03-15 21:59:01 · 269 阅读 · 0 评论 -
快速排序(填坑与交换)
关于快速排序,可以参考以下文章:填坑交换注意:填坑的本质就是交换,只不过交换把两次填坑合并为一次交换过程而已。我自己也对代码进行了梳理:填坑public void quickSort(int[] nums,int low,int high){ /* * 由于快速排序需要递归,递归的每层作用的数据结构其实是原数组上的一部分,所以参数中引入low和high * 本快速排...原创 2020-02-16 14:29:42 · 1148 阅读 · 0 评论 -
605.贪心法之种花问题
can-place-flowers题目描述假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数 n 。能否在不打破种植规则的情况下种入 n 朵花?能则返回True,不能则返回False。示例 1:输入: flowerbed = [...原创 2020-02-07 16:08:17 · 213 阅读 · 0 评论 -
原码、反码、补码与加法器
本科阶段很早就学过原码、反码与补码,但当时没有实际应用过。今天在刷371题时,涉及包含负数的二进制加法,这才开始明白为什么在计算机中负数需要以补码的形式来存储。在此之前,必须要明白的一个核心概念是同余,这里给出一个引例:我们有一个挂钟,上面均匀分布着12小时,现在时针指向的时间是3点,假如我们要使时针指向5点,需要怎么做呢?比较容易想到的是2种做法:将时针逆时针拨10小时将时针顺时针拨...原创 2020-01-27 21:30:18 · 1479 阅读 · 0 评论 -
模式串匹配的暴力算法
leetcode第28题,要求书写一个方法,传入串hayStack与needle,显示出needle在hayStack中的位置,其实是以前曾经了解过的KMP算法针对的模式串匹配问题。由于写的过程中我没意识到这个问题,所以没有想到采用KMP,而是自己暴力匹配了一下,画了一个比较粗糙的流程图(缺少部分细节):代码如下:package pid28;public class Solution ...原创 2020-01-07 11:18:50 · 230 阅读 · 0 评论 -
如何删除数组中的重复项?
在做leetcode第26题时,删除掉一个数组中的重复元素nums[k],我第一时间 想到的是将下标k之后的元素全部前移,利用一个for循环,覆盖掉自己的前一个元素。这样子需要进行几轮,似乎还需要用到三个指针,非常麻烦。在看题解时,我得到了一种非常简练的解法:删除数组中的重复项,相当于把数组中不相重复的元素全部挪到数组的左侧。 至于右侧剩余的是什么,我想我们没必要考虑,反正最后需要返回的是最终不...原创 2020-01-06 17:37:04 · 1848 阅读 · 0 评论