【每日一题】合并有序链表

题目 合并两个有序链表,合并之后仍是有序的。 分析 这个题目很简单,类似于合并排序的合并过程。 实现 节点定义 type ListNode struct { Val int Next *ListNode } 单元测试 var mergeOrderListList = [][][]int{ { {1, 2, 3, 4}, {7,8,9}, {1, 2, 3, 4, 7, 8, 9}, },{ {1, 2, 3, 4}, {3,8}, {1, 2, 3, 3, 4, 8

算法
发布于 3年前

【每日一题】我为什么喜欢面试链表反向打印

题目 输入一个单链表链表的头结点,从尾到头打印每个节点的值。 题目很简单但是实现方法却可以有很多种,也能考察人的不同方面的知识。这里实现使用 go 语言。 实现 节点定义 首先说明这里不能使用各语言内置的链表,比如 java 的 LinkedList。这里要求的单链表只能有两个属性不能有其他的属性和方法。 go 语言定义如下 type ListNode struct { Val int Next *ListNode } 堆栈 or 数组 看到这个题目最先想到的就是用堆栈或数组来做,方法就是遍历所有节点放入到数组或堆栈然后再遍历打印。数组就比较简单了,这里写下堆栈的实现。 首先

算法
发布于 3年前

嵌套循环性能

下面有两个函数,猜一下哪一个执行的快 func nestFor1() { a := 0 for i := 0; i < 10000000; i++ { for j := 0; j < 2; j++ { a = a + i a = a + j } } } func nestFor2() { a := 0 for i := 0; i < 2; i++ { for j := 0; j < 10000000; j++ {

算法
发布于 3年前

Go 语言实现算法之冒泡排序

冒泡排序是最基本的排序算法,它的复杂度为O(n²)。 它的实现原理非常简单,就是从头遍历数组,如果第 i 个数比第 i + 1 个数大,那么就交换他们,这样遍历第一次就会让最大的数放到数组末尾,第二遍会把第二大的数放到数组倒数第二的位置,依次类推…… 冒泡排序过程图形表示如下: 那么我们可以实现最基本的冒泡排序如下: func BubbleSort1(list []int) { n := len(list) for i := 0; i < n; i++ { for j := 0; j < n-1; j++ { if list

算法
发布于 3年前
  • 1