笛子秋招
当大家看到这个消息的时候,笛子秋召只有双2以上。
以前你不理睬笛子,现在笛子却让你伸手不见五指。
谁能想到,也许三四年前,笛子还是大家的首选。他经常被同学戏称为笛子招聘,点开就能拿到offer。去年,口号发生了变化。网络口号变成了迪爸爸,谢谢你收留我。现在已经变得高不可攀,迪嘉!
这一切的背后,供给依然大大超过需求。据传,笛子秋招期间,系统开通不到24小时就收到了近20万份简历。明年HR不可能完成所有如此规模的简历。因此,笛子采取了最简单、最直接的做法:在招聘系统中设定学历要求,快速筛选候选人。
您对此有何看法?您的行业/公司是否经历过类似的教育资格通胀?
...
回到主题。
这是一道与“秋招”相关的算法题。
问题描述
平台:
问题编号:154
已知将长度为n的数组预先按升序排列,旋转后得到输入数组。
例如,原数组 nums = [0,1,4,4,5,6,7] 可以改为:
注意,数组 [a[0], a[1], a[2], ..., a[n-1]] 旋转一次的结果是数组 [a[n-1], a[0 ], a [1], a[2], ..., a[n-2]] 。
给您一个可能具有“重复”元素值的数组 nums。它原本是一个按升序排列的数组,并如上所述旋转了多次。
请找到并返回数组中的“最小元素”。
示例1:
输入:nums = [1,3,5]
输出:1
示例2:
输入:nums = [2,2,2,0,1]
输出:0
暗示:
先进的:
两点
根据题意,我们知道所谓的旋转其实就是“将某个下标前面的所有数字移到后面,使数组从整体顺序变为分段顺序”。
但不同的是,这个问题的要素并不唯一。
这意味着我们不能直接根据与**的大小关系将数组分成两段,即无法通过“二分”找到旋转点。
因为“二分法”的本质是两阶段的,而不是单调的。只要一个部分满足某个性质,而另一个部分不满足某个性质,就可以使用“二分法”。
如果你看过我对这个问题的解答,你应该很容易理解上一句话的意思。如果没有,也没关系。我们可以先解决这个问题,等你明白了之后再做。我认为这两个问题是同一个问题,没有先后关系。
例如,我们使用数据[0,1,2,2,2,3,4,5]来理解为什么不同的旋转点会导致“两阶段损失”:
Java代码:
class Solution {
public int findMin(int[] nums) {
int n = nums.length;
int l = 0, r = n - 1;
while (l < r && nums[0] == nums[r]) r--;
while (l < r) {
int mid = l + r + 1 >> 1;
if (nums[mid] >= nums[0]) l = mid;
else r = mid - 1;
}
return r + 1 < n ? nums[r + 1] : nums[0];
}
}
C++代码:
class Solution {
public:
int findMin(vector<int>& nums) {
int n = nums.size();
int l = 0, r = n - 1;
while (l < r && nums[0] == nums[r]) r--;
while (l < r) {
int mid = l + r + 1 >> 1;
if (nums[mid] >= nums[0]) l = mid;
else r = mid - 1;
}
return r + 1 < n ? nums[r + 1] : nums[0];
}
};
代码:
class Solution:
def findMin(self, nums: List[int]) -> int:
n = len(nums)
l, r = 0, n - 1
while l < r and nums[0] == nums[r]:
r -= 1
while l < r:
mid = l + r + 1 >> 1
if nums[mid] >= nums[0]:
l = mid
else:
r = mid - 1
return nums[r + 1] if r + 1 < n else nums[0]
代码:
function findMin(nums: number[]): number {
const n = nums.length
let l = 0, r = n - 1
while (l < r && nums[0] == nums[r]) r--
while (l < r) {
const mid = l + r + 1 >> 1
if (nums[mid] >= nums[0]) l = mid
else r = mid - 1
}
return r + 1 < n ? nums[r + 1] : nums[0]
};
终于
超划算的会员折扣渠道还有哦~
使用福利折扣通道//?=,年会员有效期增加两个月,季会员有效期增加两周。每月发放超大额专属福利和实物福利。
我的名字是宫水三叶。每天分享算法知识,和大家聊聊最近的所见所闻。