算法
一杯星巴克的生活
人生如程序,不是选择就是循环。
展开
-
必会的排序算法及代码实现
插入排序(增量策略):算法复杂度为O(n^2)插入排序的核心在于,它把一个无序数列看成两个数列,假如第一个元素构成了第一个数列,那么余下的元素构成了第二个数列,很显然,第一个数列是有序的,那么我们把第二个数列的第一个元素拿出来从右向左依次和第一个数列的数比较,遇到比自己大的就交换,比自己小的就插入到第一个数列,使它依然构成一个有序数列,直到第二个数列中的所有元素全部插入到第一个数列,这时候就排好序了。lst=[5,7,1,3,6,2,4]def insertSort(arr): for原创 2021-07-22 14:15:14 · 164 阅读 · 0 评论 -
Java链表操作-删除链表中指定元素,删除指定下标元素,反转链表
删除链表中指定元素删除指定下标的节点添加节点反转链表输出链表//定义链表class ListNode { int val; ListNode next; public ListNode(int x) { val = x; }}public class Solution { //删除链表中指定的元素 public static ListNode removeElements(ListNode head, int val) .原创 2021-03-21 17:17:34 · 885 阅读 · 0 评论 -
Java用数组实现一个栈
//定义栈的基本操作interface IStack{ int push(int element); int pop(); boolean isEmpty(); int size(); int peek();}public class MyStack implements IStack{ private static final int CAPITILY = 10;//初始容量10 private static final int FACTOR原创 2021-03-21 17:01:12 · 118 阅读 · 0 评论 -
Java实现栈
Java基于数组实现栈:/** * Java基于数组实现栈 */public class MyStack<T> { //定义一个数组 private Object[] stack; //模拟栈针 private int needle; //初始化栈 MyStack(){ stack = new Object[10];//初始化容量是10 } //取栈顶元素 public T peek(){原创 2020-11-25 13:36:10 · 91 阅读 · 0 评论 -
找字串个数
题目描述度度熊收到了一个只有小写字母的字符串S,他对S的子串产生了兴趣,S的子串为S中任意连续的一段。他发现,一些子串只由一种字母构成,他想知道在S中一共有多少种这样的子串。例如在串”aaabbaa”中,度度熊想找的子串有”a”,”aa”,”aaa”,”b”,”bb”五种。import java.util.HashSet;import java.util.Scanner;import java.util.Set;public class FindSubString { publ原创 2020-10-11 11:07:52 · 223 阅读 · 0 评论 -
给定两个日期 计算两个日期间的工作日天数。
题目:给定两个日期,计算两个日期间的工作日天数。示例:输入:2020,9,25,2020,9,28输出:2import java.text.SimpleDateFormat;import java.util.Calendar;public class Solution { public int getDutyDays(int y1,int m1,int d1,int y2,int m2,int d2) { String strStartDate = St原创 2020-10-08 21:38:05 · 526 阅读 · 0 评论 -
单调栈
什么是单调栈?从名字上就听的出来,单调栈中存放的数据应该是有序的,所以单调栈也分为单调递增栈和单调递减栈单调递增栈:栈中数据出栈的序列为单调递增序列单调递减栈:栈中数据出栈的序列为单调递减序列ps:这里一定要注意所说的递增递减指的是出栈的顺序,而不是在栈中数据的顺序模拟实现一个递增单调栈:现在有一组数10,3,7,4,12。从左到右依次入栈,则如果栈为空或入栈元素值小于栈顶元素值,则入栈;否则,如果入栈则会破坏栈的单调性,则需要把比入栈元素小的元素全部出栈。单调递减的栈反之。10入栈时,栈为空原创 2020-08-30 21:56:30 · 85 阅读 · 0 评论 -
力扣53-最大子序和
最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。动态规划思路:代码实现:class Solution{ public int maxSubArray(int[] nums){ //定义maxArray 数组,m原创 2020-08-26 21:26:27 · 156 阅读 · 0 评论 -
枚举
枚举算法实例例一:百钱买白鸡1,问题描述:公鸡每只5元,母鸡每只3元,三只小鸡1元,用100元买100只鸡,问公鸡、母鸡、小鸡各多少只?2,算法分析:利用枚举法解决该问题,以三种鸡的个数为枚举对象,分别设为mj,gj,xj,用三种鸡的总数 (mj+gj+xj=100)和买鸡钱的总数(1/3xj+mj3+gj*5=100)作为判定条件,穷举各种鸡的个数。mj=0;gj=0;xj=0for gj in range(21): for mj in range(34): xj=原创 2020-08-06 10:44:55 · 145 阅读 · 0 评论 -
快速排序、归并排序
下面介绍两个时间复杂度都是 O(nlogn) 的排序算法。快速排序(分治策略)令 l,r 分别代表序列最小下标值和最大下标值让这两个指针一个从左往右,一个从右往左,分别查找,当 l < r 开始循环:1.当右边数 arr[r]大于基准数,就 r-- 继续向左查找,如果找到比基准数小就与arr[l]交换位置2.当左边数 arr[l]小于基准数,就 r++ 继续向左查找,如果找到比基准数大就与arr[r]交换位置3.当l = r 即左右下标指向同一个数说明序列已经遍历一遍,这个位置就是一个分界原创 2020-08-03 10:45:15 · 107 阅读 · 0 评论 -
插入排序
将数组看成两部分,一部分有序,另一部分无序。取第一个元素作为有序部分(因为只有一个元素它一定是有序的),取出下一个元素对已排序数组从后往前扫描与未排序数组元素逐个比较,当中该元素大于待插元素,就将该元素移到下一个位置,重复此操作,直到找到小于等于该元素的待插元素,将新元素插到该元素的后面。 public int[] insertSort(int[] arr){ int preindex; int current; f原创 2020-07-29 10:14:43 · 78 阅读 · 0 评论 -
二分查找
public class binarySearch { public static void main(String[] args) { //寻找指定元素的下标 //二分查找前提是被查找对象必须有序 int[] arr = {1,2,3,4,5,6,7,8,9,10}; int index = binarySearchh(arr,9); System.out.println(index == -1 ? "该元素不存在!"原创 2020-07-28 18:11:31 · 54 阅读 · 0 评论 -
用两个栈实现一个队列
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )java实现class CQueue { LinkedList<Integer> A, B; public CQueue() { A = new LinkedList<Integer>(); B = new原创 2020-07-19 22:47:45 · 271 阅读 · 1 评论 -
给定一个未排序数组,找到缺失的最小整数
若不考虑时间复杂度,空间复杂度class Solution { public int firstMissingPositive(int[] nums) { int res = 1; for (int j = 0; j < nums.length; j++) { for (int i = 0; i < nums.length; i++) { if (res == nums[i]){原创 2020-07-19 18:58:07 · 559 阅读 · 0 评论 -
根据前序遍历、中序遍历结果重构二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。思路:class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; }}class Solution { HashMap<Integer, Integer> mp = new HashMap<Integer, Intege原创 2020-07-19 12:11:39 · 261 阅读 · 0 评论