编程题目
winfield821
这个作者很懒,什么都没留下…
展开
-
【算法题】逐段反转链表
输入一个链表和逐段反转的长度,输出反转的结果。最后一段如果达不到给定长度,不反转。示例:输入链表“0->1->2->3->4->5->6->7”和长度 3,输出链表“2->1->0->5->4->3->6->7”。思路:从头开始逐段反转。// Package mainpackage mainimport "fmt"type Node struct { Val int Next *Node原创 2022-05-30 00:32:19 · 135 阅读 · 0 评论 -
【算法题】堆排序
首先要会构造堆。全部代码如下// Package mainpackage mainimport "fmt"// heapSort 堆排序func heapSort(arr []int) { makeHeap(arr) for l := len(arr) - 1; l > 0; { arr[0], arr[l] = arr[l], arr[0] l-- siftDown(arr, 0, l) }}// makeHeap 构造堆(这里是最小堆)func make原创 2022-05-02 18:40:14 · 430 阅读 · 0 评论 -
【算法题】图的 DFS 和 BFS
package mainimport "fmt"type Node struct { data string next []*Node // 代表每个节点能够访问的结点,比如 v0 的 next 为 v1,v2,v3}var m map[string]boolfunc DFS(node *Node) { if node == nil || m[node.data] { return } fmt.Print(node.data, " ") m[node.data] ....原创 2022-04-04 00:09:27 · 339 阅读 · 0 评论 -
海量数据面试题整理
核心思想:分治法+外排序,或者位处理1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?方案1可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个小文件中。这样每个小文件的大约为300M。遍历文件b,采...原创 2022-03-27 14:04:38 · 159 阅读 · 0 评论 -
动态规划和递归的区别
动态规划和递归的区别原创 2022-03-20 23:32:30 · 709 阅读 · 0 评论 -
【算法题】非负 int 型数据,二进制格式最高位 1 的位置
比如对于 6,输出应该是 3(6 的二进制表示是 110);对于 1956,输出应该是 11(1956 的二进制表示是 11110100100)。1、O(n) 复杂度func IdxOfHighestOne(value int) int { var res = 0 for value != 0 { res++ value = value >> 1 } return res}2、O(logn) 复杂度func I原创 2020-07-20 14:17:57 · 434 阅读 · 0 评论 -
【算法题】数组中重复的数字
题目描述在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次。请找出数组中任意一个重复的数字,例如如果输入长度为 7 的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字 2。package mainimport "fmt"func duplicate(nums []int) (bool, int) { for i := 0; i < len(nums); i++ {原创 2020-06-23 14:41:20 · 170 阅读 · 0 评论 -
【算法题】tuple 保序的全排列
package mainimport ( "fmt")func combinations(inputs [][]string) []string { var res []string for i, input := range inputs { subCombinations := combinations(append(inputs[:i], inputs[i+1:]...)) first := input[0] secon...原创 2020-06-08 16:44:25 · 260 阅读 · 0 评论 -
【算法题】C++编程,输出二叉树每层最右端节点的数值
例如,对于如下二叉树,应输出8,7,5,4,2。很明显的思路是按层遍历,关键在于如何标记最右端节点。按层遍历常见的写法是将节点放入队列,出列后再将其子节点放入队列,实质上是一层一层放入队列,并且队列中最多只能有相邻的两层节点。那么我们可以用两个队列来存储,将上层节点放入队列一,出队后将其子节点(即下层节点)放入队列二,两个队列交替进行。代码如下:#include#include原创 2016-02-24 14:30:16 · 2331 阅读 · 0 评论 -
【算法题】C++编程,输出给定int数组中的重复元素,元素取值有上限
如题所述,给出数组{1, 3, 4, 1, 5, 6, 4, 3, 2, 1},应该输出1, 4, 3, 1。现给定数组a,其长度为n,其中元素取值上限为max。要求时间复杂度为o(n),空间复杂度尽可能地小。考虑位运算的方法,创建一个char型数组c,保证此数组中元素的总位数(8*x)不小于max,初始值全为char(0)。遍历数组a,将其元素数值作为下标标记c中对应位置。若已被标记,则说明原创 2016-02-24 10:42:57 · 900 阅读 · 0 评论 -
【算法题】MapReduce编程,寻找二度人脉
这是某资讯APP公司的面试题,考察MapReduce的编程思想。 给定一个人脉关系的文件,从中找到二度人脉。比如根据如下的人际关系,A B C D EB E FC GG H I J应输出A FA GC HC IC J 这里假设关系是单向的,比如通过第一行"A B C D",我们认为B是A的好友,但A不是B的好友(原创 2016-03-03 13:48:00 · 1293 阅读 · 0 评论 -
【算法题】判断给定序列是否为正确出栈序列
数1,2,3,...,n按从小到大的顺序入栈,给定一个序列,判断其是否为一个可能的出栈序列。比如n=5,则“1,4,3,5,2”是一个正确的出栈序列,而"5,4,3,1,2"不是。原创 2016-03-02 14:45:14 · 3189 阅读 · 0 评论