数据结构与算法学习
hi168
念念不忘,必有回响
展开
-
二分查找相关习题理解
剑指 Offer 53 - II. 0~n-1中缺失的数字一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。示例 1:输入: [0,1,3]输出: 2示例 2:输入: [0,1,2,3,4,5,6,7,9]输出: 8class Solution { public int missingNumber(int[] nums) { int i = 0, j =原创 2020-08-15 11:32:19 · 279 阅读 · 0 评论 -
键盘输入一个字符串,并且统计其中各种字符出现的次数。
/*题目:键盘输入一个字符串,并且统计其中各种字符出现的次数。种类有:大写字母、小写字母、数字、其他思路:既然用到键盘输入,肯定是Scanner键盘输入的是字符串,那么:String str = sc.next();定义四个变量,分别代表四种字符各自的出现次数。需要对字符串一个字、一个字检查,String–>char[],方法就是toCharArray()遍历char[]...原创 2020-02-03 14:33:31 · 6622 阅读 · 0 评论 -
定义一个方法,把数组[1,2,3]按照指定格式拼接成一个字符串
/*题目:定义一个方法,把数组{1,2,3}按照指定格式拼接成一个字符串。格式参照如下:[word1#word2#word3]。分析:1. 首先准备一个int[]数组,内容是:1、2、32. 定义一个方法,用来将数组变成字符串三要素返回值类型:String方法名称:fromArrayToString参数列表:int[]3. 格式:[word1#word2#word3]用到:...原创 2020-02-03 14:30:45 · 1481 阅读 · 2 评论 -
牛客网下厨房题解
题目描述:牛牛想尝试一些新的料理,每个料理需要一些不同的材料,问完成所有的料理需要准备多少种不同的材料。输入描述:每个输入包含 1 个测试用例。每个测试用例的第 i 行,表示完成第 i 件料理需要哪些材料,各个材料用空格隔开,输入只包含大写英文字母和空格,输入文件不超过 50 行,每一行不超过 50 个字符。输出描述:输出一行一个数字表示完成所有料理需要多少种不同的材料。示例1输入...原创 2019-10-21 20:27:26 · 239 阅读 · 0 评论 -
Leetcode练习集(771,+牛客旧键盘):利用集合来解决问题
771.宝石与石头给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。示例 1:输入: J = “aA”, S = “aAAbbbb”输出: 3示例 2:输入: J = “z”, S =...原创 2019-10-11 22:17:19 · 128 阅读 · 0 评论 -
Leetcode138.复制带随机指针的链表
138.复制带随机指针的链表(运行代码参考于力扣官网第三种答案)给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深拷贝。思路:1.遍历原来的链表并拷贝每一个节点,将拷贝节点放在原来节点的旁边,创造出一个旧节点和新节点交错的链表。如你所见,我们只是用了原来节点的值拷贝出新的节点。原节点 next 指向的都是新创造出来的节点。2...原创 2019-10-11 21:16:01 · 138 阅读 · 0 评论 -
Leetcode有关栈和队列习题
20.有效的括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。225.用队列实现栈使用队列实现栈的下列操作:push(x) – 元素 x 入栈pop() – 移除栈顶元素top() – 获取栈顶元素empty(...原创 2019-09-22 00:18:20 · 356 阅读 · 0 评论 -
优先级队列(堆)
1.二叉树的顺序存储1.1 存储方式使用数组保存二叉树结构,方式即将二叉树用层序遍历方式放入数组中。一般只适合表示完全二叉树,因为非完全二叉树会有空间的浪费。这种方式的主要用法就是堆的表示。1.2 下标关系已知双亲(parent)的下标,则:左孩子(left)下标 = 2 * parent + 1;右孩子(right)下标 = 2 * parent + 2;已知孩子(不区分左右...原创 2019-09-22 21:30:27 · 329 阅读 · 0 评论 -
Leetcode136.只出现一次的数字
136.给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4解法1:class Solution { public int singleNumber(int[]...原创 2019-10-08 22:23:41 · 104 阅读 · 0 评论 -
Leetcode387.字符串中的第一个唯一字符
387.字符串中的第一个唯一字符给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。案例:s = “leetcode”返回 0.s = “loveleetcode”,返回 2.class Solution { public int firstUniqChar(String s) { //建立HashMap,键为Character,值...原创 2019-10-08 22:29:10 · 292 阅读 · 0 评论 -
二叉搜索树
二叉搜索树1.概念二叉搜索树又称二叉排序树,它或者是一棵空树**,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树。2.查找3.插入4.删除设待删除结点为 cur, 待删除结点的双亲结点为 parentcur.left == null1.cur...原创 2019-10-09 19:19:40 · 114 阅读 · 0 评论 -
Leetcode15.三数之和
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[[-1, 0, 1],[-1, -1, 2]]class Solution { ...原创 2019-09-21 22:43:55 · 111 阅读 · 0 评论 -
Java中关于大顶堆的系列操作
IHeap.javapublic interface IHeap { //向下调整 void adjustDown(int root,int len); //初始化建立大顶堆 void initHeap(int[] array); //向上调整,从孩子节点开始调整 void adjustUp(int child); //插入item到堆中...原创 2019-09-21 22:06:23 · 538 阅读 · 0 评论 -
排序算法详解
一.冒泡排序冒泡排序的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大大元素逐渐从前一移向后部,就像水底的气泡向上冒着。import java.util.Arrays;public class BubbleSort1 { public static void main(String[] args) {// 正冒 int[]...原创 2019-07-19 16:10:29 · 430 阅读 · 0 评论 -
查找
——引入:常用的查找算法:顺序(线性)查找、二分查找(折半查找)、斐波那契查找、哈希表的查找一.顺序查找二.二分查找二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。1.二分查找的思路分析:1>首先确定该数组中间的下标,mid=(left+rigth)/2;2>然后让...原创 2019-07-20 02:41:14 · 113 阅读 · 0 评论 -
线性表——顺序表和链表(详解及应用)
一.单向链表1.链表是以节点的方式来存储(链式存储)。每个结点包含data域,next域:指向下一个节点。链表的各个节点不一定是连续存放。链表分为带头结点的和没有头结点的链表,这个根据实际的需求来去确定。应用实例:使用带头结点的单向链表实现水浒英雄排行榜管理。1>完成对英雄人物的增删改查操作,2>第一种方法在添加英雄时,直接添加到链表的尾部,3>第二种方式在添加英...原创 2019-07-21 17:42:28 · 366 阅读 · 0 评论 -
辗转相除法和更相减损法求两个正整数的最大公约数
整理自程序员小灰的漫画算法一.辗转相除法(欧几里得算法)定理:两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数。例如:10和25,25除以10商2余5,那么10和25的最大公约数,等同于10和25的最大公约数。//方法入口public class TestDemo { public static int getGreatestCommonDi...原创 2019-09-04 19:44:16 · 715 阅读 · 0 评论 -
leetcode链表相关习题
1.移出链表元素:删除链表中等于给定值 val 的所有节点。输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5/** * Definition for singly-linked list. * public class ListNode { * int val; * ...原创 2019-09-04 20:45:20 · 125 阅读 · 0 评论 -
树与二叉树
1.树树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除了根结点外,每个子结点可以分为多个不相交的子树 。几点概念:节点的度:一个节点含有的子树的个数称为该节点的度...原创 2019-09-15 17:46:41 · 109 阅读 · 0 评论 -
Leetcode二叉树相关习题
100.相同的树给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; ...原创 2019-09-15 20:05:26 · 204 阅读 · 0 评论 -
Leetcode1053.交换一次的先前排列
Leetcode1053. 交换一次的先前排列给你一个正整数的数组 A(其中的元素不一定完全不同),请你返回可在 一次交换(交换两数字 A[i] 和 A[j] 的位置)后得到的、按字典序排列小于 A 的最大可能排列。如果无法这么操作,就请返回原数组。class Solution { public int[] prevPermOpt1(int[] A) { for(...原创 2019-09-17 22:30:42 · 216 阅读 · 0 评论 -
栈和队列
1.栈1.1栈的概念和结构栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素的操作。进行数据插入和删除的一端称为栈顶,另一端称为栈底。栈中数据元素遵循先进后出原则。压栈:栈的插入操作叫做入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。示例1:基于数组的顺序栈public class ArrayStack { private String[] items;/...原创 2019-09-21 01:09:16 · 311 阅读 · 0 评论 -
牛客网题解(二叉树遍历)
1.二叉树遍历题目描述编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。输入描述:输入包括1行字符串,长度不超过100。输出描述:可能有多组测试数据,对于每组数据,输出将输入字符串建...原创 2019-09-21 13:41:55 · 297 阅读 · 0 评论 -
稀疏数组与队列
——引入编写的五子棋游戏中,有存盘和续上盘的功能。可以使用二维数组记录棋盘。因为该二维数组的很多值是默认0,因此记录了很多没有意义的数据。->稀疏数组。一.稀疏数组概念:当一个数组大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。稀疏数组的处理方法:1>记录数组一共有几行几列,有多少个不同的值。2>把具有不同值的元素的行列及值记录在一个小规模的数...原创 2019-07-19 00:49:33 · 110 阅读 · 0 评论