java
weixin_45615380
这个作者很懒,什么都没留下…
展开
-
2020-11-08
数据结构之堆排序堆一、往堆中插入一个元素二、堆中删除一个元素三、实现堆排序一、建堆二、排序堆堆是一种特殊的二叉树。满足下面两个条件就是一个堆:1、堆是一个完全二叉树(完全二叉树要求,除了最后一层,其他层的节点个数都是满的,最后一层的节点都靠左排列。)2、堆中每个节点的值都必须大于等于(或小于等于)其子数的每一个节点的值。(大于的称为大顶堆,小于的称为小顶堆。)上图1,2是大顶堆,3是小顶堆,4不是堆。一、往堆中插入一个元素往堆中插入一个元素,也必须满足堆的两个条件。完全二叉树比较适合用数组存原创 2020-11-08 19:08:06 · 126 阅读 · 0 评论 -
2020-11-04
力扣打卡题之合并区间力扣57思路:就是高中时期的区间的四种情况,将区间从左到右滑动。代码:class Solution { public int[][] insert(int[][] intervals, int[] newInterval) { int left = newInterval[0]; int right = newInterval[1]; boolean placed = false; List<int原创 2020-11-04 10:41:37 · 50 阅读 · 0 评论 -
2020-11-02
力扣打卡题之两数组的交集力扣题349编写一个函数来求出来求出两个数组的交集。注意说明思路1:可以使用hashset的方法,创建hashSet集合,然后使用暴力法进行比对(由于给定的数组中有重复元素,而Java中HashSet的特点就是不允许存储重复元素)。代码:class Solution { public int[] intersection(int[] nums1, int[] nums2) { Set<Integer> set1 = new HashSe原创 2020-11-02 21:26:34 · 60 阅读 · 0 评论 -
2020-11-01
数据结构与算法之排序算法(三)一、桶排序二、计数排序三、基数排序一、桶排序算法思想:核心就是将要排序的数据划分到m个有序桶中,然后对每一个桶内的数据进行排序。桶内排序之后,再依次取出每个桶内的数据,组成的数据就是有序的。注意:1、要排序的数据很容易划分为m个桶2、数据在每个桶之间分布要是比较均匀的3、桶排序比较适合外部排序的java代码:public static void BucketSort(int[] a, int bucketSize){ if(a.length < 2原创 2020-11-01 17:21:51 · 86 阅读 · 0 评论 -
2020-10-29
数据结构与算法之排序算法(二)一、归并排序二、快速排序一、归并排序算法思路:简单来说,就是将一个数组左右分为两半,然后再次细分,逐渐分为两个元素。最后比较大小,然后进行合并。(一般使用递归方法)递推公式:merge_sort(p…r) = merge(merge_sort(p…q), merge_sort(q+1…r))终止条件:p >= r 不用再继续分解代码:public void MergeSort(int[] a, int n){ if(n <= 1) return;原创 2020-10-29 21:06:44 · 80 阅读 · 0 评论 -
2020-10-28
力扣打卡题力扣题库1207用map和Set实现: 1、map用于统计次数 2、set用于次数去重:class Solution { public boolean uniqueOccurrences(int[] arr) { Map<Integer, Integer> counts = new HashMap<>(); for (int value : arr) { counts.put(value, count原创 2020-10-28 20:41:19 · 49 阅读 · 0 评论 -
2020-10-28
数据结构与算法之排序算法(一)排序算法数据结构与算法之排序算法(一)一、冒泡排序二、插入排序三、选择排序一、冒泡排序算法基本思想:每次都选择一对数字排序,小的数字放前面,通过两个for循环,依次比较。类似于打擂台,每一个人都要与其他的人比较过之后,再进行排序。public void BubbleSort(int[] a, int n){ if(n <= 1)return; int temp = 0; for(int i = 0 ; i < n ; i++){ for(int原创 2020-10-28 19:44:07 · 63 阅读 · 0 评论 -
2020-10-26
数据结构之队列队列:相当于排队买票,先来的人先买,后来的人只能排队,而且还不准插队。先进先出(first in first out,FIFO)与栈相似,队列也只有两个类似的操作:入队(enqueue)和出队(dequeue)。入队:是从队尾(tail)取出去。出队:是从队头(head)取出去。Java中常用操作:// 用数组实现的队列public class ArrayQueue { // 数组:items,数组大小:n private String[] items; priva原创 2020-10-26 21:04:49 · 62 阅读 · 0 评论 -
2020-10-25
1024力扣打卡题(动态规划)解题思路:1、如果要覆盖所有区间,那么先从视频开始的 0 开始考虑2、找到所有包含 0 的片段,因为不会有比 0 小开始的片段,所以很好找3、假如有 [0,1] 和 [0,2] 两个片段,当然会选择 [0,2] 毕竟多了可以剪掉,少了就得多找一个片段了4、当选择了 [0,2] 为一个肯定要选的片段之后,接下来可以找 [1,x] 和 [2,x] 的片段5、同理,在所有的 [1,x] 和 [2,x] 片段中挑选覆盖更多的片段6、重复这个做法,直到影片结束class原创 2020-10-25 20:39:12 · 146 阅读 · 0 评论 -
2020-10-23
记录力扣刷题新手村-还是双指针加链表反转力扣题234请判断一个链表是否为回文链表方法一:双指针思路: 1、首先使用快慢指针,找到中间的节点 2、将后半段节点使用链表反转 3、判断是否为回文 4、返回结果java代码class Solution { public boolean isPalindrome(ListNode head) { if(head == null )//判断链表是否为空,空也是回文 return true;原创 2020-10-23 14:33:11 · 59 阅读 · 0 评论 -
2020-10-23
记录常用的一些数据结构之栈栈:是先进后出(FILO,first in last out)的线性表(stack),它要求只在表尾进行插入和删除。端口有栈顶(top),栈底(button)。栈的常用操作:进栈(push,压栈)和出栈(pop,弹栈)。c语言版:一、栈的定义typedef struct{ ElemType *base; ElemType *top; int StackSize;}spStack;二、创建一个栈#define STACK_INIT_SIZE 100void原创 2020-10-23 11:39:10 · 80 阅读 · 0 评论 -
2020-10-22
记录力扣刷题新手村-双指针题力扣题925本来想用哈希表来写的,后来发现字符串有顺序要求,哈希表只能查询字符个数是否正确。后来看到别人的题解,使用双指针。双指针具体用法思路:第一个字符串主要使用来匹配字符的。第二个字符串的两个作用:匹配name中字符以及重复字符。如果typed中有个字符都不满足,就直接返回false。Java代码class Solution { public boolean isLongPressedName(String name, String typed) {原创 2020-10-22 11:38:46 · 47 阅读 · 0 评论 -
2020-10-21
记录力扣刷题新手村-打卡题补上昨天的题力扣143:链表重排给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。方法一:使用链表的基本操作 解题思路: 1、使用快慢指针,得到两个链表 2、将后半部分的链表反转 3、将反转后的链表插入前半部分的链表缝隙java代码:`class Solution { public void reorderL原创 2020-10-21 10:59:23 · 108 阅读 · 0 评论 -
2020-10-19
记录力扣刷题新手村-打卡题力扣题-844给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。注意:如果对空文本输入退格字符,文本继续为空。本题的思路是字符重组:一般使用数据结构中栈(先进后出) 首先将所有的字符压栈push() a、判断字符中是否有后退字符#(注意字符是否为空的情况) b、然后依次弹栈pop() c、最后比较栈中的元素是否相同方法一:双栈法(时间复杂度O(n))class Solution {原创 2020-10-19 16:47:41 · 69 阅读 · 0 评论 -
2020-10-18
记录力扣刷题新手村-数组题给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍实例:第一种方法(暴力法):时间复杂度为(O(n^2))代码如下:class Solution { public int[] twoSum(int[] nums, int target) { int[] a=new int[2]; f原创 2020-10-18 19:17:40 · 140 阅读 · 3 评论