![](https://img-blog.csdnimg.cn/20190927151043371.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
数据结构与算法
朱朱呀
这个作者很懒,什么都没留下…
展开
-
Java数据结构之单调栈 - 剑指offerII 039 直方图最大矩形面积
给定非负整数数组 heights ,数组中的数字用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/0ynMMM著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。class Solution { public int largestRectangleArea(int[] heights) {原创 2021-09-05 16:26:19 · 177 阅读 · 0 评论 -
Java数据结构之单调栈 - leedcode1856 子数组最小乘积的最大值
前缀和数组等相关类型应该是long,溢出了,所以之前逻辑没问题但是却一直不对一个数组的 最小乘积 定义为这个数组中 最小值 乘以 数组的 和 。比方说,数组 [3,2,5] (最小值是 2)的最小乘积为 2 * (3+2+5) = 2 * 10 = 20 。给你一个正整数数组 nums ,请你返回 nums 任意 非空子数组 的最小乘积 的 最大值 。由于答案可能很大,请你返回答案对 109 + 7 取余 的结果。请注意,最小乘积的最大值考虑的是取余操作 之前 的结果。题目保证最小乘积的最.原创 2021-09-05 15:24:14 · 136 阅读 · 0 评论 -
Java数据结构之双端队列 -剑指offer59题 滑动窗口的最大值
看完视频讲解再自己写 耗时45min(不算看视频时间)给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值--------------- -----[1 3 -1] -3 5 3 6 7 3 1 [3 -1 -3] 5 .原创 2021-09-05 09:02:17 · 93 阅读 · 0 评论 -
Java数据结构之快速排序1.0/2.0/3.0+荷兰国旗问题
速排序1.0/2.0/3.0+荷兰国旗问题package SortAlgorithm;import java.util.Arrays;public class FastSort { public FastSort(){ } // 快速排序1.0版本 public void fast1_0(int[] arr,int L,int R,int num){ if(arr == null || arr.length < 2 || R ==.原创 2021-07-19 11:52:27 · 345 阅读 · 0 评论 -
Java数据结构之归并排序+求数组小和/降序对(新)
> 归并排序```javapackage SortAlgorithm;import java.util.Arrays;public class MergeSort { public MergeSort(){ } // 二分法 递归 求解归并排序 // 递归实现 public void MergeSort1(int[] arr, int L, int R){ if(R == L){ // 数组只有一个值直接返回原创 2021-07-16 11:28:57 · 124 阅读 · 0 评论 -
Java数据结构之用递归实现归并排序(好难啊!!!)
package Recursive_Algorithm;import java.util.Arrays;public class MergeSort { int len = 20; int arr [] = new int[len]; public MergeSort(){ for(int i = 0;i < len;i++){ arr[i] = (int)(Math.random() * len);原创 2021-06-07 16:52:37 · 98 阅读 · 0 评论 -
Java数据结构之用递归求数组最大值
package Recursive_Algorithm;import java.util.Arrays;public class ArrayMaxValue { int len = 20; int arr [] = new int[len]; int L = 0; int R = len - 1; public ArrayMaxValue(){ for(int i = 0;i < len;i++){ ar原创 2021-06-01 13:45:31 · 457 阅读 · 0 评论 -
Java数据结构之用队列结构实现栈结构
package LinkList;public class StackByQueue extends QueueByArray{ QueueByArray queue = new QueueByArray(); public StackByQueue(){ super(); } public StackByQueue(int len){ super(len); queue.len = len; }原创 2021-05-13 21:56:21 · 64 阅读 · 0 评论 -
Java数据结构之用栈结构实现队列结构
用两个栈来回倒package LinkList;// 用栈实现队列 --两个栈来回倒public class QueueByStack extends StackByArray { // 是一个栈,能用所有栈的属性和方法 StackByArray stack = new StackByArray(); // 用来倒栈中元素,该栈的出栈顺序与队列相同 public QueueByStack(int len){ super(len); } pub.原创 2021-05-13 15:34:42 · 123 阅读 · 0 评论 -
Java数据结构之用O(1)实现返回栈中最小元素的功能
增加一个最小值栈用来存放最小值package LinkList;public class StackgetMin extends StackByArray{ StackByArray stackMin = new StackByArray(); int min = 100000; public StackgetMin(){ } public StackgetMin(int len){ super(len); } .原创 2021-05-13 14:54:31 · 115 阅读 · 0 评论 -
Java数据结构之用双向链表实现队列的入队和出队
package LinkList;public class QueueByDoubleLink extends DoubleLinkList { // 双链表入队操作 ---尾插法-倒序输入 出队-从head正序输出 public void enQueue(int a){ TailInsertDoubleLinkList(a); } // 双链表出队操作 ---从head删除链表元素 public int deQueue(){原创 2021-05-13 12:56:56 · 360 阅读 · 0 评论 -
Java数据结构之用双向链表实现栈的入栈和出栈操作
package LinkList;// 使用双链表 定义栈的基本操作public class StackByDoubleLink extends DoubleLinkList { // 栈继承自双链表// DoubleNode head = null; // 双链表压栈操作 --- 向双链表插入一个元素 public void push(int a){ HeadInsertLinkList(a); // 返回压栈后的链表 } // 双链表原创 2021-05-13 12:50:29 · 575 阅读 · 0 评论 -
Java数据结构之用数组实现栈的入栈和出栈操作
package LinkList;public class StackByArray{ // 数组长度 int len = 20; // 创建一个长度为20的数组 int[] arr = new int[len]; // 定义栈顶和栈底 int top_flag = 0; // 栈顶 -- 数组最后一个数的下一个位置 public StackByArray(){ } public StackByArray(int l原创 2021-05-13 12:45:23 · 1101 阅读 · 0 评论 -
Java数据结构之用数组实现队列的入队和出队操作
package LinkList;public class QueueByArray{ // 数组长度 int len = 20; // 数组 int[] arr = new int[len]; // 队头标志 int head_flag = 0; // 与队列中第一个元素对齐 // 队尾标志 int tail_flag = -1; // 与队列中最后一个元素对齐 int size = 0; // 队列中元素的个数原创 2021-05-13 12:41:13 · 733 阅读 · 0 评论 -
Java数据结构之链表——头插法逆置双链表
定义双链表基本操作package Link;class DoubleNode{ public int value; // 该结点所保存的值 public DoubleNode next; // da该结点下一个结点指针 public DoubleNode last; // da该结点上一个结点指针 public DoubleNode(int data){ value = data; next = null; la.原创 2021-04-25 20:43:07 · 345 阅读 · 0 评论 -
Java数据结构之链表——头插法逆置单链表
单链表的就地逆置是指辅助空间O(1)的逆置方法,使用头插法。定义单链表的基本操作package Link;class Node{ // 定义单链表借点类 public int value; // 该结点所保存的值 public Node next; // da该结点下一个结点指针 public Node(int data){ value = data; next = null; } public Node(){.原创 2021-04-25 20:39:20 · 700 阅读 · 0 评论 -
Java数据结构之位运算——求某整数的二进制中1的个数
输入一个整数,求该整数的二进制表示中1的个数。public class CountOneTimes { public int ExtractRightOne(int a){ int a_r1 = a & ((~a) +1); //提取最右侧的1 return a_r1; } public int countonetimes(int a){ TenToTwo(a); int count = 0;.原创 2021-04-17 13:38:58 · 181 阅读 · 0 评论 -
Java数据结构之位运算——找到数组中出现奇数次的两个数(只有两个)
一个数组中有两种数出现了奇数次,其他数都出现了偶数次,怎么找到并打印这两种数。思路:对数组所有的数进行异或运算,偶数个数的数异或结果为0,将这两个要找的数标记为A、B,也就是最终结果为A、B异或的结果,此时取出右边第一个1,A、B在此位置的值不相同,一个为1,另一个为0,根据这个特点将这些数据分为两两组,分别异或.import java.util.Arrays;public class SearchOddTimesNumber { public int searchOddTime.原创 2021-04-17 13:11:44 · 334 阅读 · 0 评论 -
Java数据结构之位运算——提取某整数最右侧的1
a = a & ((~a) +1); //提取最右侧的1public class ExtractRightOne { public ExtractRightOne(int a){ String str = TenToTwo(a); System.out.println(a + "的二进制为:" + str); a = a & ((~a) +1); //提取最右侧的1 str = TenToTwo(a);.原创 2021-04-14 17:05:25 · 834 阅读 · 2 评论 -
Java数据结构之异或运算——找到数组中唯一出现奇数次的数
已知数组长度为n,且其中只有一个数字出现过奇数次,其他数字都出现偶数次,找出出现奇数次的这个数。public class SearchOddTimesNumber { public SearchOddTimesNumber(int [] arr){ int len = arr.length; int a = arr[0]; for(int i = 1;i < len;i++){ a = a ^ arr[i];.原创 2021-04-14 16:43:25 · 277 阅读 · 0 评论 -
Java数据结构之异或运算——不使用额外变量交换两个数
异或运算(^)1.任何数异或0 都为自己本身2.任何数和自己异或都为0前提是:两个变量值可以相同,但所指向的内存要不一样,才能使用异或运算来交换。public class Swap { public Swap(int a,int b){ a = a ^ b; // a^b b = a ^ b; // a^b^b=a a = a ^ b; // a^b^a=b System.out.println("交换后:a=" + .原创 2021-04-14 16:31:38 · 154 阅读 · 0 评论 -
Java数据结构之数组——二分法查找有序数组某数最左/右侧的位置
public class SearchLeftNumber { public void searchleftnumber(int[] arr,int mid){ if(mid == 0){ System.out.println("数值" + arr[mid] + "在数组中最左侧的位置是:" + mid); return; } while(arr[mid] == arr[mid-1] &&原创 2021-04-13 22:05:24 · 2551 阅读 · 3 评论 -
Java数据结构之数组——二分法查找有序数组中某个值
边界问题public class SearchNumber { public SearchNumber(int[] arr,int a){ int len = arr.length; if(len == 0){ System.out.println("数组为空!所查找数值" + a + "不存在!"); } int left = 0; int right = len-1; //.原创 2021-04-13 20:52:48 · 373 阅读 · 0 评论 -
Java数据结构之数组——求局部最小值
二分法。有时候数组无序,同样可以采用二分法。这道题考察的是全局观,左边下降趋势,右边上升趋势,函数图像呈凹形,必有极小值。中左值和中值呈上升趋势,中值右边可以直接舍弃;中值和中右值呈下降趋势,中值左边可以直接舍弃。public class LocalMin { public LocalMin(int[] arr){ int length = arr.length; if(length == 0){ System.out.println.原创 2021-04-13 17:14:50 · 423 阅读 · 0 评论 -
Java数据结构之数组——冒泡排序/选择排序
public class BubbleSort{ public static void main(String[] args){ int tmp = 0; int [] array = {7,10,6,1,11,4,8,2,9,14,5,3,15,13,12,}; for(int i = 1;i <= array.length;i++){ for(int j = 0;j < array.length-i;j++){ if(array.原创 2021-03-23 20:17:56 · 147 阅读 · 0 评论 -
Java数据结构之数组——插入排序
一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:从第一个元素开始,该元素可以认为已经被排序;取出下一个元素,在已经排序的元素序列中从后向前扫描;如果该元素(已排序)大于新元素,将该元素移到下一位置;重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;将新元素插入到该位置后;重复步骤2~5import java.util.Arrays;public class InsertSort { public static void main(Strin.原创 2021-04-13 11:33:48 · 350 阅读 · 0 评论