自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(207)
  • 收藏
  • 关注

原创 【Lintcode】514. Paint Fence

题目地址:https://www.lintcode.com/problem/paint-fence/description给定nnn个柱子,可以染kkk种颜色,要求不能有连续超过两个相邻的柱子颜色一样,问有多少种染色方法。思路是动态规划。设f[i]f[i]f[i]是有iii根柱子的情况下有多少种染色方法。那么如果第i−1i-1i−1根与第iii根柱子颜色相同,则有(k−1)f[i−2](k-1)f[i-2](k−1)f[i−2]种方法(这是根据对称性,第i−2i-2i−2根柱子只能涂k−1k-1k−1

2020-11-30 02:45:47 181

原创 【Lintcode】191. Maximum Product Subarray

题目地址:https://www.lintcode.com/problem/maximum-product-subarray/description给定一个长nnn的数组AAA,求其最大乘积子数组,返回那个最大乘积。思路是动态规划。设f[i]f[i]f[i]是以A[i]A[i]A[i]结尾的最大乘积子数组的乘积,那么如果A[i]≥0A[i]\ge 0A[i]≥0,则f[i]=max⁡{A[i],A[i]f[i−1]}f[i]=\max\{A[i],A[i]f[i-1]\}f[i]=max{A[i],A

2020-11-30 02:17:57 143

原创 【Leetcode】1081. Smallest Subsequence of Distinct Characters

题目地址:https://leetcode.com/problems/smallest-subsequence-of-distinct-characters/给定一个字符串sss,要求返回其包含全部字母(每个字母只包含一个)且字典序最小的子序列。题目保证sss只含英文小写字母。思路是单调栈。参考https://blog.csdn.net/qq_46105170/article/details/108793778。代码如下:class Solution { public String smal

2020-11-30 01:35:41 285 1

原创 【Leetcode】1653. Minimum Deletions to Make String Balanced

题目地址:https://leetcode.com/problems/minimum-deletions-to-make-string-balanced/给定一个只含aaa或bbb的字符串sss,允许将其中若干字符由aaa变为bbb或相反。问至少变多少个字符,可以使得sss变为aaa先bbb后的模式(意思是任意一个aaa都在任意一个bbb之前)。只含aaa或只含bbb的字符串也合法。我们只需枚举分界点即可。比如,我们枚举s[0:k]s[0:k]s[0:k]都是aaa,而s[k+1:ls−1]s[k+1

2020-11-30 01:35:09 322

原创 【Lintcode】1331. English Software

题目地址:https://www.lintcode.com/problem/english-software/description给定一个数组AAA代表每个人的分数,有一系列询问,问下标iii的同学在班里超过了百分之多少的同学(分数一样也视为超过)。如果某个同学分数是sss,那么这个百分比可以这样算出:(∣{i∣A[i]≤s}∣−1)/lA×100%(|\{i|A [i]\le s\}|-1)/l_A\times 100\%(∣{i∣A[i]≤s}∣−1)/lA​×100%返回每个询问的答案,省略百分

2020-11-30 01:34:57 189

原创 【Lintcode】1368. Same Number

题目地址:https://www.lintcode.com/problem/same-number/description给定一个数组AAA,问其是否存在两个相同的数的距离小于给定数kkk。如果存在则返回"YES",否则返回"NO"。遍历AAA,用一个哈希表存每个数出现的最新位置。如果发现相邻的相同数距离小于kkk了则立即返回”YES“。否则最后返回"NO"。代码如下:import java.util.HashMap;import java.util.Map;public class Solu

2020-11-30 01:34:45 165

原创 【Leetcode】1672. Richest Customer Wealth

题目地址:https://leetcode.com/problems/richest-customer-wealth/给定一个二维数组AAA,A[i]A[i]A[i]代表客户iii在各个银行的资产。问总资产最多的客户的总资产是多少。直接统计。代码如下:public class Solution { public int maximumWealth(int[][] accounts) { int res = 0; for (int[] account : acc

2020-11-30 01:34:14 335

原创 【Leetcode】1673. Find the Most Competitive Subsequence

题目地址:https://leetcode.com/problems/find-the-most-competitive-subsequence/给定一个数组AAA,求其字典序最小的长kkk的子序列。思路是单调栈。求长kkk的子序列相当于在AAA里删掉lA−kl_A-klA​−k个数字。我们用一个变量rrr标记还可以删多少个数字,一开始赋值为lA−kl_A-klA​−k。接着开一个从栈底到栈顶严格单调上升的栈,如果栈非空并且栈顶大于新来的数,并且还能删数字(指r>0r>0r>0成立)

2020-11-30 01:34:01 543

原创 【Lintcode】1338. Parking Dilemma

题目地址:https://www.lintcode.com/problem/parking-dilemma/description给定一个数组AAA,再给定正整数kkk,求最短的闭区间[a,b][a,b][a,b]使得其能包含AAA的至少kkk个数,返回这个区间的b−a+1b-a+1b−a+1。题目保证kkk小于等于AAA的长度。先排序,然后求最大的A[i+k−1]−A[i]+1A[i+k-1]-A[i]+1A[i+k−1]−A[i]+1即可。代码如下:import java.util.Arrays

2020-11-29 08:50:58 548

原创 【Lintcode】1327. Delete String

题目地址:https://www.lintcode.com/problem/delete-string/description给定一个非空字符串sss,要求删掉一个字符,使得剩余字符串拼接而成的新字符串字典序最小。返回那个最小字典序的字符串。思路是单调栈。从左向右扫描sss,当遇到第一个s[i]>s[i+1]s[i]>s[i+1]s[i]>s[i+1]的时候删去s[i]s[i]s[i]。注意只删一次。如果一遍扫描下来没有删,则删最后一个字符。代码如下:public class So

2020-11-29 08:43:40 161

原创 【Lintcode】1146. Chess piece rotation

题目地址:https://www.lintcode.com/problem/chess-piece-rotation/description给定一个棋盘AAA,上面标记了颜色000和111,再给定一系列位置FFF,要求将FFF四个邻居的颜色对调(010101互换)。代码如下:public class Solution { /** * @param A: Initial chessboard * @param F: Flipped coordinates * @r

2020-11-29 08:37:53 86

原创 【Lintcode】970. Big Business(配数学证明)

题目地址:https://www.lintcode.com/problem/big-business/description给定两个数组aaa和bbb,a[i]a[i]a[i]代表商品iii的成本,b[i]b[i]b[i]代表商品的卖价。初始资金是kkk,问通过交易,最后能达到的最大资金是多少。每个商品最多只能买卖一次。思路是贪心。直觉上来讲,最贵的商品可能一下子买不起,那可以先买便宜的商品,赚了钱之后看看能不能再买更贵的商品。所以思路就是,先将所有商品按成本由低到高排序,然后依次买卖。如果到达某个商

2020-11-29 08:28:46 108

原创 【Leetcode】1671. Minimum Number of Removals to Make Mountain Array

题目地址:https://leetcode.com/problems/minimum-number-of-removals-to-make-mountain-array/给定一个数组AAA,问至少删除几个元素,就能得到一个”山峰数组“。一个数组BBB是山峰数组指∃i,0<i<lB−1\exists i,0<i<l_B-1∃i,0<i<lB​−1使得B[0]<...<B[i]>...>B[lB−1]B[0]<...<B[i]>.

2020-11-29 02:16:41 185

原创 【Leetcode】1670. Design Front Middle Back Queue

题目地址:https://leetcode.com/problems/design-front-middle-back-queue/要求设计一个双端队列,除了要实现队首队尾添加删除元素之外,还需要实现从中间添加删除的操作。中间的定义是,如果整个队列有偶数个元素,则取靠近队头的那个中间元素。在中间添加元素时,如果元素个数奇数个,则在正中间元素之前添加元素。如果执行pop的时候队列空,则返回−1-1−1。思路是用两个双端队列,一个存前半部分元素,一个存后半部分元素。同时,我们保持后半部分元素个数不少于前半

2020-11-29 01:54:49 370

原创 【Leetcode】1669. Merge In Between Linked Lists

题目地址:https://leetcode.com/problems/merge-in-between-linked-lists/给定两个链表l1l_1l1​和l2l_2l2​,要求将l1l_1l1​的下标为a∼ba\sim ba∼b的节点删除,并且将l2l_2l2​插在中间。返回新链表头。题目保证aaa和bbb下标都合法。先找到l1l_1l1​下标为a−1a-1a−1的节点,然后找到下标为b+1b+1b+1的节点,接着将l2l_2l2​接到a−1a-1a−1节点后面,再找到l2l_2l2​的尾节点,

2020-11-29 01:30:06 236

原创 【Leetcode】1668. Maximum Repeating Substring

题目地址:https://leetcode.com/problems/maximum-repeating-substring/给定两个字符串sss和ttt,问ttt最多重复多少次仍然是sss的子串。返回次数。如果ttt本身就不是sss的子串,则返回000。暴力枚举ttt重复多少次仍然在sss里。代码如下:public class Solution { public int maxRepeating(String sequence, String word) { String

2020-11-29 01:18:25 276

原创 【Lintcode】1585. Moving Stones

题目地址:https://www.lintcode.com/problem/moving-stones/description给定一个数组AAA,要将所有数字变为1,3,5,...1,3,5,...1,3,5,...或者2,4,6,...2,4,6,...2,4,6,...,问最少的变化的总差是多少。先排序,然后枚举是变为2,4,6,...2,4,6,...2,4,6,...还是1,3,5,...1,3,5,...1,3,5,...。代码如下:import java.util.Arrays;pu

2020-11-29 01:02:28 89

原创 【Lintcode】327. Distance Metrics

题目地址:https://www.lintcode.com/problem/distance-metrics/description给定一个长nnn的数组AAA,其中可能有重复数字,要求返回一个数组BBB,与AAA同长,并且要求B[i]=∑A[k]=A[i]∣k−i∣B[i]=\sum_{A[k]=A[i]}|k-i|B[i]=A[k]=A[i]∑​∣k−i∣思路是前缀和。首先开个哈希表,存一下每个数字出现在了哪些位置。不妨设xxx出现的位置的数组是ccc,也就是说∀j,A[c[j]]=x\foral

2020-11-29 01:02:03 259

原创 【Lintcode】1575. Spring Tour(配数学证明)

题目地址:https://www.lintcode.com/problem/spring-tour/description有nnn组小朋友去春游,数组AAA代表每组的人数,保证每组不超过444人。现在有若干量容积是444人的车,同一组小朋友必须坐同一辆车,但每辆车不一定要坐满。问至少要多少辆车。思路是贪心。我们先想一个办法尽量让每辆车载最多的人,然后来证明方案的最优性。先数一下人数1,2,3,41,2,3,41,2,3,4的组各有多少个,记为数组ccc。首先,人数444的组肯定要坐满一辆车,所以答案

2020-11-28 03:03:50 316

原创 【Lintcode】1559. Take the Element and Query the Sum

题目地址:https://www.lintcode.com/problem/take-the-element-and-query-the-sum/description给定一个长nnn的数组AAA,求∑0≤i<j<nA[i]A[j]\sum_{0\le i<j<n}A[i]A[j]∑0≤i<j<n​A[i]A[j]。思路是前缀和数组。可以这样看:∑0≤i<j<nA[i]A[j]=∑j=1n−1(A[j]∑i=0j−1A[i])\sum_{0\le i&l

2020-11-28 02:10:27 262

原创 【Lintcode】1896. Pick Carrots

题目地址:https://www.lintcode.com/problem/pick-carrots/description给定一个m×nm\times nm×n的矩阵AAA,保证每个位置的数都是正的,其代表该位置的胡萝卜数量。从矩阵中心点出发(中心点的意思是正中央的行与列;如果行数列数是偶数,则取偏左或者偏上的),每次都朝四个方向中胡萝卜最多的方向走一步,如果四个方向都没有胡萝卜,则停止。问最后总共采了多少个胡萝卜。代码如下:public class Solution { /**

2020-11-28 01:49:53 259

原创 【Lintcode】1895. Arrange Interview City

题目地址:https://www.lintcode.com/problem/arrange-interview-city/description给定NNN个面试者需要面试,公司安排了两个面试的城市AAA和BBB,每个面试者到两个城市的花费给定。要求将他们均匀分配到两个城市,使得总花费最少。问最少花费。思路是贪心。先将所有人都派往AAA,然后看怎样将其中的部分人派往BBB使得花费降低最大,显然要找那些cA−cBc_A-c_BcA​−cB​最大的那批人(cAc_AcA​表示去AAA城市的花费,cBc_Bc

2020-11-28 01:34:52 203

原创 【Lintcode】1747. Robot Return to Origin

题目地址:https://www.lintcode.com/problem/robot-return-to-origin/description给定一个初始位置(0,0)(0,0)(0,0)的机器人,给定一个字符串表达命令,UDLR分别代表向上下左右走一步。问最终机器人是否回到了原点。只需看上下、左右走的步数是否一样。代码如下:public class Solution { /** * @param moves: a string of its moves * @retu

2020-11-28 01:20:08 140

原创 【Lintcode】1656. Legal Number Statistics

题目地址:https://www.lintcode.com/problem/legal-number-statistics/description给定数组AAA,判断有多少个数位于[L,R][L,R][L,R]范围内。代码如下:public class Solution { /** * @param a: the array a * @param L: the integer L * @param R: the integer R * @return:

2020-11-28 01:12:42 143

原创 【Lintcode】1455. Valid Array

题目地址:https://www.lintcode.com/problem/valid-array/description给定一个数组AAA,判断其出现奇数次的数是否只有一个,如果是,则返回该数,否则返回−1-1−1。用哈希表计数后判断即可。代码如下:import java.util.HashMap;import java.util.List;import java.util.Map;public class Solution { /** * @param a: The a

2020-11-28 00:58:43 185

原创 【Lintcode】1445. Delete Characters

题目地址:https://www.lintcode.com/problem/delete-characters/description给定两个字符串sss和ttt,判断ttt是否是sss的子序列。代码如下:public class Solution { /** * @param s: The string s * @param t: The string t * @return: Return if can get the string t */

2020-11-28 00:53:59 178

原创 【Lintcode】1178. Student Attendance Record I

题目地址:https://www.lintcode.com/problem/student-attendance-record-i/description给定一个出勤记录,以字符串表示,如果有超过一个A或者连续超过两个L,则返回false,否则返回true。直接遍历字符串再判断。代码如下:public class Solution { /** * @param s: a string * @return: whether the student could be rewa

2020-11-28 00:46:27 135

原创 【Lintcode】318. Character Grid

题目地址:https://www.lintcode.com/problem/character-grid/description给定两个字符串AAA和BBB,返回一个矩阵。串AAA要求从左往右输出,串BBB要求从上往下输出,两串交于一点(即有一个字母共用)。共用的字母要求是串A中第一个在串B也包含的字母,并且要求交点是两串中各自第一次出现共用的字母的位置。别的位置填.补齐。先从AAA中找到第一个包含在BBB中的字符,然后构造矩阵。代码如下:import java.util.ArrayList;im

2020-11-28 00:30:57 95

原创 【Lintcode】1099. Non-decreasing Array

题目地址:https://www.lintcode.com/problem/non-decreasing-array/description给定一个长nnn的数组AAA,问改变其中最多一个数(也可以不改),是否能将其变为非降数组。思路是扫描数组,如果发现A[i]>A[i+1]A[i]>A[i+1]A[i]>A[i+1],那么就必须动用一次修改的权利。显然尽量修改A[i]A[i]A[i]更好,如果修改A[i+1]A[i+1]A[i+1],则有可能造成多一个逆序。能修改A[i]A[i]A

2020-11-27 13:40:26 93

原创 【Lintcode】845. Greatest Common Divisor

题目地址:https://www.lintcode.com/problem/greatest-common-divisor/description求两个正整数的最大公约数。思路是辗转相除法。代码如下:public class Solution { /** * @param a: the given number * @param b: another number * @return: the greatest common divisor of two num

2020-11-27 13:10:49 139

原创 【Lintcode】1236. Find All Numbers Disappeared in an Array

题目地址:https://www.lintcode.com/problem/find-all-numbers-disappeared-in-an-array/description给定一个长nnn且只含1∼n1\sim n1∼n数字的数组AAA,其中有两个数字出现了两次,其他数字只出现一次。要求求出1∼n1\sim n1∼n未出现的数字。思路是,将所有出现的数尽可能交换到其应该在的位置上,例如333应该在A[2]A[2]A[2]这个地方。然后再扫描一遍,找到未出现的数即可。具体请看代码,代码如下:i

2020-11-27 12:58:41 93

原创 【Lintcode】1713. Unique Email Addresses

题目地址:https://www.lintcode.com/problem/unique-email-addresses/description给定一个字符串列表,每个字符串是个email地址,解析规则是,如果是@前面的字符,所有的.应当被忽略,所有的+和其后面的字符应当被忽略;如果是@及其之后的字符,都保留。问有多少个不同的email地址。思路是先找@的位置,然后按定义解析。用一个哈希表来去重最后返回其size即可。代码如下:import java.util.HashSet;import jav

2020-11-27 12:48:52 1954

原创 【Lintcode】894. Pancake Sorting

题目地址:https://www.lintcode.com/problem/pancake-sorting/description给定一个数组AAA,要求将其排序。只能对数组进行翻转A[0:i]A[0:i]A[0:i]的操作,别的操作不允许做(非修改的操作是可以做的,比如扫描数组等等)。思路是,每次扫描出未排好序的前缀中的最大值,然后将其先翻转到A[0]A[0]A[0],接着将其翻转到它该在的位置上。例如对于数组(2,1,3,5,4)(2,1,3,5,4)(2,1,3,5,4),最大值是555,那就先

2020-11-27 12:40:26 89

原创 【Lintcode】1891. Travel Plan

题目地址:https://www.lintcode.com/problem/travel-plan/description给定一个二维矩阵AAA,A[i][j]A[i][j]A[i][j]代表从城市iii到城市jjj需要的花费(AAA对角线是000,但不一定对称)。一共nnn个城市,编号为0∼n−10\sim n-10∼n−1。从城市000出发,要求不重不漏走完其它城市再回到000,问最少花费是多少。思路是动态规划。这里的关键在于状态压缩。设f[s][v]f[s][v]f[s][v]表示已经访问过的城

2020-11-27 04:06:33 481

原创 【Lintcode】1430. Similar String Groups

题目地址:https://www.lintcode.com/problem/similar-string-groups/description给定一个长nnn的字符串数组AAA,题目保证其所有字符串长度相等并且含字母、出现次数都一致。如果两个字符串能通过若干次交换两个字符互相得到,并且路径上的字符串都在AAA内,那么将它们看作处于同一个等价类。问有多少个等价类。思路是并查集。代码如下:import java.util.HashMap;import java.util.Map;public cl

2020-11-26 00:16:49 110

原创 【Lintcode】1168. Array Score

题目地址:https://www.lintcode.com/problem/array-score/description给定一个数组AAA,其所有长度为kkk的子数组,如果其和小于uuu则记111分,如果和大于lll则记−1-1−1分。问AAA的所有长度为kkk的子数组的总分是多少。直接累加,然后维护长kkk的区间和即可。代码如下:import java.util.List;public class Solution { /** * @param nums: the arra

2020-11-26 00:16:30 156

原创 【Lintcode】1632. Count Email Groups

题目地址:https://www.lintcode.com/problem/count-email-groups/description给定一个长nnn字符串数组AAA,代表email地址。规定,在@之前忽略所有.,在@之前忽略所有+及其后面的字符。问一共有多少个不同的邮箱地址组。每一组必须至少两个邮箱地址。可以先找到@的下标,然后把email还原出来。同时用哈希表记录每个email出现次数。代码如下:import java.util.HashMap;import java.util.List;

2020-11-26 00:15:59 150

原创 【Lintcode】1832. Minimum Step

题目地址:https://www.lintcode.com/problem/minimum-step/description给定一个长nnn的数组AAA,每个位置编号0∼n−10\sim n-10∼n−1。A[i]A[i]A[i]代表下标iii这个位置的颜色。从下标000开始出发,每次可以向左或右移动一步,或者走到相同颜色的任意位置。问至少多少次能走到下标n−1n-1n−1的位置。思路是BFS。注意,如果某个颜色已经走过,下次再走到这个颜色的时候可以直接略过,因为第二次走到之前走过的颜色所得的路径一定

2020-11-25 13:22:50 152

原创 【Lintcode】1193. Detect Capital

题目地址:https://www.lintcode.com/problem/detect-capital/description给定一个字符串sss,如果其全是大写或全是小写或仅开头字母大写,则返回true。否则返回false。空也返回true。题目保证输入只含英文字母。直接按定义判断。代码如下:public class Solution { /** * @param word: a string * @return: return a boolean */

2020-11-25 12:49:41 96

原创 【Lintcode】1780. The Candidate With the Most Votes

题目地址:https://www.lintcode.com/problem/the-candidate-with-the-most-votes/description给定一个字符串数组,求出现次数最多的字符串。如果有多个,则返回字典序最小的。直接用哈希表统计。代码如下:import java.util.HashMap;import java.util.List;import java.util.Map;public class Solution { /** * @param

2020-11-25 12:41:30 208

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除