最近一网友发文称自己是双非院校计算机专业,在北京找了一份实习的工作,每天早起通勤挤地铁到公司上班,可现在学校不让住外面、也不让外出实习,对于私自外出实习的要受到处分。
对于这种情况,很多网友表示很无语,私自外出实习,学校怕出事担责。如果不外出实习,留在学校又没有工作,啥项目经验也学不到,对于这种情况竟然有不少同学遇到过。
我记得我当年快毕业的时候虽然学校没有鼓励我们去校外面实习,但也没禁止我们外出,出去实习学校也是睁一只眼闭一只眼。因为如果不实习的话,到时候毕业可能暂时找不到工作,学生的就业率低,又会影响到学校的排名。
--------------下面是今天的算法题--------------
来看下今天的算法题,这题是LeetCode的第1509题:三次操作后最大值与最小值的最小差,难度是中等。
给你一个数组 nums 。每次操作你可以选择 nums 中的任意一个元素并将它改成任意值 。在执行最多三次移动后 ,返回 nums 中最大值与最小值的最小差值。
示例1:
输入:nums = [5,3,2,4] 输出:0 解释:我们最多可以走 3 步。 第一步,将 2 变为 3 。 nums 变成 [5,3,3,4] 。 第二步,将 4 改为 3 。 nums 变成 [5,3,3,3] 。 第三步,将 5 改为 3 。 nums 变成 [3,3,3,3] 。 执行 3 次移动后,最小值和最大值之间的差值为 3 - 3 = 0 。
示例2:
输入:nums = [1,5,0,10,14] 输出:1 解释:我们最多可以走 3 步。 第一步,将 5 改为 0 。 nums变成 [1,0,0,10,14] 。 第二步,将 10 改为 0 。 nums变成 [1,0,0,0,14] 。 第三步,将 14 改为 1 。 nums变成 [1,0,0,0,1] 。 执行 3 步后,最小值和最大值之间的差值为 1 - 0 = 1 。 可以看出,没有办法可以在 3 步内使差值变为0。
1 <= nums.length <= 10^5
-10^9 <= nums[i] <= 10^9
问题分析
这题说的是每次操作可以把数组中的任意一个元素变成任意值,最多执行 3 次操作,3 次操作之后,计算数组中最大值和最小值的差值。
如果数组中的元素个数小于等于 4 ,我们可以把数组中其他所有元素的值都改成第一个元素的值,这样数组中所有元素都一样了,这时候数组中最大值和最小值的差值是 0 。
如果数组中的元素个数大于 4 ,我们先对数组排序,排序之后要想数组中最大值和最小值的差值最小,我们可以移除 3 个元素,然后用数组中的最大值减去最小值。
怎么移除?可以移除最小的,也可以移除最大的,我们只需要保存差值的最小值即可。
JAVA:
public int minDifference(int[] nums) { int n = nums.length; if (n <= 4) return 0; Arrays.sort(nums); int ans = Integer.MAX_VALUE; ans = Math.min(ans, nums[n - 1] - nums[3]);// 前面移除 3 个,后面移除 0 个 ans = Math.min(ans, nums[n - 2] - nums[2]);// 前面移除 2 个,后面移除 1 个 ans = Math.min(ans, nums[n - 3] - nums[1]);// 前面移除 1 个,后面移除 2 个 ans = Math.min(ans, nums[n - 4] - nums[0]);// 前面移除 0 个,后面移除 3 个 return ans; }C++:
public: int minDifference(vector
&nums) { int n = nums.size(); if (n <= 4) return 0; sort(nums.begin(), nums.end()); int ans = INT_MAX; ans = min(ans, nums[n - 1] - nums[3]);// 前面移除 3 个,后面移除 0 个 ans = min(ans, nums[n - 2] - nums[2]);// 前面移除 2 个,后面移除 1 个 ans = min(ans, nums[n - 3] - nums[1]);// 前面移除 1 个,后面移除 2 个 ans = min(ans, nums[n - 4] - nums[0]);// 前面移除 0 个,后面移除 3 个 return ans; }
笔者简介
博哥,真名:王一博,毕业十多年, 作者,专注于 数据结构和算法 的讲解,在全球30多个算法网站中累计做题2000多道,在公众号中写算法题解800多题,对算法题有自己独特的解题思路和解题技巧 。
热门跟贴