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

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

时间:2024-10-08 22:23:41浏览次数:9  
标签:面试题 right 159 元素 普通人家 int 数组 stock left

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

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

拿我经历过的阿里巴巴 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)  
}

标签:面试题,right,159,元素,普通人家,int,数组,stock,left
From: https://blog.csdn.net/H_P10/article/details/142770160

相关文章

  • 2024年Java最新面试题总结(五年经验)
    第一章、基础技术栈1.1)集合,string等基础问题1、arraylist,linkedlist的区别,为啥集合有的快有的慢①ArrayList它的底层是数组,有下标的概念,可以通过index下标直接定位元素,所以查询快;在增删时,会进行扩容判断和拷贝,所以增删慢。②LinkedList的底层是双向链表。每次查询都要循环......
  • JAV面试题答案——红黑树怎么保持平衡的
    红黑树根据规则通过旋转和节点染色这两种方式来保持平衡,这些操作是红黑树维持平衡的关键部分。1.旋转操作旋转操作是红黑树维持平衡的主要手段之一,它包括左旋和右旋两种基本操作。旋转操作通常在插入和删除操作中使用,以确保树的性质得以维护左旋将一个节点的右子树提升为其......
  • Java八股文面试题之Java基础篇(一)
     1.JDK、JRE、JVM有什么区别?JDK(JavaDevelopmentKit):是Java开发工具包,它提供了Java开发所需的开发工具、编译器和运行环境等多种组件。JJRE,还有一些开发者所需的额外组件(如编译器、调试器、文档生成工具等),可以用来开发和编译Java应用程序。JDK对于开发者来说是必备的......
  • 牛客网1000 大厂Java 面试题大全(2024 最新版)
    很多Java工程师的技术不错,但是一面试就头疼,10次面试9次都是被刷,过的那次还是去了家不知名的小公司。问题就在于:面试有技巧,而你不会把自己的能力表达给面试官。应届生:你该如何准备简历,面试项目和面试说辞?Spring底层逻辑是什么?1-3年经验的程序员:面试中你该讲哪些值钱......
  • 面试字节跳动精选20道产品经理面试题分析回答
    分享20道字节跳动产品经理的面试题,产品经理的面试很多会跟项目强关联,比如面试电商产品经理,就要多聊电商的业务,所以我们选了一些比较通用的,面试题及我们的分析回答。0120道面试题(前10道)1)自我介绍。2)为什么做产品经理?3)这么多年的工作经验,你对产品经理有什么新的认知?4)你......
  • Java大厂面试题合集!
    1、为什么要使用线程池  难度系数:⭐使用线程池的主要原因包括:降低资源开销:线程池预先创建一定数量的线程,当需要处理任务时,直接从线程池中获取已经创建好的线程,避免了频繁地创建和销毁线程所带来的开销。这样可以显著提高系统的性能。控制并发线程数量:线程池可以限制同......
  • 【Kubernetes】常见面试题汇总(五十七)
    目录125.K8S创建服务status为ErrlmagePull?126.不能进入指定容器内部?特别说明:题目  1-68  属于【Kubernetes】的常规概念题,即“汇总(一)~(二十二)”。题目 69-113 属于【Kubernetes】的生产应用题,其中104-113为“情景类”。题目114-132属于【Kube......
  • Python常见面试题(100道)
        面试总是让人倍感压力,尤其是在技术领域,准备充分非常关键。为了帮助你更好地应对Python面试,我精心整理了100道经典的Python面试题,并附上详细答案和解析。这些问题涵盖了基础知识、实用技巧和常见难点,旨在提升你的面试能力,让你自信面对挑战。快来领取这份资源,助你顺......
  • 【春秋招必看】Unity相关笔试面试题(内有完整答案)第12期
    欢迎来到光光的奇妙冒险,我是你们的煎饼光子老师。今天是我们的第12期试题总结。C#部分:(前四题为字节跳动面试问题)1、List是链表还是数组答案:数组2、上一题追问:当list满了的时候,我再加入一个元素它的效率会比较低啊,它内部大概是一个什么样的执行过程呢?答案:数组搬家,会......
  • 高级java每日一道面试题-2024年9月30日-算法篇-LRU是什么?如何实现?
    如果有遗漏,评论区告诉我进行补充面试官:LRU是什么?如何实现?我回答:LRU(LeastRecentlyUsed)是一种常用的缓存淘汰策略,用于在缓存满时决定哪些数据应该被移除。LRU算法的基本思想是:当缓存达到其容量上限时,最近最少使用的数据会被优先淘汰。这种策略假设最近使用的数据在......