![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法与数据结构
NO Exception?
分享内容!
展开
-
两个大数相加
1.思路因为大数所以不能用普通的方式相加。因为可能是Long类型也装不下,所以要另辟蹊径。1.把数据转成string类型,eg: “87274892749872”+ “123”2.先个数加完 再十位加,还要记录进位,所以反转。 “278…”+ “321”3.把字符串拆成字符数组,通过 ASCII码运算 ,如 ‘a’=97 ‘0’=482.把原来数据转成ASCII码后再减去’0’的数值,就算出之间的偏差。如’2’=50,‘0’=48,他们之间的偏差就是23.进位:如遇到‘3’+‘7’ = 51原创 2021-07-18 20:35:50 · 158 阅读 · 0 评论 -
数据结构-红黑树
1. 2-3树每个节点都有两个节点或者三个节点,叫2-3树。一种绝对平衡的树。原创 2021-04-06 22:04:04 · 87 阅读 · 0 评论 -
堆-数据结构
1.简介一棵树的任意结点有且仅有唯一的一条路径连通。一棵树如果有n个结点,它一定有n-1条边一棵树加一条边将会构成一个回路。树是指任意两个结点间有且只有一条路径的无向图。2.二叉树每个结点最多两个子树,左子树,右子树。满二叉树:如果每个结点都有两个子树,叫满二叉树,意味着深度一致。完全二叉树:一个树有左子树,但是没有右子树。如果父节点的编号为k,左子树的编号为2k 右子树编号为2k+1.如果子节点编号为y,它的父节点编号为y/2.完全二叉树的应用场景为堆。3.堆-优先队列最大堆:原创 2021-03-27 16:14:14 · 241 阅读 · 0 评论 -
二叉树
1.二叉树具有唯一根节点二叉树有左右两个节点二叉树不一定是满的一个节点也是二叉树null也是二叉树class Node{ E e; Node left; Node right;}二叉树具有递归结构2.二分搜索树是二叉树每个节点的值大于自身左子树的值每个节点的值小于自身右子树的值存储的元素有可比性...原创 2020-06-22 18:09:11 · 200 阅读 · 0 评论 -
递归
1.概念递归是一种自身调用自身的函数,多通过调用自身缩小计算范围。有两个主要的点:1.结束条件2.调用自身的关联关系,可以理解为如何缩小运算的范围的逻辑。2.举例2.1 求总数求;{1,2,3,4,5,6,7,8,9} 和 public static void main(String[] args) { int [] arr ={1,2,3,4,5,6,7,8,9}; final int sum = sum(arr, 0); System原创 2020-06-21 17:51:15 · 113 阅读 · 0 评论 -
链表实现队列LinkedQueue
/** * 使用链表实现队列 * @param <E> */public class LinkedQueue<E> implements Queue<E> { public static void main(String[] a) { LinkedQueue<Integer> list = new LinkedQueue<>(); for (int i = 0; i < 5; i++).原创 2020-06-20 23:19:58 · 234 阅读 · 0 评论 -
自定义链表 LinkedList
/** * 链表 真正实现动态的数据结构,不需要处理固定容量的问题 * 缺点:丧失了随机访问的能力,不适合使用索引获取数据 * Node next * E e; * * @param <E> */public class LinkedList<E> { public static void main(String[] a) { LinkedList<Integer> list = new LinkedList<>.原创 2020-06-19 17:07:13 · 202 阅读 · 0 评论 -
自定义循环队列 (LoopQueue)
front==tail 队列为null(tail+1)%capacity = front 队列满/*循环队列front==tail 队列为nullfront :首位的indextail: 队列后的null位置tail+1=front 或者 (tail+1) %c = front队列满 */public class LoopQueue<E> implements Queue<E> { E [] data; int front,tail;原创 2020-06-18 22:18:19 · 322 阅读 · 0 评论 -
自定义队列ArrayQueue
Queue 先进先出(FIFO)first in firtst out 的数据结构。void enqueue(e) 入队dequeue() 出队getFront() 队首getSize() 大小isEmpty(); 是否空原创 2020-06-18 15:19:19 · 172 阅读 · 0 评论 -
自定义栈Stack
自定义栈Stack原创 2020-06-16 21:48:10 · 175 阅读 · 0 评论 -
自定义数组Array
package com.example.lib;public class Array { private int [] data; private int size; //构造 public Array(int capacity){ data = new int[capacity]; size=0; } public Array() { this(10); } //添加末尾 pu原创 2020-06-15 22:41:07 · 403 阅读 · 0 评论 -
算法:组合
private List<List<Integer>> res = new ArrayList<>(); private void findCombinations(int n, int k, int begin, Stack<Integer> pre) { if (pre.size() == k) { // 够数了,就添加到结果集中 res.add(new ArrayList<..原创 2020-05-22 15:56:15 · 668 阅读 · 0 评论 -
1. 两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]class Solut...原创 2020-03-21 23:46:32 · 128 阅读 · 0 评论 -
283. 移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。 public static void moveZero() { int[] nums = {0, 3, 0,1, 12}; ...原创 2020-03-21 23:19:07 · 111 阅读 · 0 评论 -
实现 strStr() 函数
实现 strStr() 函数给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = “hello”, needle = “ll”输出: 2示例 2:输入: haystack = “aaaaa”, needle = “bba”...原创 2020-03-18 17:12:25 · 202 阅读 · 0 评论 -
旋转数组
简单暴力法最简单的方法是旋转 k 次,每次将数组旋转 1 个元素。public class Solution { public void rotate(int[] nums, int k) { int temp, previous; for (int i = 0; i < k; i++) { previous = nums[...原创 2020-03-17 23:11:57 · 116 阅读 · 0 评论 -
删除排序数组中的重复项
删除排序数组中的重复项示例 2:给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。你不需要考虑数组中超出新长度后面的元素。最终结果:[0,1,2,3,4,2,3,3,4,4],忽略后五位数据。 public static int removeDuplicates(in...原创 2020-03-17 22:10:14 · 288 阅读 · 0 评论 -
给定一个字符串,逐个翻转字符串中的每个单词。
给定一个字符串,逐个翻转字符串中的每个单词。示例 1:输入: “the sky is blue”输出: “blue is sky the”示例 2:输入: " hello world! "输出: “world! hello”解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例 3:输入: “a good example”输出: “examp...原创 2020-03-17 15:55:20 · 1419 阅读 · 0 评论 -
字符串相加
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。注意:num1 和num2 的长度都小于 5100.num1 和num2 都只包含数字 0-9.num1 和num2 都不包含任何前导零。你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。算法流程: 设定 i,j 两指针分别指向 num1,num2 尾部,模拟人工加法;计算进位:...原创 2020-03-15 22:15:37 · 1680 阅读 · 0 评论 -
字符串相乘
字符串相乘原创 2020-03-15 22:07:10 · 184 阅读 · 0 评论 -
判断一个字符串是否包含另一个字符串的所有排列
给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。换句话说,第一个字符串的排列之一是第二个字符串的子串。示例1:输入: s1 = “ab” s2 = “eidbaooo”输出: True解释: s2 包含 s1 的排列之一 (“ba”).示例2:输入: s1= “ab” s2 = “eidboaoo”输出: False注意:输入的字符串只包含小写字...原创 2020-03-14 21:55:55 · 1583 阅读 · 0 评论 -
打印字符串的所有排列
输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。示例:输入:s = “abc”输出:[“abc”,“acb”,“bac”,“bca”,“cab”,“cba”]限制:1 <= s 的长度 <= 8 public static String[] permutation(String s) { /...原创 2020-03-14 19:40:47 · 822 阅读 · 0 评论 -
最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。/** * 最长公共前缀 * @param...原创 2020-03-14 18:07:12 · 89 阅读 · 0 评论 -
无重复字符的最长子串
无重复字符的最长子串输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。 public int lengthOfLongestSubstring(Str...原创 2020-03-12 17:21:43 · 97 阅读 · 0 评论 -
SparseArray 源码分析
SparseArray是一个key为int[]数组,value是object数组的形式,支持K,V 结构的mapping数据对象。初始化容量为10.public class SparseArray<E> implements Cloneable { private static final Object DELETED = new Object(); private ...原创 2020-02-24 15:50:00 · 223 阅读 · 0 评论 -
数组的中心索引
给定一个整数类型的数组 nums,请编写一个能够返回数组“中心索引”的方法。我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。如果数组不存在中心索引,那么我们应该返回 -1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。示例 1:输入:nums = [1, 7, 3, 6, 5, 6]输出: 3解释:索引3 (nums[3] =...原创 2020-02-04 21:39:41 · 560 阅读 · 0 评论 -
数组加1 ,这个思路牛逼了!
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。 public int[] plusOne(int[] digits) { for (int i = d...原创 2020-01-20 09:25:37 · 716 阅读 · 0 评论 -
合并两个排序好的数组
/** * 合并两个排序好的数组 * @param arr1 * @param arr2 * @param n1 * @param n2 * @param arr3 */ public static void mergeArrays(int[] arr1, int[] arr2, int n1, ...原创 2020-01-18 11:44:50 · 431 阅读 · 0 评论 -
查找第一个没有重复的数组元素
/** * 第一个不重复的数据 * @param arr * @param n * @return */ static int firstNonRepeating(int arr[], int n) { for (int i = 0; i < n; i++) { int j; ...原创 2020-01-18 11:30:34 · 331 阅读 · 3 评论 -
查找数组中第二小的元素
思路:声明变量第一位 第二位,遍历数组,进行首位和第二位的比较和赋值。时间复杂度为N当然也可以通过排序得到第二位的数据,但是时间复杂度为N2 static void print2Smallest(int arr[]) { int first, second, arr_size = arr.length; /* There should be atleast...原创 2020-01-18 11:06:35 · 419 阅读 · 0 评论 -
Java基础-查找和排序
1.查找 /** * 二分查找 * * @param arr 数据源 * @param key 查找的数据 * @return 在arr里的位置 */ private int halfSearch(int[] arr, int key) { int min, mid, max; min = 0;...原创 2019-12-05 23:05:36 · 146 阅读 · 0 评论 -
算法--快速排序
快速排序–待处理原创 2019-12-05 17:09:49 · 129 阅读 · 0 评论 -
ArrayMap源码分析
ArrayMap源码分析-待处理原创 2019-12-05 17:09:04 · 158 阅读 · 0 评论 -
排序算法--包含动画效果
https://www.cnblogs.com/onepixel/p/7674659.html原创 2019-11-26 22:43:55 · 131 阅读 · 0 评论 -
算法-反转数组
思路:头和尾互换,遍历一半的次数。class Solution { public void reverseString(char[] s) { for(int x=0;x<s.length/2;x++){ char temp= s[x]; s[x]=s[s.leng...原创 2019-11-26 21:58:11 · 216 阅读 · 0 评论 -
算法-整数反转
class Solution { public int reverse(int x) { long temp = 0; while(x != 0){ int pop = x % 10;//获取个位数 temp = temp * 10 + pop;//让个位数进位上去 ...原创 2019-11-26 21:41:58 · 121 阅读 · 0 评论