Go语言中文网 为您找到相关结果 10

使用Golang实现的快速排序

一、舞动的快速排序 在实现排序算法前,先让我们来欣赏一段关于快速排序的视频,本段视频展示了快速排序的原理,如果没有看懂,请看完本文后再回头来看一下,应该就明白了吧。 O(∩_∩)O~ 二、快速排序实现 2.1 快速排序基础版 通过下面一组数据,将最左边的数设定为轴,并记录其值为 s。 (注意:*表示要交换的数,[]表示轴) [41] 24 76* 11 45 64 21 69 19 36* [41] 24 36 11 45* 64 21 69 19* 76 [41] 24 36 11 19 64* 21* 69 45 76 [41] 24 36 11 19 21 64 69 45 76 21 24 36 11 19 [41] 64 69 45 76 回圈处理: 令索引 i 从数列左方往右方找...阅读全文

博文 2014-10-09 16:00:06 u012797015

golang循环递增数组查找值

循环递增数组查找值 golang1.实现要求 在循环递增数组中查找某个值2.实现方法使用二分法实现查找使用定义循环递增数组是指数组收尾项链能够形成递增的环eg:[4,5,6,7,8,9,1,2,3]严格单调数组 数组从左往右一直增长eg:[1,2,3,4,5,6]实现思路将数组根据二分法进行分割将数组通过中间值分割后得到两个数组 一个为低调递增数组 另一个为循环递增数组 通过查找值比较进而确定查找值得范围在那个数组中 一次循环执行这一步得到是否能够查找值代...阅读全文

博文 2017-07-04 16:06:15 我是不是小明

01背包问题(完全背包,部分背包)golang实现

很经典的动态规划问题,具体思路这里就不列出了,网上太多资料了。想要详细理解的话可以去看背包九讲 这里分别列出,01背包,完全背包,部分背包 golang实现。 01背包 给定 n 种物品和一个容量为 C 的背包,物品 i 的重量是 wi,其价值为 vi 。 应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大? 从左往右,从上往下填表(example: 5表示重量,12表示价值) 1.png 代码and注释 dp[i][j] = max(dp[i-1][j], nums[i][1]+dp[i-1][j-nums[i][0]]) 仔细想清楚这一行 backpack.png 完全背包 给定 n 种物品和一个容量为 C 的背包,物品 i 的重量是 wi,其价值为 vi,每个物品都有无限多件...阅读全文

博文 2017-10-24 02:04:49 Tibbersshao

用Golang将图片转化成ASCII码

用Golang将图片转化成ASCII码 在开始之前先看看最终效果: 项目地址在这里:https://github.com/qeesung/im... , 欢迎star 我们都知道图片是通过一个像素点矩阵组成的,每一个像素点都是有四个值,分别是R,G,B,A组成,其中RGB就是红色,绿区,蓝色,简称三原色,在计算机中取值从0-255,而A则是颜色的透明度,取值0.0-1.0。 我们现在要做的就是将一个彩色的图片转化成一个由ASCII组成的图片,换句话说,就是将RGBA像素点的矩阵转化成一个由字符组成的矩阵,必要的时候再给字符加上颜色就可以啦。 (R, G, B, A) (R, G, B, A) (R, G, B, A) char1, char2, char3 (R, G, B, A) (R, ...阅读全文

博文 2018-10-21 17:34:39 qeesung

LeetCode Practice(一)

第一题:计算二进制数两个1之间的间距 题目: 我的思路 英文翻译过来就是把数字化成二进制,计算两个1之间的最大间距。1000,1100,1010的最大间距分别是0,1,2.以此类推 我的第一反应是大学数字逻辑课上的一个知识点,十进制转化为二进制——短除法! 也就是说,在接收到输入的十进制数之后,利用短除法,转化为二进制数。转化的过程进行间距的计算 虽然短除法先计算出来的是二进制低位的数,但是1010的间距从左往右数和从右往左数,结果是等价的 实现如下: func BiggestGap(n int) int { distance,temp := 0,0 bValue := 0 for n,bValue = bDiv(n);bValue==0; { n,bValue = bDiv(n) } fo...阅读全文

博文 2019-06-04 10:32:43 Mandelbrot_Kobe

(六) ZigZag Convert

题目 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L C I R E T O E S I I G E D H N 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。 请你实现这个将字符串进行指定行数变换的函数: string convert(string s, int numRows); 示例 1: 输入: s = "LEETCODEISHIRING", numRows = 3 输出: "LCIRETOESIIGEDHN" 示例 2: 输入: s = "LEETCODEISHIRING", numRows = 4 输出: "LD...阅读全文

博文 2019-02-16 08:34:44 L白水飘萍

LeetCode-6-Z 字形变换

题目描述 Z 字形变换 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L C I R E T O E S I I G E D H N 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。 请你实现这个将字符串进行指定行数变换的函数: string convert(string s, int numRows); 示例 1: 输入: s = "LEETCODEISHIRING", numRows = 3 输出: "LCIRETOESIIGEDHN" 示例 2: 输入: s = "LEETCODEISHIRING", numRows = ...阅读全文

博文 2019-07-12 21:32:44 monigo

golang快速排序改进版

package main import ( "fmt" "math/rand" ) // 如果数量小于13直接用插入排序 func SortForMerge(arr []int, left, right int) { for i:=left; i<=right; i++ { temp := arr[i] var j int for j=i; j>left && temp < arr[j-1]; j-- { arr[j] = arr[j-1] } arr[j] = temp } } func swap(arr []int,i, j int) { // 数据交换 arr[i], arr[j] = arr[j], arr[i] } func QuickSortX(arr []int, left, ...阅读全文

博文 2019-08-16 18:02:42 发条家的橙子

golang 选择排序算法

选择排序 package main import "fmt" func main() { arr := []int{7, 13, 4, 5, 8, 1, 11, 9} fmt.Println("排序前:", arr) length := len(arr) for i := 0; i < length; i++ { for j := i+1; j < length; j++ { if arr[i] > arr[j] { arr[i], arr[j] = arr[j], arr[i] } } } fmt.Println("排序前:",arr) } 选择排序的时间复杂度 首先,为了在第 1 轮找到最小的数字,需要从左往右确认数列中的数字,只要查询 n 个数 字即可。在接下来的第 2 轮中,需要从 ...阅读全文

博文 2020-01-21 17:32:41 程序小白菜

数据结构和算法(Golang实现)(27)查找算法-二叉查找树

二叉查找树 二叉查找树,又叫二叉排序树,二叉搜索树,是一种有特定规则的二叉树,定义如下: 它是一颗二叉树,或者是空树。 左子树所有节点的值都小于它的根节点,右子树所有节点的值都大于它的根节点。 左右子树也是一颗二叉查找树。 二叉查找树的特点是,一直往左儿子往下找左儿子,可以找到最小的元素,一直往右儿子找右儿子,可以找到最大的元素。 看起来,我们可以用它来实现元素排序,可是我们却使用了二叉堆来实现了堆排序,因为二叉查找树不保证是一个平衡的二叉树,最坏情况下二叉查找树会退化成一个链表,也就是所有节点都没有左子树或者没有右子树,树的层次太深导致排序性能太差。 使用二分查找,可以很快在一颗二叉查找树中找到我们需要的值。 我们来分析二叉查找树添加,删除,查找元素的方法。 一、添加元素 以下是一个二叉查...阅读全文

博文 2020-04-07 16:32:51 陈星星