五月刷题01——数组


今日刷题内容: 数组

前言

  • 一个算法废材的刷题之路开更了, 更新每天刷题的题解内容
  • 注重个人理解,看难度更新题目数量
  • 题目来源于力扣
  • 新开专栏,争取每日都能做出至少一题=v=
  • 语言java、python、c\c++

一、今日题目

  1. 2016. 增量元素之间的最大差值
  2. 2239. 找到最接近 0 的数字
  3. 1475. 商品折扣后的最终价格
  4. 2248. 多个数组求交集

二、解题思路

1. 2016. 增量元素之间的最大差值

  1. 按照题目要求是求前项下标的最小值于后项下标的差最大值
  2. 用一个变量来记录前项的最小值
  3. 维护最小值变量和更新差值即可
class Solution {
    public int maximumDifference(int[] nums) {
        int i = 0;
        int j = 1;
        int n = nums.length;
        int ret  = - 1;
        int pre = nums[0];
        while(j < n){
            if(nums[j] > pre){
                ret = Math.max(ret, nums[j] - pre);
            }else{
                pre = nums[j];
            }
            j++;
        }
        return ret;
    }
}


2. 2239. 找到最接近 0 的数字

  1. 要找最接近0的数,就是找绝对值最小的数
  2. 当绝对值相同时要取更大的数
  3. 用两个变量来维护绝对值和真值
class Solution {
    public int findClosestNumber(int[] nums) {
            int real = nums[0];
            int absval = Math.abs(nums[0]);
            for (int n: nums){
                int x = Math.abs(n);
                // 当前数绝对值比记录值更小时
                if (x < absval){
                    absval = x;
                    real = n; 
                }
                // 当前数绝对值相同时
                else if(x == absval){
                    real = real > n ? real: n;  // 真值取更大值
                }
                
            }
            return real;
    }
}

3. 1475. 商品折扣后的最终价格

  1. 数组下标前面的值可以用后面更小的值来抵扣
  2. 只需遍历数组,获取数组后面的更小值
  3. 更新数组即可
class Solution {
    public int[] finalPrices(int[] prices) {
        int i, j;
        int n = prices.length;
        for(i = 0; i < n; i++){
            for (j = i+1; j < n; j++){
                if (prices[j] <= prices[i]){
                    prices[i] -= prices[j];
                    break;
                }
            }
        }
        return prices;
    }
}

4. 2248. 多个数组求交集

  1. 因为数的范围并不大,所以可以采用hash表来做题
  2. 统计每个数组中的所有数的个数
  3. 如果数的个数和数组的个数相同说明这个数是一个交集的子集
class Solution:
    def intersection(self, nums: List[List[int]]) -> List[int]:
        length = len(nums)
        ret = [];
        hash_tb = [0] * 1001
        for num in nums:
            for n in num:
                hash_tb[n] += 1
        for idx, val in enumerate(hash_tb):
            if val == length:
                ret.append(idx)
        return ret

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值