Java | Python | C++ 机试/手撕技巧

前言

机试如果掌握一定的技巧能够大大减小代码量

或者是面试C++,机试用Python有时候也能节约时间

(数据量一般但处理逻辑麻烦)

避免重复造轮子

如有错误,评论补充

建议点赞收藏转发

不定时更新

栈、队列、哈希表的实现(基础,防止忘记)

Python

栈:

stack = [] # 创建一个空栈
stack.append(1) # 入栈
stack.pop() # 出栈

队列

from collections import deque
queue = deque() # 创建一个空队列
queue.append(1) # 入队
queue.popleft() # 出队

哈希表

hash_map = {} # 创建一个空哈希表
hash_map['key1'] = 'value1' # 添加键值对
hash_map['key1'] # 查询键值对,'value1'
hash_map.pop('key1') # 删除键值对,'value1'

Java:

Stack<Integer> stack = new Stack<Integer>(); // 创建一个空栈
stack.push(1); // 入栈
stack.pop(); // 出栈,

队列

Queue<Integer> queue = new LinkedList<Integer>(); // 创建一个空队列
queue.offer(1); // 入队
queue.poll(); // 出队,1

哈希表

Map<String, String> hash_map = new HashMap<String, String>(); // 创建一个空哈希表
hash_map.put("key1", "value1"); // 添加键值对
hash_map.get("key1"); // 查询键值对,"value1"
hash_map.remove("key1"); // 删除键值对,"value1"

C++:

栈:

stack<int> s; // 创建一个空栈
s.push(1); // 入栈
s.pop(); // 出栈

队列:

queue<int> q; // 创建一个空队列
q.push(1); // 入队
q.pop(); // 出队

哈希表:

unordered_map<string, string> hash_map; // 创建一个空哈希表
hash_map["key1"] = "value1"; // 添加键值对
hash_map["key1"]; // 查询键值对,"value1"
hash_map.erase("key1"); // 删除键值对,返回1

四舍五入输出

Python

#round(1.45, 1) 输出1.4,  底层是“四舍六入五成双”” 
round(1.45+1e-3, 1) #输出1.5正确

Java

System.out.printf("%.1f", 1.45);  //输出1.5 无误

C++

//cout << setprecision(2) << 1.45;  (#include <iomanip> 输出1.4错误、
//round() 不支持保留小数
//printf("%3.1f",1.45); 输出1.4错误
//printf("%.1f",1.45);  完全错误,格式不能省略整体的长度(即3位)
printf_s("%.1f",1.45); // 输出1.5 正确 

将数组中符合条件的数修改

如把>n的数改为k

python

my_list = [1, 2, 3, 4, 5, 6]
n = 3
k = 10
new_list = [k if x > n else x for x in my_list] #都没有原地修改
#new_list = list(map(lambda x: k if x > n else x, vec))
print(new_list)  # [1, 2, 3, 10, 10, 10]

java

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> my_list = new ArrayList<>();
        my_list.add(1);
        my_list.add(2);
        my_list.add(3);
        my_list.add(4);
        my_list.add(5);
        my_list.add(6);
        int n = 3;
        int k = 10;

        List<Integer> new_list = my_list.stream()
                .map(x -> x > n ? k : x)
                .collect(Collectors.toList());

        System.out.println(new_list);  // [1, 2, 3, 10, 10, 10]
    }
}

C++

for(auto& num : vec){ //&引用原地修改
  if(num > n) num = k;

待补充……

附录

  • python实现动归或者剪枝难以100%的情况下,可以使用Java替代(一般Java和Python的时空限制为同一档,C/C++自成一档)
  • 不算太稀疏的int/char型的map使用数组替换(一般可以new int[1000000])
  • 递归调用的时候使用尾递归,并且先判断再进入避免heap爆炸
  • C++的报错信息可能会没有Python和Java的信息明显(具体哪行错误)
  • 考试结束前5分钟一定要全部提交一遍,避免同时考试的人太多卡死
  • 无需像牛客这种考虑多个用例输入(除非有明显报错)
  • 输出题目中的用例(基本没用)
  • 一般树、链表等非库内数据结构的题,不会是ACM模式
  • 贪心、DFS、动态规划为重要考点,但一般都可以用DFS先暴力拿点分再优化剪枝(需熟悉递归写法,visited数组)
  • 最好不要把机试题原封不动的分享出来,因为做题前都会有大前提……
  • 手撕代码一般不允许本地ide调试,在线运行的话多用print
  • 如果输出为单个数字,可以试着print某些和题目有关联的数字,比如0,输入的大小
  • ……

#笔试##机试#
全部评论
大佬,请问面试手撕的时候能不能用Python,面试官一般会指定语言吗😂
1 回复 分享
发布于 2024-03-03 00:22 北京
锴神!
1 回复 分享
发布于 2023-04-19 00:01 海南

相关推荐

04-11 00:51
已编辑
门头沟学院 Java
先说一下楼主的情况:双非本大三,两段实习,javaer,想要找一个暑期大厂offer,努力了两个月,三月份每天的状态就是算法,八股,项目,四月份更是一个面试没有,最终还是没有结果,心碎了一地。期间面了一些中小厂,大厂只有腾讯约面,其他大厂都投了一遍,但是还是石沉大海。再看一下楼主的面试结果吧,就不说ttl了腾讯s3:三面挂csig:一面挂teg:三面挂wxg:一面挂没错,面了八次腾讯,两次三面挂,当时真的心都碎了。其他中小厂都有面,有的没过,有的oc,但是都没有去。其他大厂投了简历,但是不是简历挂,就是测评挂,都说今年行情好很多,各大厂都扩招,可是问题出在那里呢?学历背景吗?实习经历吗?还是简历不够好看?依稀记得,从年初七就离开了家里,回到学校,早早准备面试,当时自己认为凭借着自己的两段实习经历,以及大二就开始准备的八股算法,拿大厂offer不是问题,但是还是不敢放松,回校的状态每天就是算法,八股,还有查看各种招聘信息,想着尽早投机会多,但是事实证明,投的早,不如投的刚刚好。当时想着,先投一些中小厂开始面试,找找面试感觉,从2.10就开始有面试了,基本都是线下面试,面试的感觉都很不错,觉得自己的状态慢慢回来了,期间也有oc一些中小厂,但是自己的目标并不在此,只是想练一下手,遂拒。后面投了腾讯的暑期实习基地,不久就约面了,第一次面这么大的厂,多少有点紧张,好在运气还不错,遇到的面试官也比较好,一直干到了三面,期间看牛客有不少说一面就挂了的,感觉自己还是比较幸运的,但是没想到倒在了三面,一周后就挂了,伤心是有的,但是想到这才刚刚开始,还有很多机会,便继续准备下一次面试了,很快,被另外一个部门捞了,一进会议,面试官没开摄像头,看网上说没开摄像头很多都是kpi,但是自己给自己打气,认为面试官只是不方便开摄像头罢了,面完,感觉良好,没问什么很难得问题,基本都答出来了,算法两道也a了一道,感觉实习不会这么严格吧?还是过了一会挂了,因为这个?还是技术不太匹配?面试过程中说搞C++的,心想,搞c++的你面我干啥?唉,这时候有点气馁,然后就接下来半个月没有面试。这时已经是三月底了,看到牛客好多人都已经陆陆续续拿到了offer,看人家的面试准备也没那么早,有0实习的,有没刷算法的,有两个面的,,,唉,反正是一言难尽啊,感觉努力没有什么意义,面试多半是看面试官的感觉,主观性很大啊,只要你技术没有太大的问题。第三次面试腾讯,面试来的比较突然,期间已经有几天没看八股什么的了,临时看了一下之前自己做的面试笔记,但是面试却异常顺利,三天闯到了三面,自己也不敢相信,三面玩感觉也良好,脑子里不得不想着一些“offer结算画面”,但是过了一会查看流程显示“流程终止”,我?哎,当时真的有苦说不出啊,也是一晚没睡。后面就逐渐开始褪去大厂梦了,看着曾经跟自己交流的牛油,朋友,认识的人,觉得他们技术不太如你,算法刷的没你多,进了大厂,但是这又如何呢?能力强不强不是你了说了,面试官说了算。也逐渐知道,不是你能力好就可以了,还得有运气,运气,运气。这个过程太累了,和自己和解吧,不用非得大厂,找个合适一点的就好,放轻松一点。今天有点心事睡不着,闲着想写一些自己的面试过程,勿喷。附上一张面试的情况,公司就不方便透露了。
怒卷的斯科特:八分运气两分实力
点赞 评论 收藏
分享
评论
14
99
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务