数组
萌萌,站起来
这个作者很懒,什么都没留下…
展开
-
列出所有区间 字节问题
插一个之前字节问的列出所有的区间:例:输入:[[1,3],[2,6],[8,10],[15,18]]输出:[8, 10][15, 18][1, 2][2, 3][3, 6]solution自己想的,建立优先队列,存有重复的,这样最小堆就可以往出取时建立区间,存入list中,没有重合的就直接存入list中。public class merge56byteDance { public static void main(String[] args) { int[][]原创 2020-07-04 16:45:36 · 104 阅读 · 0 评论 -
leetcode 1014最佳观光组合 (A[i] + A[j] + i - j)最大值 (动态规划)
题目给定正整数数组 A,A[i] 表示第 i 个观光景点的评分,并且两个景点 i 和 j 之间的距离为 j - i。一对景点(i < j)组成的观光组合的得分为(A[i] + A[j] + i - j):景点的评分之和减去它们两者之间的距离。返回一对观光景点能取得的最高分。solution这道题首先想的是暴力,两个for循环,得出所有的组合找最大,超时。可以用动态规划的角度思考,但是不是那么复杂,已知题目要求 res = A[i] + A[j] + i - j (i < j) 的最原创 2020-06-17 19:41:47 · 223 阅读 · 0 评论 -
leetcode14. 最长公共前缀
14. 最长公共前缀编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。solution当字符串数组长度为 0 时则公共前缀为空,直接返回令最长公共前缀 ans 的值为第一个字符串,进行初始化遍历后面的字符串,依次将其原创 2020-06-15 21:34:42 · 85 阅读 · 0 评论 -
lee152 乘积最大子数组 lee52 最大子序和
给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。solution看到示例发现有负数,所以要开始考虑如果负数出现,最小值就变成最大值,最大值就变成最小值,所以要多记录一个最小值,不能光记录最大值。每次都要记录最大值i原创 2020-05-18 22:27:55 · 100 阅读 · 0 评论 -
玩转lee93 复原ip地址 没看懂
给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。示例:输入: “25525511135”输出: [“255.255.11.135”, “255.255.111.35”]。合法的ip地址:4个数字 ,每个数字在0-255之间 ,用 . 分隔开...原创 2020-03-28 14:55:19 · 165 阅读 · 0 评论 -
lee227 基本计算器二
实现一个基本的计算器来计算一个简单的字符串表达式的值。字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。示例 1:输入: “3+2*2”输出: 7示例 2:输入: " 3/2 "输出: 1示例 3:输入: " 3+5 / 2 "输出: 5大佬方法class Solution { public int calculate(...原创 2020-03-19 22:41:13 · 105 阅读 · 0 评论 -
玩转贪心算法 动态规划lee 435无重叠区间 lee452 引爆气球 interval schedule
给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。示例 1:输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。示例 2:输入: [ [1,2], [1,2], [1,2] ]...原创 2020-02-22 17:13:13 · 436 阅读 · 0 评论 -
玩转贪心算法 lee455 贪心指数 lee392 判断子序列
贪心算法 总是跟最值有关 排序lee455假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最...原创 2020-02-21 16:29:01 · 165 阅读 · 0 评论 -
玩转lee139 单词拆分 不太明白
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入: s = “leetcode”, wordDict = [“leet”, “code”]输出: true解释: 返回 true 因为 “leetcode” 可以被拆分成...原创 2020-02-21 14:35:20 · 124 阅读 · 0 评论 -
玩转lee474 一和零 0-1背包问题
在计算机界中,我们总是追求用有限的资源获取最大的收益。现在,假设你分别支配着 m 个 0 和 n 个 1。另外,还有一个仅包含 0 和 1 字符串的数组。你的任务是使用给定的 m 个 0 和 n 个 1 ,找到能拼出存在于数组中的字符串的最大数量。每个 0 和 1 至多被使用一次。注意:给定 0 和 1 的数量都不会超过 100。给定字符串数组的长度不会超过 600。示例 1:输入:...原创 2020-02-21 13:25:43 · 128 阅读 · 0 评论 -
玩转 0-1背包问题 lee377 组合总和(完全背包)
动态规划横轴是容量,纵轴是物品id求解问题的过程就是维护这个表的过程,求解的值,就是最后一个空格的值首先对于第0号物品容量为0时,由于自身重量为1,所以放不进去,所以空格填0,容量为1以后,该物品可以放进去了,就都为6根据bobo老师写的代码:public class bag_0_1 { public static int bagquestion (int c, int[]...原创 2020-02-21 12:25:38 · 367 阅读 · 0 评论 -
玩转动态规划 lee416分割等和子集 0-1背包
给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素不会超过 100数组的大小不会超过 200示例 1:输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11].示例 2:输入: [1, 2, 3, 5]输出: false解释: 数组不能分割成两个元素和相等的子集....原创 2020-02-20 22:03:12 · 119 阅读 · 0 评论 -
玩转动态规划 lee376 摆动序列
如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差...原创 2020-02-19 17:25:33 · 145 阅读 · 0 评论 -
玩转动态规划 lee300 (LIS)最长上升子序列
给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2) 。进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗?需要读清的题意什么...原创 2020-02-19 16:45:19 · 152 阅读 · 0 评论 -
lee322 凑零钱问题 动态规划
给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。示例 1:输入: coins = [1, 2, 5], amount = 11输出: 3解释: 11 = 5 + 5 + 1示例 2:输入: coins = [2], amount = 3输出: -1说明:你可以认为每...原创 2020-02-19 15:08:29 · 255 阅读 · 0 评论 -
玩转lee309 最佳买卖股票时机含冷冻期里面包含股票所有问题 6道
给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。示例:输入: [1,2,3,0,2]输出: 3解释: 对应的交易状态为: [买入, 卖出, 冷冻...原创 2020-02-18 13:56:21 · 118 阅读 · 0 评论 -
玩转lee198 打家劫舍 lee213 打家劫舍2 头尾不行 没看懂动态规划函数 lee337 打家劫舍3 二叉树不相邻节点
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号...原创 2020-02-16 17:01:18 · 152 阅读 · 0 评论 -
lee622 设计循环队列
设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。你的实现应该支持如下操作:MyCircula...原创 2020-02-16 14:46:20 · 154 阅读 · 0 评论 -
玩转动态规划 lee62不同路径 从左上到右下 有障碍物
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?例如,上图是一个7 x 3 的网格。有多少可能的路径?说明:m 和 n 的值均不超过 100。示例 1:输入: m = 3, n = 2输出: 3解释:从左上角开始,总...原创 2020-02-14 21:04:57 · 620 阅读 · 0 评论 -
玩转lee16 最接近的三个数
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).思路可以不使用查找表 因为不是找特定的数还...原创 2020-01-10 21:35:58 · 122 阅读 · 0 评论 -
玩转lee15 (6.12) 三数之和 玩转lee18 四数之和 玩转454 四数之和(不同数组)
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[[-1, 0, 1],[-1, -1, 2]]思路先排序从头到尾遍历数组 然后 ...原创 2020-01-10 20:57:52 · 80 阅读 · 0 评论 -
玩转lee1 两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]思考1 暴力先sor...原创 2020-01-09 20:10:30 · 70 阅读 · 0 评论 -
合并两个排序数组
两个排序数组1.2 ,1后面有足够空间放2,有序合并输出数组1class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { if(m ==0 ) { System.arraycopy(nums2,0,nums1,0, n); } ...原创 2019-12-11 13:22:11 · 187 阅读 · 0 评论 -
经典递归问题 数组里的数组合全部列出 ???
1和2 列出来 1,2,12,21考察递归算法public class heihei { static void listAll(String candidate, String prefix) { if ( candidate.length() == 0) { System.out.println(prefix); } for (int i ...原创 2019-11-09 20:59:08 · 91 阅读 · 0 评论 -
lee242有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1:输入: s = “anagram”, t = “nagaram”输出: true示例 2:输入: s = “rat”, t = “car”输出: false说明:你可以假设字符串只包含小写字母。进阶:如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?我的思...原创 2019-11-09 16:18:39 · 1391 阅读 · 0 评论 -
new 数组中的重复数字 可改动数组\不可改动数组
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。直接排序 Arrays.sort()时间复杂度:O(nlogn)HashMappublic boolean duplicate...原创 2019-11-02 20:03:48 · 99 阅读 · 0 评论 -
new 剪绳子
给你一根长度为n的绳子,请把绳子剪成m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],…,k[m]。请问k[0]xk[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。输入描述:输入一个数n,意义见题面。(2 <= n <= 60)示例1输入8输出1...原创 2019-10-30 15:28:23 · 92 阅读 · 0 评论 -
new 矩阵中的路径 自己写的运行不通
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的...原创 2019-10-30 10:14:19 · 64 阅读 · 0 评论 -
构建乘积数组
给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法。直接连乘数字得到B[i] 需要O(n^2)B[i]的值可以看做下图的矩阵中每行的乘积。下三角用连乘可以很容易求得,先算下三角中的连乘,即先计算出B[i]中的一部分,然后将上三角中的数也乘进去。这样一来就只需要两个...原创 2019-10-26 15:55:30 · 107 阅读 · 0 评论 -
new 扑克牌顺子
LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张牌就可以变...原创 2019-10-25 18:48:54 · 93 阅读 · 0 评论 -
new 翻转字符串 左旋转字符串
输入一个英文句子,翻转句子中单词的顺序,单词顺序不变,标点符号和简单字母一样处理,例如:输入"I am a student" 输出:"student. a am I "此类题目很常见解法翻转句子中所有字符再反转每个单词中字符的顺序有经验的面试官如果看到应聘者几乎不假思索的想出一道比较巧妙的算法,就会觉得他可能见过这个题目,很多面试官会再问一个题目,以考察是不是真的理解这倒算法,类似且...原创 2019-10-25 11:12:24 · 120 阅读 · 0 评论 -
new数组中只出现一次的数字 位运算有些不太明白
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。先用 HashMap 试试import java.util.*;public class Solution { public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) { if(array.len...原创 2019-10-23 21:52:02 · 129 阅读 · 0 评论 -
new排序数组中查找数字
统计一个数字在排序数组中出现的次数。直接遍历数组统计出现次数 O(n)二分搜索找到一个数,然后再分别前后扫描O(n)更好的用二分查找二分查找直接找到第一个k和最后一个k??一、.找第一个k先看数组中间,mid>k,下次在数组前半段找mid《k,在后半段找就可以了如果mid=k,先判断是不是第一个k,1.如果中间数的前一个也是k,那么第一个k在前半段找2.如果不是k了,那...原创 2019-10-23 13:34:52 · 75 阅读 · 0 评论 -
new 数组中的逆序对 归并排序没看明白
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007直接扫描整个数组,没扫描到一个数字,逐个和他后面的数字比较,如果比他小,就组成了一个逆序对时O(n^2)不能逐个搜,先比较相邻的数...原创 2019-10-20 17:16:13 · 97 阅读 · 0 评论 -
new 丑数
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。直接法 逐个判断每个整数是不是丑数的解法 不高效public class Solution { public int GetUglyNumber_Solution(int index) { ...原创 2019-10-19 19:00:32 · 64 阅读 · 0 评论 -
new 把数组排成最小的数 自定义比较器有问题 未找到
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。直接直接解法就是求出所有数字的全排列,把每个排列拼接起来,最后求出拼起来的最小值。有些类似于 “字符串的排列”添加链接描述设置排序规则,数字转换成字符串先将整型数组转换成String数组,然后将String数组排序...原创 2019-10-19 17:30:36 · 64 阅读 · 0 评论 -
new 连续子数组的最大和
HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和,你会...原创 2019-10-18 20:35:59 · 47 阅读 · 0 评论 -
new 最小k个数
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。原创 2019-10-18 19:20:13 · 83 阅读 · 0 评论 -
new 数组中出现超过一半的数字 hashmap迭代器
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。巧解先将数组排序题中意思有超过数组一半的数排序后 数组中间的数一定是,将数组中间的数记录下来出现的次数将次数与数组个数一半比较,如果大于则就是这个数如果没有就返回0import ...原创 2019-10-18 17:33:59 · 101 阅读 · 0 评论