编程笔面试题
一些见过的面试编程题,做一下总结
HDD615
努力搬砖的技术人
展开
-
反转链表2(区间反转)
反转链表2(区间反转)原创 2022-09-15 08:25:34 · 196 阅读 · 0 评论 -
合并链表(C++)
合并链表原创 2022-08-11 09:24:04 · 1342 阅读 · 0 评论 -
力扣347:前K个高频元素
题目描述给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。举例# 例1输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]# 例2输入: nums = [1], k = 1输出: [1]解题思路1、首先统计数组中每个元素出现的频率,可以使用 map2、然后将元素和它对应的频率,以键值对的形式 添加到 优先队列中(小根堆),然后保留优先队列中的后 k 个元素3、这时候优先队列中的 k 个元素原创 2022-02-26 19:27:49 · 221 阅读 · 0 评论 -
素数个数(C++)
题目描述牛牛现在有一个包含 n 个正整数的数组 a ,牛牛可以将其中的每个数 a[i] 都拆成若干个和为 a[i] 的正整数,牛牛想知道拆后(也可以一个数都不拆)这个数组最多能有多少个素数。解题思路理解:就是一个数组有 n 个元素,每个元素可以拆分成几个数的和(也可以不拆),并且这几个数里面包含几个素数举例:1 不能拆分,1 不是素数2 不能拆分,2 是素数3 拆分 1 + 2,包含一个素数4 拆分 2 + 2,包含两个素数5 拆分 2 + 3 或者 2 + 2 + 1,都是包含两个素数原创 2022-02-25 18:41:24 · 3927 阅读 · 2 评论 -
力扣1:两数之和
题目描述给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。举例# 例1输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] # 例2输入:nums = [3,2,4], targ原创 2022-02-09 09:46:53 · 102 阅读 · 0 评论 -
力扣15:三数之和
代码(C++)#include <iostream>#include <vector>#include <algorithm>using namespace std;vector<vector<int>> threeSum(vector<int> nums) { vector<vector<int>> results; sort(nums.begin(), nums.end());原创 2022-02-08 16:52:07 · 101 阅读 · 0 评论 -
力扣202:快乐数
题目描述编写一个算法来判断一个数 n 是不是快乐数。快乐数定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1,那么这个数就是快乐数。如果 n 是 快乐数 就返回 true ;不是,则返回 false 。例子# 例1输入:n = 19输出:true解释:12 + 92 = 8282 + 22 = 6862 + 82 = 10012 + 02 + 02 = 1#原创 2022-02-08 09:19:04 · 352 阅读 · 0 评论 -
力扣349:两个数组的交集
题目描述给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。例子# 例1输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]# 例2输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]解释:[4,9] 也是可通过的解题思路使用一种哈希数据结构:unordered_set注意:输出结果中的每个元素一定是唯一的,也就是说输出的结果原创 2022-02-06 16:13:17 · 385 阅读 · 0 评论 -
力扣242:有效的字母异位词
题目描述给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。例子# 例1输入: s = "anagram", t = "nagaram"输出: true# 例2输入: s = "rat", t = "car"输出: false说明: 你可以假设字符串只包含小写字母。解题思路首先定义一个包含 26个 元素的数组,元素值为全0遍历字符串 s,然后每一个元素,给数组对应位置原创 2022-02-06 09:04:35 · 86 阅读 · 0 评论 -
力扣面试题:链表相交
题目描述给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。图示两个链表在节点 c1 开始相交:题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结构 。举例例1输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Intersected at '8'原创 2022-01-26 11:32:35 · 202 阅读 · 0 评论 -
力扣19:删除链表的倒数第 N 个结点
题目描述给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。例子# 例1输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]# 例2输入:head = [1], n = 1输出:[]# 例3输入:head = [1,2], n = 1输出:[1]解题思路使用双指针法首先定义一个虚拟头结点,然后定义两个指针,fast指针 和 slow指针均指向虚拟头结点然后,fast指针先往前移 n + 1然后,slow指针和 fast指针同原创 2022-01-24 21:04:05 · 788 阅读 · 0 评论 -
力扣24:两两交换链表中的节点
题目描述给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。例子# 例1输入:head = [1,2,3,4]输出:[2,1,4,3]# 例2输入:head = []输出:[]# 例3输入:head = [1]输出:[1]这里建议画图来思考,不然太容易混乱如例1所示,首先我们定义一个虚拟头节点(需要定义两个临时变量,存储节点)第一步,将虚拟头节点的指向,指向实际的第二个节点第二步,实际的第二个节点,原创 2022-01-23 21:41:27 · 166 阅读 · 0 评论 -
力扣209:长度最小的子数组
题目描述在一个正整数数组 nums 中找到最小长度的连续子数组,使子数组元素之和大于或等于 s,返回满足条件的连续子数组的最小长度,如果没有找到则返回0。例子输入:s = 12, nums = [4, 6, 2, 4, 9, 8, 7]输出:2代码def minsubarray(s, nums): res = float("inf") # 定义一个无穷小的数,记录返回值 sum_subarray = 0 # 子序列和 index = 0 # 子序列起始下标原创 2022-01-11 13:58:52 · 207 阅读 · 0 评论 -
力扣59:螺旋矩阵2
题目描述给出一个正整数 n,按从外向内的螺旋顺序打印 1 到 n2 的所有数值示例输入:3输出: [ [1, 2, 3], [8, 9, 4], [7, 6, 5] ]代码def Matrixclass(n): matrix = [[-1]*n for _ in range(n)] # 定义边界 left, right, up, down = 0, n-1, 0, n-1 # 定义数字 number = 1 # 打印原创 2022-01-11 13:42:48 · 213 阅读 · 0 评论 -
力扣977:有序数组的平方
题目描述给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。举例示例 1: 输入:nums = [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为 [16,1,0,9,100],排序后,数组变为 [0,1,9,16,100]示例 2: 输入:nums = [-7,-3,2,3,11] 输出:[4,9,9,49,121]代码(Python)def sort_squares(nums): n原创 2022-01-10 10:54:28 · 110 阅读 · 0 评论 -
力扣27:移除元素
题目描述:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。举例输入:nums = [3,2,2,3], val = 3输出:2, nums = [2,2]解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长原创 2022-01-10 10:16:26 · 419 阅读 · 0 评论 -
复制链表(Python)
复制链表# 定义结点class Node(): def __init__(self,item): self.val = item self.next = Nonedef copyList(head): cur = head # 当前节点 dum = pre = Node(0) # 复制新链表的起点 while cur: node = Node(cur.val) # 复制链表的第一个节点 pre.next = node # 让新链表的起点指向 第一个节点 cur = cur原创 2021-12-04 19:37:58 · 1057 阅读 · 2 评论 -
剑指Offer 20.表示数值的字符串(Python)
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。数值(按顺序)可以分成以下几个部分: 若干空格 一个 小数 或者 整数 (可选)一个 'e' 或 'E' ,后面跟着一个 整数 若干空格小数(按顺序)可以分成以下几个部分: (可选)一个符号字符('+' 或 '-') 下述格式之一: 至少一位数字,后面跟着一个点 '.' 至少一位数字,后面跟着一个点 '.' ,后面再跟着至少一位数字 一个点 '.' ,后面跟原创 2021-12-02 20:17:36 · 152 阅读 · 0 评论 -
合并两个有序数组(Python)
题目:给出一个有序的整数数组 A 和有序的整数数组 B ,请将数组 B 合并到数组 A 中,变成一个有序的升序数组注意:1.保证 A 数组有足够的空间存放 B 数组的元素, A 和 B 中初始的元素数目分别为 m 和 n,A的数组空间大小为 m+n2.不要返回合并的数组,将数组 B 的数据合并到 A 里面就好了3. A 数组在[0,m-1]的范围也是有序的示例1输入:[4,5,6],3,[1,2,3],3返回值:[1,2,3,4,5,6]说明:A数组为[4,5,6],B数组为[1,2,3原创 2021-12-01 13:38:50 · 2878 阅读 · 0 评论 -
剑指Offer 30.包含 min 函数的栈(Python)
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、top、push 及 pop 的时间复杂度都是 O(1)。# 例子:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.min(); --> 返回 -3minStack.pop();minStack.top(); --> 返回 0mi原创 2021-11-30 11:47:27 · 790 阅读 · 0 评论 -
剑指Offer 24.反转链表
反转链表例如:输入:1 -> 2 -> 3 -> 4 -> 5 -> None输出:5 -> 4 -> 3 -> 2 -> 1 -> None其实就是设置一个新的节点(NULL),然后定义两个指针 pre 和 cur ,pre 指向新的节点;cur 指向头节点然后依次往后改变指针的指向代码(Python)# 反转链表class Node(): def __init__(self,item=None):原创 2021-11-30 10:36:14 · 612 阅读 · 0 评论 -
剑指Offer 09.用两个栈实现队列(Python)
题目描述用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )例1:输入:["CQueue","appendTail","deleteHead","deleteHead"][[],[3],[],[]]输出:[null,null,3,-1]例2:输入:["CQueue","deleteHead","appendTail","原创 2021-11-27 10:15:53 · 87 阅读 · 0 评论 -
剑指Offer 06.从尾到头打印链表(Python)
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。例如:输入:head = [1,3,2]输出:[2,3,1]直接看代码:class Node(object): # 定义一个链表节点 def __init__(self,item): self.val = item self.next = Nonea = Node(1)b = Node(2)c = Node(3)a.next = bb.next = cdef reverse原创 2021-11-25 19:27:43 · 366 阅读 · 0 评论 -
反转字符串(Python)
反转字符串写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)举例:"""input: "abcd"output: "dcba""""上代码:第一种方法:def Solve(s): return s[::-1]if __name__ == "__main__": s = input("请输入:") result = Solve(s) print(result)下面是代码结果:"""input: abcdoutput: dcba"原创 2021-11-25 08:33:59 · 950 阅读 · 0 评论 -
二分查找(牛客网)
题目:请实现有重复数字的升序数组的二分查找给定一个元素有序的(升序)长度为n的整型数组 nums 和一个目标值 target,写一个函数搜索 nums 中的第一个出现的target,如果目标值存在返回下标,否则返回 -1举例:例1:输入:[1,2,4,4,5],4返回值:2说明:从左到右,查找到第1个为4的,下标为2,返回2例2:输入:[1,2,4,4,5],3返回值:-1例3:输入:[1,1,1,1,1],1返回值:0考察二分查找,直接上代码:def search(nu原创 2021-11-22 14:20:55 · 431 阅读 · 0 评论 -
剑指Offer 05.替换空格(Python)
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。1、使用字符串内置函数s = "We Are Happy"s = s.replace(" ","%20")print(s)# result: We%20Are%20Happy2、自己定义函数这里需要分析一下,字符串是不可变类型数据,不可以使用s[i] = "%20" # 这种方法是不可以使用的必须将其转换至可变数据类型,才原创 2021-11-14 17:14:46 · 666 阅读 · 0 评论 -
字符串转浮点数(Python)
字符串转浮点数(Python)example:字符串形式的"123.789" 转换成 浮点数形式的 123.789我在这里使用了map和reduce上代码:from functools import reducedef str2float(s): digitals = {"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9} b = 0 # 小数位数 for i in range(len(s)): if s[i] ==原创 2021-11-13 09:26:47 · 2858 阅读 · 0 评论 -
杨辉三角形(Python)
杨辉三角形的规则就是每行的第一个数字和最后一个数字为1之外,其余每个数字等于上一行对应两个数字的和。1、使用二维数组实现def triangle(row): result = [] for i in range(row): if i == 0: # 第一行 result.append([1]) elif i == 1: # 第二行 result.append([1,1]) else: y = [] for j in range(i+1): # 第i行有i+1个数原创 2021-11-12 20:33:04 · 4029 阅读 · 0 评论