【秋招刷题打卡】Day01-自定义排序

Day01-自定排序

前言

给大家推荐一下咱们的 陪伴打卡小屋 知识星球啦,详细介绍 =>笔试刷题陪伴小屋-打卡赢价值丰厚奖励 <=

⏰小屋将在每日上午发放打卡题目,包括:

  • 一道该算法的模版题 (主要以力扣,牛客,acwing等其他OJ网站的题目作为模版)
  • 该算法的应用题(主要以往期互联网大厂 笔试真题 的形式出现,评测在咱们的 笔试突围OJ

小屋day01

自定义排序 在笔试中很少会单独考,但是应用非常广泛,一般是作为中间的流程出现,建议小伙伴们要好好掌握哦。

✨ 自定义排序模版

对于排序规则,这里采用 lambda 表达式的简洁写法。

Java

在Java中,lambda表达式用于简化Comparator接口的实现,从而实现自定义排序。Java 8引入了lambda表达式,使得代码更加简洁。以下是一个示例,展示如何使用lambda表达式对自定义对象进行排序:

List<Student> studentList = new ArrayList<>();
studentList.add(new Student("Jon", 22, 1001));
studentList.add(new Student("Steve", 19, 1003));

// 按名字排序
studentList.sort((Student s1, Student s2) -> s1.getName().compareTo(s2.getName()));

// 按年龄排序
studentList.sort((Student s1, Student s2) -> Integer.compare(s1.getAge(), s2.getAge()));

C++

在C++中,lambda表达式可以用来定义自定义排序规则。C++11引入了lambda表达式,使得代码更加简洁和灵活。以下是一个示例,展示如何使用lambda表达式对字符串向量按长度进行排序:

#include <vector>
#include <algorithm>
#include <iostream>

int main() {
    std::vector<std::string> strings = {"apple", "banana", "cherry", "dog", "elephant"};
    std::sort(strings.begin(), strings.end(), [](const std::string& a, const std::string& b) {
        return a.length() < b.length();
    });
    for (const auto& s : strings) {
        std::cout << s << std::endl;
    }
    return 0;
}

Python

在Python中,lambda表达式常用于sorted函数和sort方法的key参数,以实现自定义排序。以下是一个示例,展示如何使用lambda表达式对字符串列表按长度进行排序:

words = ["apple", "banana", "cherry", "date", "elderberry"]
sorted_words = sorted(words, key=lambda x: len(x))
print(sorted_words)

🫔 模版题

leetcode-1636. 按照频率将数组升序排序
评测链接🔗 https://leetcode.cn/problems/sort-array-by-increasing-frequency/)

题目描述

给你一个整数数组 nums ,请你将数组按照每个值的频率 升序 排序。如果有多个值的频率相同,请你按照数值本身将它们 降序 排序。

请你返回排序后的数组。


思路

按着题目的要求,先算出数组 n u m s nums nums 中各元素的频率,然后按照元素频率和数值对数组进行排序即可。

对于排序规则,这里采用 lambda 表达式的简洁写法。

  • Python

    class Solution:
        def frequencySort(self, nums: List[int]) -> List[int]:
            cnt = Counter(nums) # 计数器
            nums.sort(key=lambda x: (cnt[x], -x)) # 默认从小到大排序
            return nums
    
  • C++

    class Solution {
    public:
        vector<int> frequencySort(vector<int>& nums) {
            vector<int> cnt(201); // 计数器
            for (int v : nums) {
                ++cnt[v + 100];
            }
          // 也可以写成二元组的形式
          // nums[i] = {cnt[x], -x};
          // 然后从小到大排序
            sort(nums.begin(), nums.end(), [&](const int a, const int b) {
                if (cnt[a + 100] == cnt[b + 100]) return a > b;
                return cnt[a + 100] < cnt[b + 100];
            });
            return nums;
        }
    };
    
  • Java

    class Solution {
        public int[] frequencySort(int[] nums) {
            List<Integer> list = new ArrayList<>();
            Map<Integer, Integer> freqs = new HashMap<>(); // 计数器
            for (int x : nums) {
                list.add(x);
                freqs.put(x, freqs.getOrDefault(x, 0) + 1);
            }
            Collections.sort(list, (a, b) -> { // Java的自定义排序
                int freq1 = freqs.get(a), freq2 = freqs.get(b);
                return freq1 == freq2 ? b - a : freq1 - freq2;
            });
            for (int i = 0; i < nums.length; ++i) {
                nums[i] = list.get(i);
            }
            return nums;
        }
    }
    

🍰 笔试真题

  • 该题来自今年小红书春招的笔试题,题目难度为 easy,考查的是比较裸的自定义排序。

  • 另外给大家带来一道进阶版的,今年华为春招的笔试题,这边给大家放出评测链接,有能力的小伙伴可以去试一试哦

    进阶版🔗评测链接:https://app5938.acapp.acwing.com.cn/problem/HW001

盛夏送礼物

评测链接:https://app5938.acapp.acwing.com.cn/contest/3/problem/Day01

题目描述

K小姐是一名知名博主,她在某个盛夏的午后决定给她的粉丝送一些小礼物。她有 n n n 名粉丝,编号从 1 1 1 n n n,但她只能选择其中 k k k 名送礼物。为了公平起见,她决定选择其中对她支持力度最大的前 k k k 名粉丝。如果有两名粉丝的支持力度相同,则优先选择点赞数更多的粉丝;如果点赞数也相同,则优先选择编号更小的粉丝(因为这意味着Ta关注K小姐的时间更早)。

每名粉丝如果给K小姐点一次赞,则对K小姐的支持力度就增加 1 1 1 点;如果收藏K小姐的一篇文章,则对K小姐的支持力度增加 2 2 2 点。

现在K小姐想知道,她应该选择哪 k k k 名粉丝送出礼物,你能帮帮她吗?

输入格式

输入包含 n + 1 n+1 n+1 行。

第一行包含两个正整数 n , k   ( 1 ≤ k ≤ n ≤ 1 0 5 ) n,k\ (1 \leq k \leq n \leq 10^5) n,k (1kn105),分别表示对K小姐有过支持的粉丝个数,以及K小姐选择送礼的粉丝个数。

接下来 n n n 行,每行两个整数 x , y   ( 0 ≤ x , y ≤ 1 0 5 ) x,y\ (0 \leq x,y \leq 10^5) x,y (0x,y105),表示第 i i i 位粉丝给K小姐点过 x x x 次赞,收藏过 y y y 个K小姐的文章。

输出格式

输出包含一行 k k k 个正整数,表示K小姐选择出送礼物的粉丝们的编号。(按照升序输出)

样例输入

4 2
1 2
2 1
3 0
1 3

样例输出

1 4

数据范围

  • 1 ≤ k ≤ n ≤ 1 0 5 1 \leq k \leq n \leq 10^5 1kn105
  • 0 ≤ x , y ≤ 1 0 5 0 \leq x,y \leq 10^5 0x,y105

题解

本题可以按照题目描述,直接进行模拟。

  1. 将每个粉丝的信息(点赞数、收藏数、编号)存储在一个数组中。

  2. 定义一个自定义的排序规则:

    • 首先比较支持力度(点赞数 + 收藏数 * 2)
    • 如果支持力度相同,则比较收藏数
    • 如果收藏数也相同,则比较编号
  3. 对存储粉丝信息的数组自定义的排序规则进行排序。

  4. 取排序后的前 k k k 个粉丝的编号,按照升序输出即可。

时间复杂度为 O ( n log ⁡ n ) O(n \log n) O(nlogn),空间复杂度为 O ( n ) O(n) O(n)

参考代码

  • Python
n, k = map(int, input().split())
fans = []
for i in range(n):
    x, y = map(int, input().split())
    fans.append((x, y, i + 1))

fans.sort(key=lambda x: (-x[0] - x[1] * 2, -x[1], x[2]))

res = [fans[i][2] for i in range(k)]
res.sort()
print(*res)
  • Java
import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int k = sc.nextInt();
        int[][] fans = new int[n][3];
        for (int i = 0; i < n; i++) {
            fans[i][0] = sc.nextInt();
            fans[i][1] = sc.nextInt();
            fans[i][2] = i + 1;
        }

        Arrays.sort(fans, (a, b) -> {
            int wa = a[0] + a[1] * 2;
            int wb = b[0] + b[1] * 2;
            if (wa != wb) {
                return wb - wa;
            } else if (a[1] != b[1]) {
                return b[1] - a[1];
            } else {
                return a[2] - b[2];
            }
        });

        int[] res = new int[k];
        for (int i = 0; i < k; i++) {
            res[i] = fans[i][2];
        }
        Arrays.sort(res);
        for (int i = 0; i < k; i++) {
            System.out.print(res[i]);
            System.out.print(' ');
        }
    }
}
  • Cpp
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main() {
    int n, k;
    cin >> n >> k;
    vector<vector<int>> fans(n, vector<int>(3));
    for (int i = 0; i < n; i++) {
        cin >> fans[i][0] >> fans[i][1];
        fans[i][2] = i + 1;
    }

    sort(fans.begin(), fans.end(), [](const vector<int>& a, const vector<int>& b) {
        int wa = a[0] + a[1] * 2;
        int wb = b[0] + b[1] * 2;
        if (wa != wb) {
            return wa > wb;
        } else if (a[1] != b[1]) {
            return a[1] > b[1];
        } else {
            return a[2] < b[2];
        }
    });

    vector<int> res(k);
    for (int i = 0; i < k; i++) {
        res[i] = fans[i][2];
    }
    sort(res.begin(), res.end());
    for (int i = 0; i < k; i++) {
        cout << res[i] << " ";
    }

    return 0;
}

秋招笔试刷题陪伴小屋

🍰 打卡奖励预览

打卡时长奖励内容
7天任选一家最新互联网笔试真题 x 1 (价值 29.9 元)
14天任选一家最新互联网笔试真题 x 3 + 笔试面试经验贴
21天任选一家最新互联网笔试真题 x 5 + 清隆三语言算法模版
28天最新互联网大厂笔试真题汇总(价值 199 元) + 华为OD机试训练营 (价值 89 元 )

🎀 其中笔试真题选自近 一年半 互联网春秋招的笔试题

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/731410.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

20240621在飞凌的OK3588-C开发板的Buildroot系统中集成i2ctool工具

20240621在飞凌的OK3588-C开发板中打开i2ctool工具 2024/6/21 17:44 默认继承的i2c工具&#xff1a; rootrk3588-buildroot:/# rootrk3588-buildroot:/# i2c i2c-stub-from-dump i2cdump i2cset i2cdetect i2cget i2ctransfer rootrk3588-…

CVPR 2024盛况空前,上海科技大学夺得最佳学生论文奖,惊艳全场

CVPR 2024盛况空前&#xff01;上海科技大学夺得最佳学生论文奖&#xff0c;惊艳全场&#xff01; 会议之眼 快讯 2024 年 CVPR &#xff08;Computer Vision and Pattern Recogntion Conference) 即国际计算机视觉与模式识别会议&#xff0c;于6月17日至21日正在美国西雅图召…

邀请函 | 桥田智能出席AMTS展会 家族新成员正式发布

作为国际汽车制造技术与装备及材料专业展览会&#xff0c;AMTS将于2024年7月3-5日在上海新国际博览中心举行。本届展会以【向“新”而行 “智”领未来】为主题&#xff0c;聚焦汽车及新能源全产业链&#xff0c;围绕“车身工程、部件工程、新能源三电工程及未来汽车开发”等技…

Linux (centos7.9)上部署 NFS(Network File System)服务

NFS&#xff08;Network File System&#xff09;是一种网络文件系统协议&#xff0c;允许不同计算机之间通过网络共享文件和目录。NFS 最初由 Sun Microsystems 在 1984 年开发&#xff0c;现已成为许多 Unix 和类 Unix 系统&#xff08;包括 Linux&#xff09;上的标准文件系…

好大夫在线医生数据医生姓名科室荣誉等202406

好大夫在线医生数据医生姓名科室荣誉等 2024年6月数据&#xff0c;总共934027条数据&#xff0c;可导出为excel,csv等 好大夫在线2024-06月数据 包含简介信息&#xff01; 可见样例数据 样例数据_医生2.xlsx https://www.alipan.com/s/DBEW9MgHEPP 点击链接保存&#xff0…

【Python】成功解决TypeError: missing 1 required positional argument

【Python】成功解决TypeError: missing 1 required positional argument 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1…

4种方法轻松掌握怎么调节电脑屏幕亮度的技巧!

在使用电脑的过程中&#xff0c;调节屏幕亮度是一项常见的操作&#xff0c;它可以帮助我们适应不同的环境光线&#xff0c;减轻眼睛的疲劳&#xff0c;提高使用体验。 然而&#xff0c;对于一些新手用户来说&#xff0c;怎么调节电脑屏幕亮度可能会感到困惑。本文将介绍四种简…

RocketMQ的安装和原理

.RocketMQ的安装 一.RocketMQ安装 1.1.下载RocketMQ 下载地址&#xff1a;http://rocketmq.apache.org/release_notes/release-notes-4.2.0/ 下载后解压 Bin : 可执行文件目录 config&#xff1a;配置文件目录 Lib : 依赖库&#xff0c;一堆Jar包 1.2.配置ROCKETMQ_HOME…

AI时代:硬件狂欢,软件落寞 华为开发者大会2024

内容提要 分析师表示&#xff0c;目前AI行业大多数的支出都流向用于训练大模型的硬件或云基础设备。相较之下&#xff0c;软件应用商们在AI时代显得停滞不前。尽管软件应用商们十分热衷于构建AI工具&#xff0c;然而其收入状况却并不乐观。 文章正文 AI浪潮之下&#xff0c;英…

Day 29:1600. 王位继承顺序

Leetcode1600. 王位继承顺序 一个王国里住着国王、他的孩子们、他的孙子们等等。每一个时间点&#xff0c;这个家庭里有人出生也有人死亡。 这个王国有一个明确规定的王位继承顺序&#xff0c;第一继承人总是国王自己。我们定义递归函数 Successor(x, curOrder) &#xff0c;给…

校园疫情防控健康打卡系统

摘 要 自疫情出现以来&#xff0c;全世界人民的生命安全和健康都面临着严重威胁。高校是我国培养人才的重要基地&#xff0c;其安全和稳定影响着社会的发展和进步。因此&#xff0c;各高校高度重视疫情防控工作&#xff0c;并在校园疫情防控中引入了健康打卡系统。本论文主要研…

NodeJs实现对本地 mysql 数据库的增删改查

写在前面 今天我们接着写nodejs对数据库的操作&#xff0c;今天实现简单的增删改查&#xff0c;读之前请先移步到这里NodeJs 连接本地 mySql 数据库获取数据,避免后续一些代码出险阅读断层。 安装 nodemon npm install nodemon因为 nodejs 的服务是本地启动&#xff0c;避免后…

【机器学习】transformer框架理论详解和代码实现

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

【C语言】14.数组指针与函数指针及其应用

一、数组指针 顾名思义&#xff0c;数组指针就是指向数组的指针。形如&#xff1a;int (*p)[10]; 注意&#xff1a;[]的优先级要高于*号的&#xff0c;所以必须加上&#xff08;&#xff09;来保证p先和*结合。 数组指针的使用 int arr[10] {0}; int (*parr)[10] &arr;…

【Matlab】BP 神经网络分类算法(附代码)

资源下载&#xff1a; https://download.csdn.net/download/vvoennvv/89466423 分类算法资源合集&#xff1a;https://download.csdn.net/download/vvoennvv/89466519 目录 Matlab SVM支持向量机分类算法 Matlab RF随机森林分类算法 Matlab RBF径向基神经网络分类算法 Mat…

【C++题解】1713 - 输出满足条件的整数3

问题&#xff1a;1713 - 输出满足条件的整数3 类型&#xff1a;简单循环 题目描述&#xff1a; 有一个数列&#xff0c;该数列的前 4 个数是&#xff1a; 1 4 7 10 &#xff1b; 请从键盘读入一个正整数 n &#xff0c;请通过观察前 4 项的规律&#xff0c;输出 1∼n 之间所有…

课程标准包括哪些内容?

老师们常常会思考&#xff1a;课程标准究竟包含哪些要素&#xff1f;课程标准不仅仅是一系列冷冰冰的条条框框&#xff0c;而是活生生的指导原则&#xff0c;引领教学实践&#xff0c;激发学生的潜能。 课程标准&#xff0c;简而言之&#xff0c;是对学习成果的期望和要求的明确…

python20 函数的定及调用

函数的定及调用 函数是将一段实现功能的完整代码&#xff0c;使用函数名称进行封装&#xff0c;通过函数名称进行调用。以此达到一次编写&#xff0c;多次调用的目的 用 def 关键字来声明 函数 格式&#xff1a; def 函数名(参数列表):函数体[:return 返回值是可选的&#xff0…

接口自动化测试实战:测试用例也能自动生成

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 作为测试&#xff0c;你可能会对以下场景感到似曾相识&#xff1a;开发改好的 BUG 反复横跳&…

DC电源实现12V转换为9V,有这4方法?

想要将DC12V电压转换为DC9V电压输出。DCDC电源降压的方式很多&#xff0c;相关类型的电源芯片也很多&#xff0c;有线性降压模式也有开关降压模式的电源芯片。 1、若输出电源电压要求不高&#xff0c;电流≤1A&#xff0c;直接使用7809三端稳压器即可&#xff0c;既简单又方便。…