自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

edWard的博客

记录算法和证明

  • 博客(1616)
  • 收藏
  • 关注

原创 【Lintcode】1856. Sub-palindrome

题目地址:https://www.lintcode.com/problem/sub-palindrome/description给定一个字符串sss,求其有多少个不同的回文子串。直接枚举中心,然后枚举所有以当前位置为中心的回文串,加入一个哈希表中,最后返回哈希表的size即可。代码如下:import java.util.HashSet;import java.util.Set;public class Solution { /** * @param s: the string

2020-12-01 05:17:36 85

原创 【Lintcode】1187. K-diff Pairs in an Array

题目地址:https://www.lintcode.com/problem/k-diff-pairs-in-an-array/description给定一个数组AAA,返回其差绝对值为kkk的数对个数,数对里的两个数应当有不同的下标,但是数对(x,y)(x,y)(x,y)和(y,x)(y,x)(y,x)应当不区分。题目保证kkk非负。先用哈希表存一下每个数出现的次数,接着要根据kkk是否是000判断。如果k=0k=0k=0,那么直接数一下次数超过111的数的个数即可;如果k>0k>0k&g

2020-12-01 04:56:59 61

原创 【Lintcode】1006. Subdomain Visit Count

题目地址:https://www.lintcode.com/problem/subdomain-visit-count/description给定一个形如正整数 + 空格 + 域名格式的字符串组成的数组,正整数表示该域名被访问了多少次。要求对每个域名进行计数,包括每个域名的各个子域名。返回相同格式的字符串数组。可以用哈希表进行计数。代码如下:import java.util.ArrayList;import java.util.HashMap;import java.util.List;imp

2020-12-01 04:42:12 75

原创 【Lintcode】988. Arranging Coins

题目地址:https://www.lintcode.com/problem/arranging-coins/description给定nnn个硬币,要求摆成尽量多的kkk行,使得尽量第iii行恰好有iii个硬币(iii从111开始计数),问恰好能摆出多少满的行(满的行意思是满足第jjj行恰好有jjj个硬币的最大的jjj,因为有可能最后一行填不满)。直接模拟即可。代码如下:public class Solution { /** * @param n: a non-negative i

2020-12-01 04:24:42 59

原创 【Lintcode】353. Largest Letter

题目地址:https://www.lintcode.com/problem/largest-letter/description给定一个字符串sss,返回一个字母的大写,要求其大小写都出现在sss中。如果存在多个解,则返回最大的那个字母。直接看每个字母的大小写是否出现过,然后挑出同时出现的且最大的字母。public class Solution { /** * @param s: a string * @return: a string */ publi

2020-12-01 04:14:13 56

原创 【Lintcode】417. Valid Number

题目地址:https://www.lintcode.com/problem/valid-number/description给定一个字符串,问其是否能解析为数字。直接用java的语言特性即可。代码如下:public class Solution { /** * @param s: the string that represents a number * @return: whether the string is a valid number */ p

2020-12-01 04:06:57 164

原创 【Lintcode】572. Music Pairs

题目地址:https://www.lintcode.com/problem/music-pairs/description给定一个数组AAA,问能找到多少组二元组使得两数之和是606060的倍数。顺序不同算同一个组。题目保证AAA只含1∼601\sim 601∼60的数。先求一下每个数出现的次数,设c[i]c[i]c[i]是iii出现次数,那么对于k+(60−k)k+(60-k)k+(60−k)这样的数对,有c[k]c[60−k]c[k]c[60-k]c[k]c[60−k]个组合,而对于30+3030

2020-12-01 02:22:20 104

原创 【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 47

原创 【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 51

原创 【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 72

原创 【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 44

原创 【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 22

原创 【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

原创 【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 71

原创 【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 55

原创 【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 12

原创 【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 5

原创 【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

原创 【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 28

原创 【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 14

原创 【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 60

原创 【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 9

原创 【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 24

原创 【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 2

原创 【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 8

原创 【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

原创 【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 192

原创 【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 38

原创 【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

原创 【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

原创 【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 12

原创 【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 52

原创 【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 58

原创 【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 8

原创 【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

原创 【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 2

原创 【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 5

原创 【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

原创 【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 9

原创 【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 3

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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