算法
程序员的修养
好好学习
展开
-
python三方库--shasum
shasum 是一个计算 SHA 哈希值的命令行工具。它可以用于计算文件或数据的 SHA-1、SHA-256、SHA-384、SHA-512 哈希值,以验证文件完整性和安全性。SHA(Secure Hash Algorithm,安全散列算法)是一种广泛使用的密码学哈希函数,用于将数据转换为固定长度的二进制字符串表示形式。其生成的哈希值通常用于验证数据完整性和文件的唯一性,以检测数据是否被篡改或更改过shasum [ 选项 ] 文件名。原创 2023-07-17 15:28:44 · 647 阅读 · 0 评论 -
常用的查找算法
顺序查找简介顺序查找适合于存储结构为顺序存储或链接存储的线性表。基本思想从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k相比较,若相等则表示查找成功;若扫描结束仍没有找到关键字等于k的结点,表示查找失败。代码//顺序查找int SequenceSearch(int a[], int value, int n){ int i; for(i=0; i<n; i++) if(a[i]==value) return原创 2021-07-12 09:25:35 · 131 阅读 · 0 评论 -
希尔排序--算法
希尔排序#####介绍希尔排序(Shell Sort)是针对直接插入排序算法的改进,又称缩小增量排序,因 DL.Shell 于 1959 年提出而得名。它通过比较相距一定间隔的元素来进行,各趟比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止。#####思想对于n个待排序的数列,取一个小于n的整数gap(gap被称为步长)将待排序元素分成若干个组子序列,所有距离为gap的倍数的记录放在同一个组中;然后,对各组内的元素进行直接插入排序。 这一趟排序完成之后,每一个组的元素都是有原创 2021-06-17 09:08:56 · 90 阅读 · 0 评论 -
归并排序--算法
思路归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而**治(conquer)**的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。分:将无序序列分成有序的序列治:将有效的序列进行合并代码如下//合并有序数组void merge(int arr【】,int L,int M,int R){ int leftsize=M-L;原创 2021-06-16 09:57:41 · 124 阅读 · 0 评论 -
有效的字母异位词
有效的字母异位词题目给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false说明:你可以假设字符串只包含小写字母分析1、什么是字母异位词如果两个字符串长度相等,各个字母的个数相等,只是顺序不同,那么这两个词是字母异位词2、如果两个字母长度不同,直接返回falseif(s.length原创 2021-04-14 10:05:35 · 588 阅读 · 0 评论 -
删除链表中的倒数第N个节点
删除链表中的倒数第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]直接法struct ListNode* removeNthFromEnd(struct ListNode* head, int n){原创 2021-04-13 09:41:42 · 94 阅读 · 0 评论 -
分割链表
分割链表给定一个头结点为 root 的链表, 编写一个函数以将链表分隔为 k 个连续的部分。每部分的长度应该尽可能的相等: 任意两部分的长度差距不能超过 1,也就是说可能有些部分为 null。这k个部分应该按照在链表中出现的顺序进行输出,并且排在前面的部分的长度应该大于或等于后面的长度。返回一个符合上述规则的链表的列表。举例: 1->2->3->4, k = 5 // 5 结果 [ [1], [2], [3], [4], null ]示例 1:输入: root = [1,原创 2021-04-09 08:56:03 · 306 阅读 · 0 评论 -
斐波那契数列
斐波那契数列(Fibonacci sequence),又称黄金分割数列,以兔子繁殖为例子而引入,每对兔子每月繁殖一对子兔,而子兔在出生后第二个月就有生殖能力,试问一对兔子一年能繁殖多少对兔子?可以这样思考:第一个月后即第二个月时,1对兔子变成了两对兔子,其中一对是它本身,另一对是它生下的幼兔. 第三个月时两对兔子变成了三对,其中一对是最初的一对,另一对是它刚生下来的幼兔,第三对是幼兔长成的大兔子. 第四个月时,三对兔子变成了五对,第五个月时,五对兔子变成了八对,按此方法推算,第六个月是13对兔子,第七个月是原创 2020-09-09 10:46:40 · 674 阅读 · 0 评论 -
leetcode--从尾到头打印链表
题目输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000代码/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; *//** * Note: The returned array原创 2020-08-06 12:01:04 · 171 阅读 · 0 评论 -
leetcode--字符串替换空格
字符串替换空格请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”限制:0 <= s 的长度 <= 10000打码实现char* replaceSpace(char* s){ //初始化字符串数组 char *str = calloc( strlen(s)*3+1,sizeof(char)); //获取输入的字符串,如果为空格则在字符串数组中存入%20 in原创 2020-08-05 10:27:07 · 439 阅读 · 0 评论 -
leetcode刷题--二维数组中的查找
题目在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30]]给定 target = 5,返回 true。给定 ta原创 2020-08-04 10:27:31 · 279 阅读 · 1 评论 -
leetCode刷题记录--找出数组中重复的数字
找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3小白的解答:两个for循环,思路是每次从数组中取出一个元素,然后一次和剩下的元素做对比。超出时间限制int findRepeatNumber(int* nums, int numsSize){ int re原创 2020-07-31 14:09:50 · 851 阅读 · 1 评论 -
单链表功能大全
单链表很全的例子,增加,删除,排序,都有了#include <stdio.h> #include <stdlib.h> typedef struct node { int nDate; struct node *pstnext; }Node; //链表输出 void output(Node *head) { Node *p = head->pstnext转载 2017-02-19 13:53:36 · 387 阅读 · 0 评论 -
OC实现的各种简单常见的排序算法
//直接插入排序.每步将一个待排序的记录按其关键字的大小插到前面已经排序的序列中的适当位置,直到全部记录插入完毕为止。-(void)initDirectChaSort:(NSMutableArray *)array{ NSInteger j=0; for (NSInteger i=0; i<[array count]-1; i++) { if ([[array ob转载 2017-02-21 10:39:01 · 405 阅读 · 0 评论 -
常用排序算法
1、交换排序-冒泡排序 (1)思想:从待排数据自上向下对相邻的两个元素进行比较,必要时交换,使大的元素下沉,小的元素上冒。 第一次比较时,将待排数据中的最大的元素,沉到最低;第二次比较将第二大元素沉到最低,…… 所以如果有n个元素,进行n-1次排序;对于第i次排序,内部需要交换的次数为n-i-1; (2)代码//冒泡排序void bubbleSort(int a[], int n){原创 2017-02-23 10:13:28 · 207 阅读 · 0 评论 -
二分查找
(1)要求:必须采取顺序存储结构,元素必须按关键子大小有序 (2)思想:首先将表中间位置的关键字与查找的关键字比较,如果两者相等则查找成功,否则将记录按中间的元素分成前后两个表,如果要查找的关键字大于中间的关键字,则在后面的表中查找,如果要查找的关键字小于中间的关键字,则在前面的表中查找。 (3)代码 int BinSearch(int Array[],int SizeOfArr原创 2017-02-25 08:30:47 · 203 阅读 · 0 评论 -
查找算法
1.顺序查找 查找成功时的平均查找长度为:(假设每个数据元素的概率相等) ASL = 1/n(1+2+3+…+n) = (n+1)/2 ;当查找不成功时,需要n+1次比较,时间复杂度为O(n);所以, 顺序查找的时间复杂度为O(n ) 。//顺序查找int SequenceSearch(int a[], int value, int n){ int i; for(i=0; i<转载 2017-03-17 17:44:06 · 413 阅读 · 0 评论 -
二叉树的基本操作(1)
转载文章,仅供参考 对于树的操作,最基本的创建、遍历、求树高、节点数等。代码上传至 https://github.com/chenyufeng1991/BinaryTree 。 (1)节点的定义typedef struct BTNode{ int data; struct BTNode *lChild; struct BTNode *rChild; }Bi转载 2017-03-21 14:47:20 · 275 阅读 · 0 评论 -
二叉树的非递归的三种遍历
非递归的方式来实现树的先序、中序、后序遍历。实现代码上传至 https://github.com/chenyufeng1991/TraverseBinaryTreeNoRecursion 。 (1)非递归实现先序遍历 在非递归的三种遍历中,先序遍历是最简单的。思路如下:首先把根节点入栈,并且在根节点出栈的时候访问根节点;同时判断根节点的右子树是否为空,若不为空,则右孩子入栈;判断根节点的左孩子转载 2017-03-21 16:37:48 · 384 阅读 · 0 评论 -
二叉查找树
1、二叉查找树二叉查找树(BinarySearch Tree,也叫二叉搜索树,或称二叉排序树Binary Sort Tree)或者是一棵空树,或者是具有下列性质的二叉树:(1)、若它的左子树不为空,则左子树上所有结点的值均小于它的根结点的值;(2)、若它的右子树不为空,则右子树上所有结点的值均大于它的根结点的值;(3)、它的左、右子树也分别为二叉查找树。2、二叉查找树的基本运算 #include <转载 2017-03-21 16:43:30 · 365 阅读 · 0 评论 -
归并排序
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。//将有序数组a[]和b[]合并到c[]中 void MemeryArra转载 2017-02-27 08:43:05 · 175 阅读 · 0 评论 -
算法
(1)排序算法 快速排序 合并排序 堆排序 选择排序 基数排序 冒泡排序 插入排序 希尔排序 链表排序 (2)数据结构 线性队列 线性堆栈 单向链表 双向链表转载 2016-10-26 15:07:48 · 212 阅读 · 0 评论