为什么张雪峰推荐普通人家的孩子考研考计算机?从阿里一面面试题说起:剑指 offer - 159:库存管理 3

张雪峰推荐普通人考研考计算机相关专业,主要是因为计算机技术在现代社会中薪资水平相对较高。

另一方面,也是计算机专业在平时就学习了数据结构等课程,在招聘前冲刺复习的时候比像我这样的非科班选手要省下不少精力。

拿我经历过的阿里巴巴 C++ 后端一面来说,面试官考察了最基本的二叉树、链表等数据结构。算法题考了快速排序算法。如果在学校学过这两门课的话就能省下不少时间。

虽然现在互联网行业的就业情况也是越来越卷,尤其是大家经常调侃的 Java 。但是大家不要灰心,坚持学习进步、相信会有合适的 offer 的。

CSDN - 本博客python入门笔记快捷下载

免费下载 - MySQL和Oracle的详细区别

CSDN - 本博客C++入门笔记快捷下载

今天的剑指 offer 带来和我的阿里巴巴一面相同的快排:

剑指 offer 题目:

题号:LCR 159

仓库管理员以数组 stock 形式记录商品库存表,其中 stock[i] 表示对应商品库存余量。请返回库存余量最少的 cnt 个商品余量,返回 顺序不限。

图片

剑指 offer 解题思路:

思路一:快速排序

  • 快速排序是一种分治算法,通过选择一个“基准”元素(pivot),将数组分成两个子数组,一个子数组中的所有元素都小于或等于基准元素,另一个子数组中的所有元素都大于基准元素。

  • 然后递归地对这两个子数组进行快速排序。

  • 通过两个指针ij从数组的两端向中间遍历,并根据基准元素重新排列数组,使得基准元素最终位于其正确的位置上,且左侧元素均不大于基准,右侧元素均不小于基准。

  • 最后递归地对基准元素的左侧和右侧子数组进行排序。

时间复杂度:O(log N)

空间复杂度:O(log N)

C++


// C++
class Solution {
    void qucikSort(vector<int>& stock, int left, int right) {
        if(left >= right) {
            return;
        }
        int i = left, j = right;
        while(i < j) {
            while(i < j && stock[j] >= stock[left]) j--;
            while(i < j && stock[i] <= stock[left]) i++;
            swap(stock[i], stock[j]);
        }
        swap(stock[i], stock[left]);
        qucikSort(stock, left, i - 1);
        qucikSort(stock, i + 1, right);
    }
public:
    vector<int> inventoryManagement(vector<int>& stock, int cnt) {
        qucikSort(stock, 0, stock.size() - 1);
        vector<int> answer;
        answer.assign(stock.begin(), stock.begin() + cnt);
        return answer;
    }
};

go


// go
func inventoryManagement(stock []int, cnt int) []int {
    quickSort(stock, 0, len(stock)-1)  
    return stock[:cnt]
}

func quickSort(stock []int, left, right int) {  
  if left >= right {  
    return  
  }  
  i, j := left, right  
  pivot := stock[left]  
  for i < j {  
    for i < j && stock[j] >= pivot {  
      j--  
    }  
    for i < j && stock[i] <= pivot {  
      i++  
    }  
    stock[i], stock[j] = stock[j], stock[i]  
  }  
  stock[i], stock[left] = stock[left], stock[i]  
  quickSort(stock, left, i-1)  
  quickSort(stock, i+1, right)  
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值