在实际的业务开发中,容器的遍历可以说是非常非常常见的场景了,遍历删除呢,用的机会也比较多,那么有哪几种删除元素的方法呢?你用对了吗本文循序渐进,先说几种容易出问题的方法,再引出几种比较可靠的方法 首先,初始化一个数组,用于后面的事例演示: List<Integer>list=newArrayList<>(); for(inti=1;i<5;i){ if(i2){ //i2时添加两次,用于后面的测试 list.add(i); list.add(i); }else{ list.add(i); } } 方法一:for-each循环删除(结果:抛出异常) for(S...

题目: 给你一个长度为n下标从0开始的整数数组nums。 我们想将下标进行分组,使得[0,n1]内所有下标i都恰好被分到其中一组。 如果以下条件成立,我们说这个分组方案是合法的: 对于每个组g,同一组内所有下标在nums中对应的数值都相等。对于任意两个组g1和g2,两个组中下标数量的差值不超过1。请你返回一个整数,表示得到一个合法分组方案的最少组数。 示例1: 输入:nums=[3,2,3,2,3]输出:2解释:一个得到2个分组的方案如下,中括号内的数字都是下标:组1->[0,2,4]组2->[1,3]所有下标都只属于一个组。组1中,nums[0]nums[2]nums[4],所...

题目: 一个厨师收集了他n道菜的满意程度satisfaction,这个厨师做出每道菜的时间都是1单位时间。 一道菜的「like-time系数」定义为烹饪这道菜结束的时间(包含之前每道菜所花费的时间)乘以这道菜的满意程度,也就是time[i]satisfaction[i]。 返回厨师在准备了一定数量的菜肴后可以获得的最大like-time系数总和。 你可以按任意顺序安排做菜的顺序,你也可以选择放弃做某些菜来获得更大的总和。 示例1: 输入:satisfaction=[-1,-8,0,5,-9]输出:14解释:去掉第二道和最后一道菜,最大的like-time系数和为(-11+02+53=14)。...

题目: 给你一个字符串s和一个整数k,请你将s分成k个子字符串,使得每个子字符串变成半回文串需要修改的字符数目最少。 请你返回一个整数,表示需要修改的最少字符数目。 注意: 如果一个字符串从左往右和从右往左读是一样的,那么它是一个回文串。如果长度为len的字符串存在一个满足1<=d<len的正整数d,len%d0成立且所有对d做除法余数相同的下标对应的字符连起来得到的字符串都是回文串,那么我们说这个字符串是半回文串。比方说“aa”,“aba”,“adbgad”和“abab”都是半回文串,而“a”,“ab”和“abca”不是。子字符串指的是一个字符串中一段连续的字符序列。 示例1:...

题目: 给你一个字符串数组words和一个字符串s,请你判断s是不是words的首字母缩略词。 如果可以按顺序串联words中每个字符串的第一个字符形成字符串s,则认为s是words的首字母缩略词。例如,“ab”可以由[“apple”,“banana”]形成,但是无法从[“bear”,“aardvark”]形成。 如果s是words的首字母缩略词,返回true;否则,返回false。 示例1: 输入:words=[“alice”,“bob”,“charlie”],s=“abc”输出:true解释:words中“alice”、“bob”和“charlie”的第一个字符分别是‘a’、‘b’和‘c...

题目: 给定一个数组nums,如果i<j且nums[i]>2nums[j]我们就将(i,j)称作一个重要翻转对。 你需要返回给定数组中的重要翻转对的数量。 示例1: 输入:[1,3,2,3,1]输出:2示例2: 输入:[2,4,3,5,1]输出:3注意: 给定数组的长度不会超过50000。输入数组中的所有数字都在32位整数的表示范围内。 java代码: classSolution{ publicintreversePairs(int[]nums){ if(nums.length0){ return0; } returnreversePairsRecursive(nums,0,n...

题目: 矩形蛋糕的高度为h且宽度为w,给你两个整数数组horizontalCuts和verticalCuts,其中: horizontalCuts[i]是从矩形蛋糕顶部到第i个水平切口的距离verticalCuts[j]是从矩形蛋糕的左侧到第j个竖直切口的距离请你按数组horizontalCuts和verticalCuts中提供的水平和竖直位置切割后,请你找出面积最大的那份蛋糕,并返回其面积。由于答案可能是一个很大的数字,因此需要将结果对109+7取余后返回。 示例1: 输入:h=5,w=4,horizontalCuts=[1,2,4],verticalCuts=[1,3]输出:4解释:上...

题目: 给你一个下标从0开始的整数数组nums。 如果下标三元组(i,j,k)满足下述全部条件,则认为它是一个山形三元组: i<j<knums[i]<nums[j]且nums[k]<nums[j]请你找出nums中元素和最小的山形三元组,并返回其元素和。如果不存在满足条件的三元组,返回-1。 示例1: 输入:nums=[8,6,1,5,3]输出:9解释:三元组(2,3,4)是一个元素和等于9的山形三元组,因为: 2<3<4 nums[2]<nums[3]且nums[4]<nums[3]这个三元组的元素和等于nums[2]+nums[3]+nu...

题目: 给你一个整数n,表示一张无向图中有n个节点,编号为0到n1。同时给你一个二维整数数组edges,其中edges[i]=[ai,bi]表示节点ai和bi之间有一条无向边。 请你返回无法互相到达的不同点对数目。 示例1: 输入:n=3,edges=[[0,1],[0,2],[1,2]] 输出:0 解释:所有点都能互相到达,意味着没有点对无法互相到达,所以我们返回0。 示例2: 输入:n=7,edges=[[0,2],[0,5],[2,4],[1,6],[5,4]]输出:14解释:总共有14个点对互相无法到达:[[0,1],[0,3],[0,6],[1,2],[1,3],[1,4],[...

题目: 给你四个整数length,width,height和mass,分别表示一个箱子的三个维度和质量,请你返回一个表示箱子类别的字符串。 如果满足以下条件,那么箱子是“Bulky”的:箱子至少有一个维度大于等于104。或者箱子的体积大于等于109。如果箱子的质量大于等于100,那么箱子是“Heavy”的。如果箱子同时是“Bulky”和“Heavy”,那么返回类别为“Both”。如果箱子既不是“Bulky”,也不是“Heavy”,那么返回类别为“Neither”。如果箱子是“Bulky”但不是“Heavy”,那么返回类别为“Bulky”。如果箱子是“Heavy”但不是“Bulky”,那么返回...

题目: 给你一个下标从0开始的整数数组nums和一个整数k。你的起始分数为0。 在一步操作中: 选出一个满足0<=i<nums.length的下标i,将你的分数增加nums[i],并且将nums[i]替换为ceil(nums[i]/3)。返回在恰好执行k次操作后,你可能获得的最大分数。 向上取整函数ceil(val)的结果是大于或等于val的最小整数。 示例1: 输入:nums=[10,10,10,10,10],k=5输出:50解释:对数组中每个元素执行一次操作。最后分数是10+10+10+10+10=50。示例2: 输入:nums=[1,10,3,3,3],k=3输出:17解释:...

题目: 给你一个整数数组nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。找出只出现一次的那两个元素。你可以按任意顺序返回答案。 你必须设计并实现线性时间复杂度的算法且仅使用常量额外空间来解决此问题。 示例1: 输入:nums=[1,2,1,3,2,5]输出:[3,5]解释:[5,3]也是有效的答案。示例2: 输入:nums=[-1,0]输出:[-1,0]示例3: 输入:nums=[0,1]输出:[1,0] 提示: 2<=nums.length<=3104-231<=nums[i]<=2311除两个只出现一次的整数外,nums中的其他数字都出现两次 ja...

在实际的业务开发中,基本上很少很少很少…会遇到数组拷贝的场景,甚至是我们一般都不怎么用数组,List它不香嘛,为啥要用数组。那么现在这个问题有点冷门,要实现数组拷贝,怎么办呢? 1、基础写法:循环赋值 最简单直接的写法,那就是新建一个数组,一个一个拷贝进去 String[]src=newString[]{"a","b,"c"}; String[]res=newString[src.length]; for(inti=0;i<src.length;i){ res[i]=src[i]; } 2、Array.copyOf 直接使用Array.copy,一行代码搞定。 String[]sr...

题目: 给你一个下标从0开始、大小为nm的二维整数矩阵grid,定义一个下标从0开始、大小为nm的的二维矩阵p。如果满足以下条件,则称p为grid的乘积矩阵: 对于每个元素p[i][j],它的值等于除了grid[i][j]外所有元素的乘积。乘积对12345取余数。返回grid的乘积矩阵。 示例1: 输入:grid=[[1,2],[3,4]]输出:[[24,12],[8,6]]解释:p[0][0]=grid[0][1]grid[1][0]grid[1][1]=234=24p[0][1]=grid[0][0]grid[1][0]grid[1][1]=134=12p[1][0]=grid[0][0...

题目: 给你一个下标从0开始、长度为n的整数数组nums,以及整数indexDifference和整数valueDifference。 你的任务是从范围[0,n1]内找出2个满足下述所有条件的下标i和j: abs(ij)>=indexDifference且abs(nums[i]nums[j])>=valueDifference返回整数数组answer。如果存在满足题目要求的两个下标,则answer=[i,j];否则,answer=[-1,-1]。如果存在多组可供选择的下标对,只需要返回其中任意一组即可。 注意:i和j可能相等。 示例1: 输入:nums=[5,1,4,1],inde...

题目: 给你一个下标从0开始的字符串数组words,其中words[i]要么是一个字符串形式的正整数,要么是字符串“prev”。 我们从数组的开头开始遍历,对于words中的每个“prev”字符串,找到words中的上一个遍历的整数,定义如下: k表示到当前位置为止的连续“prev”字符串数目(包含当前字符串),令下标从0开始的整数数组nums表示目前为止遍历过的所有整数,同时用nums_reverse表示nums反转得到的数组,那么当前“prev”对应的上一个遍历的整数是nums_reverse数组中下标为(k1)的整数。如果k比目前为止遍历过的整数数目更多,那么上一个遍历的整数为-1。请你...

题目: 给你一个下标从0开始、长度为n的整数数组nums,以及整数indexDifference和整数valueDifference。 你的任务是从范围[0,n1]内找出2个满足下述所有条件的下标i和j: abs(ij)>=indexDifference且abs(nums[i]nums[j])>=valueDifference返回整数数组answer。如果存在满足题目要求的两个下标,则answer=[i,j];否则,answer=[-1,-1]。如果存在多组可供选择的下标对,只需要返回其中任意一组即可。 注意:i和j可能相等。 示例1: 输入:nums=[5,1,4,1],inde...

题目: 给你一个只包含非负整数的数组nums。 我们定义满足l<=r的子数组nums[l…r]的分数为nums[l]ANDnums[l+1]AND…ANDnums[r],其中AND是按位与运算。 请你将数组分割成一个或者更多子数组,满足: 每个元素都只属于一个子数组。子数组分数之和尽可能小。请你在满足以上要求的条件下,返回最多可以得到多少个子数组。 一个子数组是一个数组中一段连续的元素。 示例1: 输入:nums=[1,0,2,0,1,2]输出:3解释:我们可以将数组分割成以下子数组: [1,0]。子数组分数为1AND0=0。 [2,0]。子数组分数为2AND0=0。 [1,2]。子数...

题目: 给你一个正整数数组nums和一个整数k。 一次操作中,你可以将数组的最后一个元素删除,将该元素添加到一个集合中。 请你返回收集元素1,2,…,k需要的最少操作次数。 示例1: 输入:nums=[3,1,5,4,2],k=2输出:4解释:4次操作后,集合中的元素依次添加了2,4,5和1。此时集合中包含元素1和2,所以答案为4。示例2: 输入:nums=[3,1,5,4,2],k=5输出:5解释:5次操作后,集合中的元素依次添加了2,4,5,1和3。此时集合中包含元素1到5,所以答案为5。示例3: 输入:nums=[3,2,5,3,1],k=3输出:4解释:4次操作后,集合中的元素依次添...

背景 在日常开发过程中,驼峰与下划线的互相转换也是比较常见的操作。比如db中表的列名是一划线命名,而java实体命名则是驼峰格式命名。下面将介绍几种驼峰与下划线互转的实现方式。 1.Gauva:CaseFormat类 //驼峰转下划线 Stringans=CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE,"helloWorld"); System.out.println(ans);//hello_world //下划线转驼峰 Stringans2=CaseFormat.LOWER_UNDERSCORE.to(CaseFormat....

关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~