数据结构与算法
记录学习数据结构的点点滴滴
FranzLiszt1847
大道如青天,我独不得出
展开
-
浅析散列函数的构造方法与解决散列冲突的方法
浅析散列函数的构造方法与解决散列冲突的方法散列函数的构造方法数字分析法平方取中法平方取中法测试测例1测例2折叠法折叠法测试测例1测例2随机数法随机数法测试测例1除留余数法解决散列冲突的方法开放定址法公共溢出区法以开放定地法为基础的全部代码全部代码测试效果以公共溢出区法为基础的全部代码全部代码测试效果尾言散列函数的构造方法数字分析法数字分析法常用于手机号码、身份证号码、订单编号等位数较多的关键字,对于身份证号码,前六位为地址码,中间八位为出生日期码,后三位为顺序码,最后一位为校验码;世间不缺乏生活地方、原创 2022-01-23 21:04:07 · 935 阅读 · 3 评论 -
数据结构与算法每日一题——矩阵置零
矩阵置零题目要求示例解法题目要求给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。示例示例一:输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]输出:[[1,0,1],[0,0,0],[1,0,1]]示例二:输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]解法第一步:在二维数组中找出为0的元素,并用一维数组存取该原创 2021-08-29 16:46:55 · 511 阅读 · 2 评论 -
数据结构与算法每日一题——杨辉三角形
杨辉三角形题目要求解题思路代码题目要求给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。解题思路如图分析,下标列为0的与列和行相等的元素皆为1。非1元素为左上角元素加右上角元素: ret[i][j] = ret[i-1][j-1] + ret[i-1][j];代码int** generate(int numRows, int* returnSize, int** returnColumnSizes){原创 2021-08-29 16:57:49 · 449 阅读 · 1 评论 -
数据结构与算法每日一题——求两个数组的交集
求两个数组的交集题目要求示例解法题目要求给定两个数组,编写一个函数来计算它们的交集。示例示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2,2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[4,9]解法首先对两个数组进行排序,然后对两个数组进行比较,数值小的一方狭义一位,如果相等则表示寻求到相同的子集,插入至需要返回的数组中。两个数字的下标同时下移一位,为了避免同一数组内出现多个相同的的元素,防止原创 2021-08-28 17:36:45 · 615 阅读 · 1 评论 -
数据结构与算法每日一题——合并两个有序数组
合并两个有序数组题目要求示例解法题目要求题目要求:给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n原创 2021-08-27 16:47:35 · 508 阅读 · 2 评论 -
数据结构与算法每日一题——算出数组内最大自序之和
算出数组内最大自序之和题目要求示例代码题目要求给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例示例一:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例二:输入:nums = [1]输出:1代码利用动态规划的思想,我们首先要确定的是我们所求的是0<i<n-1(因为数组从下标0开始,故减一)区间内最大的子序之和。则利用sum获取当原创 2021-08-23 12:30:02 · 267 阅读 · 1 评论 -
数据结构与算法每日一题——判断数组内是否存在重复元素
判断数组内是否存在重复元素解法一解法二示例1:输入: [1,2]输出: false示例2:输入: [1,2,3,1]输出: true示例3:输入: [1,2,3,3]输出: true解法一利用遍历法,将数组内所有相邻的元素进行比较,从而得出结果bool containsDuplicate(int* nums, int numsSize){for(int i = 0; i< numsSize; i++) for(int j = i+1;j < numsSize;j++)原创 2021-08-23 12:14:05 · 376 阅读 · 1 评论 -
线性单向链表的插入、删除、合并
线性单向链表的插入、删除、合并前言插入删除合并前言typedef struct LNode{ElemType data; //数据域struct LNode *next; //指针域}LNode,*LinkList;插入 如图所示总共分为四步:1.找到插入的位置的前一位置2.设置要插入的节点的数据域3.与其前驱节点相连接4.与其后继节点相连接Status ListInsert(LinkList &list,int i, ElemType e){p = list;原创 2021-06-15 17:49:15 · 276 阅读 · 1 评论 -
顺序线性表的插入、删除、合并
顺序线性表的插入、删除、合并前言插入删除合并前言#define LISTSIZE 100 //线性表初始分配的储存空间大小#define LISTINCREASEDSIZE 10 //线性表增加的储存空间大小typedef struct{ElemType * elem;int length; //长度int listsize; //分配的存储空间大小} List;插入Status ListInsert (List & list, int i, ElemType e) {//原创 2021-06-15 17:12:16 · 492 阅读 · 1 评论