算法刷题
文章平均质量分 51
刷题笔记
赑屃爱Java
双非一本科班生,努力自学Java中,这里记录我的云端笔记
展开
-
一文告别堆:堆的结构代码+堆排序
堆的概述加代码实现大根堆和小根堆普通数组堆化的代码(两种方法)public static void heapInsert(int[] heap,int index){//先插入到数组的最后一个位置,然后根据那个位置去调整堆[大根] while(heap[index]>heap[(index-1)/2]){//一直和父亲比较(到了根节点,还没有结束,根节点的父亲还是根节点) swap(heap,index,(index-1)/2);原创 2022-05-03 21:23:07 · 142 阅读 · 0 评论 -
快速排序算法(划分轴的小于区等于区和大于区)
快排思想简单说:数组最右边是轴,小于区从左边遍历,大于区域从右边遍历,等于区域在中间:思路:指针i从0开始遍历,小于区域从左边扩,大于区域从右边扩,i==轴,直接i++i<轴,i位置数和小于区的下一个交换,小于区扩1,i++i>轴,i位置数和大于区域的左一个交换,i不变PS:时间复杂度默认轴:arr[R]最好情况是它可以平均分配数组,此时nlogn,空间复杂度:O(logN);*总结:划分值越接近中点,性能越好,而越靠紧两边,性能越差优化arr[R]swap(ar原创 2022-05-03 21:13:35 · 333 阅读 · 0 评论 -
归并排序递归和非递归写法+归并排序的精髓
一:归并排序算法实现直接看图:简单说:一个数组分成两个数组,让两个子数组有序,将有序的两个子数组合并,怎么让子数组有序?依靠归并算法归并算法注意:传入的子数组是有序的.怎么得到有序的数组,子数组一直划分下去,子数组迟早是一个元素,一个元素的数组当然有序,然后合并,合并过程让两个有序的子数组变成一个有序的子数组,然后一直返回,直到让这个数组有序 public static void merge(int[] arr,int L,int mid,int R){ //用help数组去复原创 2022-05-03 21:06:09 · 161 阅读 · 0 评论 -
二叉树算法大总结:借助遍历的题型+需要借助递归返回多个信息的题型[本质:遍历]
二叉树算法大总结:遍历+递归思想原创 2022-05-03 10:09:47 · 554 阅读 · 0 评论 -
只用一文整理好构建二叉树的算法大总结:序列化和反序列化+给出中序(前序/后序)构建+有序数组构建平衡搜索二叉树
序列化二叉树+构建二叉树的大总结原创 2022-05-02 23:10:42 · 630 阅读 · 0 评论 -
一文解决二叉树深度有限遍历[递归和非递归方式]和广度优先遍历[发现新层的两种处理方法]
深度优先遍历递归方式preinpost public static class Node { int value; Node left; Node right; public Node(int value) { this.value = value; } } /*中左右*/ public void recursivePreTraversal(Node root) {原创 2022-04-28 23:35:34 · 696 阅读 · 0 评论 -
栈和队列初步刷题篇
两个栈实现队列方法:两种倒入方法class MyQueue { Stack<Integer> stackIn ; Stack<Integer> stackOut ; public MyQueue() { stackIn=new Stack<>(); stackOut=new Stack<>(); } public void InToOut(){ whil原创 2022-04-27 22:13:33 · 78 阅读 · 0 评论 -
字符串刷题篇1
反转字符串编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1)O(1)O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例 1:输入:[“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]示例 2:输入:[“H”,“a”,“n”,“n”,“a”,“h”]输出:[“h”,“a”,“n”,“n”,“原创 2022-04-26 22:28:59 · 124 阅读 · 0 评论 -
哈希表刷题2
一个数组中两个数相加=target给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]方法:判断相加和返回数组下标===>mapclass Solution { publi原创 2022-04-25 22:19:31 · 90 阅读 · 0 评论 -
哈希表刷题篇1
有效字母异位词给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1: 输入: s = “anagram”, t = “nagaram” 输出: true示例 2: 输入: s = “rat”, t = “car” 输出: false说明: 你可以假设字符串只包含小写字母。方法字母是有限个的,所以用简单的hash表结构—数组class Solution { public boolean isAnagram(String s, String t) {原创 2022-04-24 21:30:19 · 179 阅读 · 0 评论 -
链表刷题篇2
删除倒数第k个结点给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。双指针:开始要在head的前一个,所以设置虚节点class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { //快慢指针:快的先走k步,然后一起走 ListNode dummy=new ListNode(-1); dummy.next=head; ListNod原创 2022-04-24 21:20:48 · 499 阅读 · 0 评论 -
链表篇题目
删除结点问题题意:删除链表中等于给定值 val 的所有节点。示例 1:输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]class Solution { public ListNode removeElements(ListNode head, int val) { //设置虚节点和不设置虚节点:好处是将头结点不用单独讨论 //对删讨论头结点 while(head!=null&原创 2022-04-22 00:07:56 · 511 阅读 · 0 评论 -
数组刷题篇
二分法题:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。输入: nums = [-1,0,3,5,9,12], target = 9 输出: 4 解释: 9 出现在 nums 中并且下标为 4 方法;二分:循环和递归class Solution { //循环和递归两种做法 public int search(int[] nums,原创 2022-04-20 22:12:49 · 107 阅读 · 0 评论