算法
爱喝雪碧的大个子
潜水中
展开
-
给定一个无序的整数数组,找到其中最长上升子序列的长度。
2020年12月6日,力扣,中等,最长上升子序列一、题目描述给定一个无序的整数数组,找到其中最长上升子序列的长度。示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。二、解题思路解题思路:点击这里练习地址:点击这里三、实现代码实现代码如下:public class Leetcode300 { public static void main(String[] args) {原创 2020-12-06 22:49:31 · 1806 阅读 · 0 评论 -
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ““。
2020年12月5日,力扣,简单,最长公共前缀一、题目描述编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1: 输入: ["flower","flow","flight"] 输出: "fl"二、解题思路横向扫描:依次遍历字符串数组中的每个字符串,对于每个遍历到的字符串,更新最长公共前缀,当遍历完所有的字符串以后,即可得到字符串数组中的最长公共前缀。如果在尚未遍历完所有的字符串时,最长公共前缀已经是空串,则最长公共前缀一定是空串,因此不需要继续原创 2020-12-05 22:00:12 · 5080 阅读 · 0 评论 -
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。
2020年11月29日,力扣,简单,判断子序列一、题目描述给定字符串 s 和 t ,判断 s 是否为 t 的子序列。你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。示例 1: s = "abc", t = "ahbgdc" 返回原创 2020-11-30 00:05:53 · 4442 阅读 · 1 评论 -
每日一题:给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。
2020年11月28日,力扣,简单,比较含退格的字符串一、题目描述给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。注意:如果对空文本输入退格字符,文本继续为空。示例 1: 输入:S = "ab#c", T = "ad#c" 输出:true 解释:S 和 T 都会变成 “ac”。二、解题思路新建一个可变字符串变量遍历字符串,如果为 # ,那么删除前一个字符如果不为 # ,那么就将该字符添加到新字符串中三、实现原创 2020-11-29 00:34:57 · 1163 阅读 · 1 评论 -
每日一题:给定一个只包括 ‘(‘,‘)‘,‘{‘,‘}‘,‘[‘,‘]‘ 的字符串,判断字符串是否有效。
每日一题:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。2020年11月27日,力扣,简单,有效的括号一、题目描述给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1: 输入: "()" 输出: true示例 2: 输入: "()[]{}" 输出: true二、解题思原创 2020-11-28 00:04:03 · 2061 阅读 · 0 评论 -
每日一题:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
每日一题:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。2020年11月26日,力扣,简单,只出现一次的数字一、题目描述给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。示例 1: 输入: [2,2,1] 输出: 1二、解题思路官方采用了异或思想:不得不说,真的很秀任何数和 0 做异或运算,结果仍然是原来的数,即 a⊕0=a。任何数和其自身做异或运算,结果是 0,即 a⊕a=原创 2020-11-26 23:31:58 · 1584 阅读 · 0 评论 -
每日一题:斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。
每日一题:斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。2020年11月25日,力扣,简单,斐波那契数一、题目描述斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.给定 N,计算 F(N)。示例 1:原创 2020-11-25 23:32:04 · 1936 阅读 · 0 评论 -
每日一题:假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。
每日一题:假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。2020年11月24日,力扣,简单,种花问题一、题目描述假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数 n 。能否在不打破种植规则的情况下种入 n 朵花?能则返回True,不能则返回False。示例 1原创 2020-11-24 23:26:47 · 2230 阅读 · 0 评论 -
每日一题:给定两个二叉树,编写一个函数来检验它们是否相同。
每日一题:给定两个二叉树,编写一个函数来检验它们是否相同。2020年11月23日,力扣,简单,相同的树一、题目描述给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入: 1 1 / \ / \ 2 3 2 3[1,2,3], [1,2,3]输出: true二、解题思路可以采用递归思想进行判断原创 2020-11-23 21:01:24 · 506 阅读 · 0 评论 -
每日一题:给定一个单词,你需要判断单词的大写使用是否正确。
每日一题:给定一个单词,你需要判断单词的大写使用是否正确。2020年11月22日,力扣,简单,检测大写字母一、题目描述给定一个单词,你需要判断单词的大写使用是否正确。我们定义,在以下情况时,单词的大写用法是正确的: 全部字母都是大写,比如"USA"。 单词中所有字母都不是大写,比如"leetcode"。 如果单词不只含有一个字母,只有首字母大写, 比如 "Google"。 否则,我们定义这个单词没有正确使用大写字母。示例 1: 输入: "USA" 输出: True示例 2: 输入原创 2020-11-22 23:45:48 · 1416 阅读 · 0 评论 -
每日一题:给定两个数组,编写一个函数来计算它们的交集。
每日一题:给定两个数组,编写一个函数来计算它们的交集。2020年11月21日,力扣,简单,两个数组的交集一、题目描述给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]二、实现代码方法一:Set实现实现代码如下:public class Leetcode349_1 { public static void main(String[] args) { int[] nums1 =原创 2020-11-21 23:43:57 · 2081 阅读 · 0 评论 -
每日一题:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
每日一题:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。2020年11月20日,力扣,简单,最大子序和一、题目描述给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。二、解题思路一、动态规划思想:若前一个元素大于0,那么将其加到当前元素上用dp[i]表原创 2020-11-20 22:49:42 · 6714 阅读 · 4 评论 -
每日一题:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
每日一题:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。2020年11月19日,力扣,简单,移动零https://leetcode-cn.com/problems/move-zeroes/示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):import numpy as npimport pandas as pdimport matplotlib.pyplot as原创 2020-11-19 23:30:57 · 5551 阅读 · 0 评论 -
每日一题:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。
每日一题:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。2020年11月18日,力扣,搜索插入位置一、题目描述给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例:输入: [1,3,5,6], 5输出: 2二、解题思路参考一位大佬的想法:点此查看主要思想为二分法先设定左侧下标 left 和右侧下标 right,再计算中间下标 mid每次根据 nums[mid]原创 2020-11-19 14:24:49 · 5292 阅读 · 0 评论 -
每日一题:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
每日一题:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。2020年11月17日,力扣,删除排序数组中的重复项一、题目描述给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。原创 2020-11-17 23:04:21 · 1292 阅读 · 0 评论 -
每日一题:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。
算法:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。2020年11月15日,力扣,两数之和一、题目描述给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 +原创 2020-11-16 23:24:25 · 3251 阅读 · 1 评论 -
每日一题:将一个正整数分解质因数。例如,输入90打印出90=2*3*3*5
算法:将一个正整数分解质因数。例如,输入90打印出90=233*52020年11月15日,天融信校招笔试,算法第一题一、题目描述将一个正整数分解质因数。例如,输入90打印出90=233*5程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:(1)如果这个质数恰好等于n,则说明分解质因数的过程已经结束,打印出即可。(2)如果n>k,但n能被k整除,则应打印出k的值,并用n除以的商作为新的正整数,重复执行第一步。(3)如果n不能被k整除,则用k+1作为k的值重复执行原创 2020-11-15 23:57:27 · 1899 阅读 · 0 评论 -
每日一题:字符串排序,把字符串转换为char,进行冒泡排序
算法:字符串排序,把字符串转换为char,进行冒泡排序2020年11月15日,天融信校招笔试,算法第二题一、题目描述字符串排序把字符串转换为char,进行冒泡排序输入描述 : 字符串如:234rtyui 输出描述 : 234irtuy二、解题思路一、首先要知道两个方法:String.toCharArray() 方法将字符串转换为字符数组。String.valueOf(char[] data) : 将 char 数组 data 转换成字符串 。二、解题思路将输入的字原创 2020-11-15 21:20:26 · 776 阅读 · 0 评论 -
算法:选择排序
算法:选择排序2020年11月14日文章目录算法:选择排序一、选择排序的思想二、冒泡排序的思路三、冒泡排序的实现一、选择排序的思想双重循环遍历数组,每经过一轮比较,找到最小元素的下标,将其交换至首位。二、冒泡排序的思路第一轮,找到最小的元素,和数组第一个数交换位置。第二轮,找到第二小的元素,和数组第二个数交换位置…直到最后一个元素,排序完成。动画演示如下:资料来源: https://zhuanlan.zhihu.com/p/252631515三、冒泡排序的实原创 2020-11-14 23:34:46 · 77 阅读 · 0 评论 -
每日一题:二分查询(非递归方式),{1,3,8,10,11,67,100},编程实现二分查找,要求使用非递归方式完成。
算法:现有数组{1,3,8,10,11,67,100},编程实现二分查找,要求使用非递归方式完成。2020年11月13日一、题目描述现有数组{1,3,8,10,11,67,100},编程实现二分查找,要求使用非递归方式完成。二、解题思路主要使用二分法查询思想三、实现代码代码如下:public class BinarySearchNonRecursive { public static void main(String[] args) { int arr[] =原创 2020-11-13 21:14:43 · 141 阅读 · 0 评论 -
每日一题:给你一个长度为n的序列A,你需要算出有多少个三元组(Ai,Aj,Ak)满足i<j<k且Ai≤Aj≤Ak。
算法:给你一个长度为n的序列A,你需要算出有多少个三元组(Ai,Aj,Ak)满足i<j<k且Ai≤Aj≤Ak。2020年11月10日,微众银行校招笔试,算法第三题一、题目描述题目:给你一个长度为n的序列A,你需要算出有多少个三元组(Ai,Aj,Ak)满足i<j<k且Ai≤Aj≤Ak。输入描述: 第一行为一个整数n,表示序列A的长度。 接下来一行为n个整数,第i个数表示Ai的值。输出描述: 输出一个整数x,表示满足要求的三元组数量。样例输入:原创 2020-11-12 20:03:57 · 7661 阅读 · 4 评论 -
每日一题:现在你在玩一款游戏,叫做节奏大师。它有三种判定
算法:现在你在玩一款游戏,叫做节奏大师。它有三种判定2020年11月10日,微众银行校招笔试,算法第二题一、题目描述题目:现在你在玩一款游戏,叫做节奏大师。它有三种判定:P : Perfect完美,加200分。G : Great很棒,加100分。M : Miss错过,不加分也不扣分,但累计三次Miss就会输掉游戏。另外有一种奖励是连击奖励。一旦连续三个Perfect之后,后续连击的Perfect分数将变成250分,但一旦打出了Great或者Miss则连击数将重新开始计算。你的任务是根据原创 2020-11-11 20:42:41 · 1244 阅读 · 1 评论 -
每日一题:在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写)
算法:在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写)来源:2020年11月11日,小鱼易连一面,算法第一题一、解题思路一、首先要知道两个方法:String类的charAt() 方法用于返回指定索引处的字符。集合类中的Map.get() 方法返回指定键所映射的值。如果此映射不包含该键的映射关系,则返回 null。二、解题思路定义一个Map集合,键用来存储字符,值用来存储存字符原创 2020-11-11 19:58:08 · 699 阅读 · 0 评论 -
每日一题:如何用栈实现队列
算法:如何用栈实现队列文章目录算法:如何用栈实现队列一、解题思路二、实现代码一、解题思路栈的特点是陷入后出,出入元素都在同一端。队列的特点是先入先出,出入元素在队头和队尾两端。我们可以使用两个栈来模拟一个队列。即让其中一个栈作为队列的入口,负责插入新元素。一个栈作为队列的出口,负责移除老元素。例如,在栈中插入数字1,2,3,那么出栈的顺序会为3,2,1,将出栈的数顺序插入另一个栈中,那么当另一个栈做出栈操作时,出栈的顺序为1,2,3。如此,便实现了使用两个栈模拟一个队列。二、实现代原创 2020-10-24 23:55:40 · 135 阅读 · 0 评论 -
每日一题:判断一个数是否为回文数
算法:判断一个数是否为回文数文章目录算法:判断一个数是否为回文数一、题目描述二、代码实现一、题目描述判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。二、代码实现//判断是否为回文数public class Palindrome { public static void main(String[] args) { boolean res = isPalindrome(1221); System.out.prin原创 2020-10-24 23:24:49 · 269 阅读 · 0 评论 -
算法:快速排序之单边循环法(二)
快速排序的学习(二)第二节 快速排序文章目录快速排序的学习(二)前言一、快速排序的实现(单边循环法)前言算法对于一个程序员来说可以是一门必修课,基础的排序算法更是重要。在我学习期间,将自己学到的东西进行分享,希望可以帮到大家。特别感谢《漫画算法-小灰的算法之旅》,魏梦舒著。提供的知识。一、快速排序的实现(单边循环法)双边循环法从数组的两边交替遍历元素,虽然更加直观,但是代码实现相对烦琐。而单边循环法则简单得多,只从数组的一边对元素进行遍历和交换。我们来看一看详细过程。给出原始数列原创 2020-10-24 00:24:29 · 1004 阅读 · 1 评论 -
算法:快速排序之双边循环法(一)
快速排序的学习第二节 快速排序文章目录快速排序的学习一、初识快速排序二、快速排序的思想三、快速排序的实现1、双边循环法一、初识快速排序同冒泡排序一样,快速排序也属于交换排序 ,通过元素之间的比较和交换位置来达到排序的目的。不同的是,冒泡排序在每一轮中只把1个元素冒泡到数列的一端,而快速排序则在每一轮挑选一个基准元素,并让其他比它大的元素移动到数列一边,比它小的元素移动到数列的另一边,从而把数列拆解成两个部分。这种思路就叫作分治法 。二、快速排序的思想随机找出一个数,可以随机取,原创 2020-10-23 11:07:31 · 1132 阅读 · 3 评论 -
算法:冒泡排序
冒泡排序的学习第一节 冒泡排序文章目录冒泡排序的学习一、冒泡排序的思想二、冒泡排序的思路三、冒泡排序的实现一、冒泡排序的思想冒泡排序,类似于水中冒泡,较大的数沉下去,较小的数慢慢冒起来,假设从小到大,即为较大的数慢慢往后排,较小的数慢慢往前排。二、冒泡排序的思路比较相邻的元素。如果第一个比第二个大,就交换它们两个;对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素就是最大的数;排除最大的数,接着下一轮继续相同的操作,确定第二大的数…重复步骤1-3,直到排序原创 2020-10-22 00:04:08 · 492 阅读 · 2 评论