数据结构与算法
文章平均质量分 51
哗啦啦啦啦啦
这个作者很懒,什么都没留下…
展开
-
Leetcode力扣刷题
704. 二分查找给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。class Solution { public int search(int[] nums, int target) { if (target < nums[0] || target > nums[nums.length - 1]){ return -1;原创 2022-05-25 08:57:27 · 436 阅读 · 0 评论 -
数据结构-链表
链表常见的基本数据结构有链表、栈、队列、树。链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑结构是通过链表中的指针连接次序实现的。链表是由一系列节点这组成,这些节点不必在内存中相连,每个节点由数据部分Data和链部分Next组成,Next指向下一个节点,这样当添加或删除时,只需要改变相关节点的Next的指向,效率较高。【链表在内存上不连续,字逻辑上连续】栈是限制插入和删除智能在一个位置上进行的表,【后进先出】队列只允许在front端进行删除操作,在原创 2022-04-06 21:01:21 · 569 阅读 · 0 评论 -
力扣905. 按奇偶排序数组
题目描述给定一个非负整数数组 A,返回一个数组,在该数组中, A 的所有偶数元素之后跟着所有奇数元素。你可以返回满足此条件的任何数组作为答案。实现代码1.暴力求解class Solution { public int[] sortArrayByParity(int[] A) { for(int i = 0; i < A.length;i++){ if(A[i] % 2 != 0){ //奇数原创 2021-04-23 20:29:42 · 76 阅读 · 0 评论 -
147. 对链表进行插入排序
题目描述对链表进行插入排序。插入排序算法插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据插入完为止。对链表进行插入排序的具体过程如下。首先判断给定的链表是否为空,若为空,则不需要进行排序,直接返回。创建哑节点 dummyHead,令 dummyHead.next = head。引入哑节点是为了便于在 head 节点之前插入节点。维原创 2021-04-21 21:20:41 · 134 阅读 · 0 评论 -
插入排序
插入排序1 基本介绍插入式排序(Insertion Sorting)属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。其基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。2 插入排序思路图:3 代码实现package zuoye;import java.原创 2021-04-17 20:19:55 · 82 阅读 · 0 评论 -
选择排序
选择排序1 基本介绍选择式排序(Select Sorting)也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的。其基本思想是:第一次从arr[0]~arr[n-1]中选取最小值,与arr[0]交换;第二次从arr[1]~arr[n-1]中选取最小值,与arr[1]交换;第三次从arr[2]~arr[n-1]中选取最小值,与arr[2]交换,…; 第i次从arr[i-1]~arr[n-1]中选取最小值,与arr[i-1]交换,…; 第n-1次从arr原创 2021-04-17 20:16:08 · 63 阅读 · 0 评论 -
冒泡排序
冒泡排序1 基本介绍冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。2 图解分析3 代码实现package zuoye;import java.util.Arrays;public class BubbleSort { public static void main(String[] args) { //原创 2021-04-17 20:11:05 · 53 阅读 · 0 评论 -
kruskal算法
克鲁斯卡尔算法克鲁斯卡尔算法是为了使生成树上边的权值之和达到最小,因此应使生成树中每一条边的权值尽可能小,具体做法:将图中所有边按权值递增顺序排序。先构造一个只包含n个顶点的子图。依次选取权值较小的边,但要求后面选取的边不能与前面选取的边构成回路,若构成回路则放弃该条边,再去选取后面权值较大的边。重复步骤3,在n顶点的图中选购n-1条边即可。代码实现#include<iostream>using namespace std;#define max 32767;//用邻接原创 2021-04-11 17:36:44 · 256 阅读 · 0 评论 -
最小生成树—prime算法
生成树一个连通图的生成树是该连通图的一个极小连同子图,它含有图中全部顶点,和构成一棵树的(n-1)条边。如果在一棵生成树上添加任何一条边,必定构成一个环,因为这条边使得它依附的那两个顶点之间有了第二条路径。一棵有n个顶点的生成树(连通无回路图)有且仅有(n-1)条边,但是,有(n-1)条边的图不一定都是生成树。如果一个图有n个顶点和小于(n-1)条边,则是非连通图;如果它有多于(n-1)条边,则一定有回路。如果图中任意两点都是连通的,那么图被称作连通图。如果此图是有向图,且双向都有路径,则称为强原创 2021-04-11 15:37:18 · 11275 阅读 · 1 评论 -
力扣15—三数之和(JAVA)
题目描述给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。双指针法求解class Solution { public List<List<Integer>> threeSum(int[] nums) { List<List<Integer>> result = new ArrayList<>(); /原创 2021-04-10 20:53:14 · 97 阅读 · 0 评论 -
力扣01—两数之和(JAVA)
题目描述给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。解题方法:暴力法class Solution{ public static int[] method1(int[] nums, int target) { for (int i = 0; i < nums.length; i++) {原创 2021-04-08 19:59:31 · 155 阅读 · 0 评论 -
Huffman编码C实现
赫夫曼树(Huffman Tree),又称最优二叉树,是一类带权路径长度最短的树。假设有n个权值{w1,w2,…,wn},如果构造一棵有n个叶子节点的二叉树,而这n个叶子节点的权值是{w1,w2,…,wn},则所构造出的带权路径长度最小的二叉树就被称为赫夫曼树。树的带权路径长度指树中所有叶子节点到根节点的路径长度与该叶子节点权值的乘积之和,如果在一棵二叉树中共有n个叶子节点,用Wi表示第i个叶子节点的权值,Li表示第i个也叶子节点到根节点的路径长度,则该二叉树的带权路径长度 WPL=W1 x L1 + W原创 2021-04-07 10:50:40 · 243 阅读 · 0 评论 -
后缀表达式计算的代码实现
import java.util.ArrayList;import java.util.List;import java.util.Stack;public class PolandNotation { public static void main(String[] args) { //先定义一个逆波兰表达式 (3+4)×5-6 ===> 3 4 + 5 × 6 - String suffixExpression = "30 4 + 5 * 6 -"原创 2020-10-21 21:01:38 · 657 阅读 · 0 评论 -
栈实现综合计算器代码实现
public class Calculator { public static void main(String[] args) { //完成表达式的运算 String expression = "9800+2*6-2"; //先创建两个栈(数栈和符号栈) ArrayStack2 numStack = new ArrayStack2(10); ArrayStack2 operStack = new ArrayStack2原创 2020-10-21 20:59:50 · 105 阅读 · 0 评论 -
关于栈的代码实现
用数组模拟栈package Stack;import java.util.Scanner;public class ArrayStackDemo { public static void main(String[] args) { //测试栈的基本操作 //(1)先创建一个ArrayStack对象来表示栈 ArrayStack stack = new ArrayStack(4); String key = "";//写一个空串原创 2020-10-21 20:58:03 · 448 阅读 · 0 评论 -
单向环形链表之Josephu问题的实现代码
package LinkeList;public class Josephu { public static void main(String[] args) { //测试环形链表的构建与遍历是否正确 CircleSingleLinkedList circleSingleLinkedList = new CircleSingleLinkedList(); circleSingleLinkedList.addBoy(5);//加入5个小孩节点原创 2020-10-19 21:10:40 · 73 阅读 · 0 评论