![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode-数组专题
LeetCode-数组专题
牡蛎给芝加哥带来了海
talk is cheap,show me the code.
展开
-
【Leetcode-数组】移动零
移动零难度:简单这道题比较简单,题目要求在原数组操作,思路如下:我们先将所有非零的数都移动到前面,再计算出中间遍历数组时出现0的次数k,将新数组的后k位置为01、定义变量p=0,遍历数组,若该元素不等于0,则赋值给nums[p]且p++;若元素等于0,则跳过。2、计算出数组中0个个数为 len-p ,则将后len-p位 置为0。public static void main(String[] args) { int[] param = new int[]{1,3,6,0,5};原创 2021-12-10 21:15:22 · 191 阅读 · 0 评论 -
【Leetcode-数组】第三大的数
第三大的数难度:简单先排序,从倒数第二位往前遍历,当数组值不等于后一位的值,则 p++,当 p=3 时,则当前数组值为第三大的数 public static int[] intersection(int[] nums1, int[] nums2) { Arrays.sort(nums); int len = nums.length; int p = 1; for (int i = len-2; i >=0; i--) {原创 2021-12-13 19:22:28 · 164 阅读 · 0 评论 -
【Leetcode-数组】删除有序数组中的重复项
删除有序数组中的重复项难度:简单想了十分钟没思路,放弃瞄了眼题解的思路,尝试自己编码 public static void main(String[] args) { System.out.println(removeDuplicates(new int[]{1,2,3,3,3,5})); } public static int removeDuplicates(int[] nums) { int p = 0; int q = 1;原创 2021-12-02 18:10:56 · 409 阅读 · 0 评论 -
【Leetcode-数组】买卖股票的时机
买卖股票的最佳时机难度:简单看到这道题一下子就联想到上周做过的求最大子序和,应该可以通过动态规划来解决。定义一个数组dp[i],i表示第i天第一天卖股票最大利润是多少?第二天卖股票最大利润是多少?第三天卖股票最大利润是多少?第四天卖股票最大利润是多少?第五天卖股票最大利润是多少?…第n天卖股票最大利润是多少?每天卖股票的最大利润是前一天的最大利润 + (今天的股价-昨天的股价)好了,思路有了但。。。代码验证没成功没办法,只能看题解了。好不容易在评论区看到把我思路实现的大神,我原创 2021-12-06 19:45:51 · 73 阅读 · 0 评论 -
【Leetcode-数组】最小操作次数使数组元素相等
最小操作次数使数组元素相等难度:简单题意是 n-1 个元素 增加 1,其实反过来想,即 1 个元素 减少1,思路有了,代码如下: public static int minMoves(int[] nums) { //通过遍历拿到数组最小值 int min = nums[0]; int res = 0; for (int num : nums){ if (num<min){ min = n原创 2021-12-14 22:02:10 · 284 阅读 · 0 评论 -
【Leetcode-数组】最大连续 1 的个数
最大连续 1 的个数难度:简单定义变量 now 和 res,遍历数组,now 记录当前的连续 1 的个数,res 记录最长的连续1出现的个数。 public int findMaxConsecutiveOnes(int[] nums) { int res = 0; int now = 0; for (int i = 0; i < nums.length; i++) { if (nums[i] == 1 ){原创 2021-12-15 19:19:24 · 2062 阅读 · 0 评论 -
【Leetcode-数组】合并两个有序数组
合并两个有序数组难度:简单这道题刚开始做的时候尝试从头开始比较,发现行不通,所以选择先确定后面的最大值,代码完成后提交不通过,最后看题解发现是没有处理nums2 中还有数据未拷贝完全的情况,再最后将nums2的数据拷贝到nums1头部即可 public static void main(String[] args) { int[] nums1 = new int[]{2,0}; int[] nums2 = new int[]{1}; int m = 1原创 2021-12-03 23:40:48 · 300 阅读 · 0 评论 -
【Leetcode-数组】只出现一次的数字
只出现一次的数字难度:简单题目简单易懂,思考了一下想到可以利用map结构,把整型数组以键值对的形式放入到map中,如果map中不存在,则存入,如果存在,则删除,最后map中存在的数据就是只出现的一次的数字。 public static void main(String[] args) { System.out.println(singleNumber(new int[]{1, 2, 2, 1, 5})); } public static int singleNumb原创 2021-12-07 19:32:20 · 64 阅读 · 0 评论 -
【Leetcode-数组】提莫攻击
提莫攻击难度:简单题目有点长,但相信玩过英雄联盟的兄弟们应该很好理解这道题我的思路是,先得到 总中毒时间 = 数组长度 * 中毒持续时间 ,再遍历数组,把第 i 个元素的值+中毒持续时间 -第**(i+1)** 个元素的值,就可以得到重复中毒的时间,总中毒时间 - 重复中毒时间 就可以得到中毒时长了代码实现如下: public static int findPoisonedDuration(int[] timeSeries, int duration) { //得到总中毒时间原创 2021-12-15 20:05:41 · 1694 阅读 · 0 评论 -
【Leetcode-数组】多数元素
多数元素难度:简单想了一会没有好的思路,只能从比较笨的方法开始思路:生成一个map,遍历数组,把数组中的元素放入key,把出现次数放入value,最后再遍历map,value大于nums.length/2就是答案 public static void main(String[] args) { System.out.println(majorityElement(new int[]{1, 3, 1, 5, 1})); } public static int maj原创 2021-12-08 17:48:15 · 79 阅读 · 0 评论 -
【Leetcode-数组】存在重复元素
存在重复元素难度:简单好像还挺简单的,用set集合去存储,如果出现重复就返回true,遍历完就返回false。 public static void main(String[] args) { System.out.println(containsDuplicate(new int[]{1,4,3,5,2,8,2,7})); } public static boolean containsDuplicate(int[] nums) { Set set原创 2021-12-09 19:32:23 · 54 阅读 · 0 评论 -
【Leetcode-数组】两个数组的交集
两个数组的交集难度:简单这道题想了很久,好像没有很好的解决方法,所以只能用最笨的方法来做public static int[] intersection(int[] nums1, int[] nums2) { Set<Integer> set1 = new HashSet(); Set<Integer> set2 = new HashSet(); for (int num : nums1){ set1.a原创 2021-12-10 22:06:29 · 153 阅读 · 0 评论 -
【Leetcode-数组】加一
加一难度:简单这道题题意还是比较容易理解的,就是把数组看成一个整数,然后+1,主要需要考虑到的加一得十进一位,还有例如9999+1需要对数组进行扩容的问题 public static void main(String[] args) { int[] a = new int[]{9,9,9,9}; int[] result = plusOne(a); System.out.println(result[0]); System.out.pr原创 2021-12-03 22:08:21 · 53 阅读 · 0 评论 -
【Leetcode-数组】移除元素
移除元素难度:简单因为这道题和刚刚做过的删除有序数组中的重复项很类似,所以一下子就想到用双指针的方法 public static void main(String[] args) { int i = removeElement(new int[]{1, 3, 5, 5, 5, 10, 12}, 5); System.out.println(i); } public static int removeElement(int[] nums, int v原创 2021-12-02 22:49:34 · 252 阅读 · 0 评论 -
【Leetcode-数组】存在重复元素 II
存在重复元素 II难度:简单思路是嵌套遍历,外层是整个数组,内层是当前下标+1 到 下标+k ,代码实现如下: public static void main(String[] args) { System.out.println(containsNearbyDuplicate(new int[]{1, 2, 3, 1}, 3)); } public static boolean containsNearbyDuplicate(int[] nums, int k原创 2021-12-09 20:10:18 · 206 阅读 · 0 评论 -
【Leetcode-数组】 两数之和 II - 输入有序数组
两数之和 II - 输入有序数组难度:简单题目是在前几天做过的 两数之和 上做的变形,增加了数组是有序递增的条件,想了五分钟没有更优解,还是采取之前的方法,用map存储 public static void main(String[] args) throws Exception { int[] ints = twoSum(new int[]{2,3,4}, 6); System.out.println(ints[0]); System.out.pr.原创 2021-12-07 20:03:18 · 67 阅读 · 0 评论 -
【Leetcode-数组】下一个更大元素 I
下一个更大元素 I难度:简单遇到这种稍微有点复杂的问题,先拆分成多个小问题,题意中要得到 右侧 的 第一个 比x大的数,那么我们可以通过遍历 nums2 数组,得到每个元素右侧比当前元素大的第一个数,存入哈希表中,即 键 为元素,值为右侧第一个大于当前元素的值。得到map后就简单很多了,只需要再遍历 nums1 ,取对应map的value值再放入返回的数组中就可以了代码实现如下: public static int[] nextGreaterElement(int[] nums1, int[]原创 2021-12-16 23:27:50 · 187 阅读 · 0 评论 -
【Leetcode-数组】最大子数组和
最大子数组和难度:简单埋头苦想,除了暴力解没有其他思路,直奔题解这道题的思想是采用动态规划 public static void main(String[] args) { System.out.println(maxSubArray(new int[]{-2, 1, -3, 4, -1, 2, 1, -5, 4})); } public static int maxSubArray(int[] nums) { int[] arr = new in原创 2021-12-03 21:24:17 · 335 阅读 · 0 评论 -
【Leetcode-数组】两个数组的交集 II
两个数组的交集 II难度:简单这道题和昨天做过的两个数组的交集差不多,同样没有比较好的思路,只能用两个map分别存两个数组的值和出现的次数,再遍历代码如下:public static int[] intersection(int[] nums1, int[] nums2) { Map<Integer,Integer> map1 = new HashMap<>(); Map<Integer,Integer> map2 = new原创 2021-12-13 19:07:17 · 248 阅读 · 0 评论 -
【Leetcode-数组】数组拆分 I
数组拆分 I难度:简单这道题只要理解了题意还是比较简单的,直接可以把问题转换成 从小到大取偶数下标的元素值总和。代码实现如下: public static int arrayPairSum(int[] nums) { int res = 0; Arrays.sort(nums); for (int i = 0; i < nums.length; i++) { if (i%2==0){ re原创 2021-12-17 21:00:46 · 194 阅读 · 0 评论 -
【Leetcode-数组】分糖果
分糖果难度:简单Ailce最多只能吃 n/2 的糖果,那么定义集合set,遍历数组放到集合set中,若集合set中元素个数等于n/2,则 结束循环 并返回set的大小。代码实现如下: public static int distributeCandies(int[] candyType) { int eat = candyType.length/2; Set set = new HashSet(eat); for (int num : candyTy原创 2021-12-17 22:49:30 · 72 阅读 · 0 评论 -
【Leetcode-数组】两数之和
寻找公共最长前缀难度:简单public static void main(String[] args) { String s = longestCommonPrefix(new String[]{"abcsfaeqw", "abcdef", "abcdefg"}); System.out.println(s); } public static String longestCommonPrefix(String[] strs) { if原创 2021-11-24 20:12:41 · 178 阅读 · 0 评论