算法学习
刷算法
大龄烤红薯
徐家庄电器专修学校-软件工程专业
展开
-
【经典面试题目】--从1百万(一亿)的数据中找top100大的数
排序算法之找出Top100大的数原创 2024-01-15 22:13:33 · 1279 阅读 · 0 评论 -
【排序算法总结】
排序算法:冒泡、选择、归并、快排、堆排、插入原创 2024-01-05 23:03:48 · 791 阅读 · 0 评论 -
【回溯算法】回溯算法学习
回溯算法原创 2023-12-26 11:00:00 · 378 阅读 · 0 评论 -
【动态规划算法】之打家劫舍Ⅱ
动态规划 打家劫舍Ⅱ原创 2023-12-24 10:30:00 · 535 阅读 · 0 评论 -
【动态规划算法】之打家劫舍Ⅰ
打家劫舍 动态规划原创 2023-12-24 09:45:00 · 486 阅读 · 0 评论 -
【动态规划算法(dp算法)】之背包问题
动态规划 01背包原创 2023-12-23 15:33:42 · 1293 阅读 · 0 评论 -
【滑动窗口】之 长度最小的子数组
滑动窗口 、长度最小的子数组原创 2023-12-23 15:05:52 · 477 阅读 · 0 评论 -
【分治算法】之汉诺塔问题
分治算法-汉诺塔原创 2023-12-22 13:30:00 · 483 阅读 · 1 评论 -
【双指针算法应用举例】反转链表、二分查找、有序数组的平方等
双指针算法原创 2023-12-22 10:30:00 · 479 阅读 · 0 评论 -
【贪心算法】之 摆动序列(中等题)
贪心算法-摆动序列原创 2023-12-21 22:58:23 · 666 阅读 · 0 评论 -
【贪心算法】之 分糖果(中等题)
【代码】【贪心算法】之 分糖果(中等题)原创 2023-12-20 11:00:00 · 482 阅读 · 0 评论 -
【贪心算法】之 K 次取反后最大化的数组和
刚开始思路是这样子的:第一步:将数组按照绝对值大小从大到小排序,第二步:从前向后遍历,遇到负数将其变为正数,同时K–第三步:如果K还大于0,那么反复转变数值最小的元素,将K用完第四步:求和然后遇到的问题就是 怎么按照绝对值大小求和呢?我试着用冒泡排序求了一次,idea可以运行,但是leetcode上超时了;原创 2023-12-20 09:30:00 · 346 阅读 · 0 评论 -
【贪心算法】之买柠檬水找零
所以局部最优:遇到账单20,优先消耗美元10,完成本次找零。全局最优:完成全部账单的找零。 美元10只能给账单20找零,而美元5可以给账单10和账单20找零,美元5更万能!原创 2023-12-19 23:03:16 · 972 阅读 · 0 评论 -
【贪心算法】之分饼干
贪心的本质是选择每一阶段的局部最优,从而达到全局最优。这么说有点抽象,来举一个例子:例如,有一堆钞票,你可以拿走十张,如果想达到最大的金额,你要怎么拿?指定每次拿最大的,最终结果就是拿走最大数额的钱。每次拿最大的就是局部最优,最后拿走最大数额的钱就是推出全局最优。原创 2023-12-19 23:02:18 · 576 阅读 · 0 评论 -
贪心算法---1005.K 次取反后最大化的数组和
题目描述给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组:选择某下标 i 并将 nums[i] 替换为 -nums[i] 。重这个过程恰好 k 次。可以多次选择同一个下标 i 。以这种方式修改数组后,返回数组可能的最大和 。示例 1:输入:nums = [4,2,3], k = 1输出:5解释:选择下标 1 ,nums 变为 [4,-2,3] 。示例 2:输入:nums = [3,-1,0,2], k = 3输出:6解释:选择下标 (1, 2, 2) ,nums 变为原创 2022-05-05 11:21:38 · 832 阅读 · 0 评论 -
45.跳跃游戏Ⅱ--leetcode
题目描述给你一个非负整数数组 nums ,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。attention:假设你总是可以到达数组的最后一个位置。示例 1:输入: nums = [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。思路分析本题要求的是最小的跳跃次数,和之前的最大步数覆盖max原创 2022-05-03 22:18:10 · 165 阅读 · 0 评论 -
简单选择排序JAVA
简单选择排序优于冒泡排序的思想就是:(从小到大排序)1.我从第一个数开始往后比,每一趟循环只找到最min的数的下标,把min指下标,在该趟循环结束时候才交换基准数与min的位置中的值;2.然后用第二个数继续开始往后比~~~~冒泡排序是比一次,交换一次;选择排序是比而不换,每趟排序的最后一次再换; public int[] SimpleSelectionSort(int[] a){ int min,temp; for(int i=0;i<a.length-1;i+原创 2022-05-14 21:25:34 · 238 阅读 · 0 评论 -
直接插入排序JAVA
直接插入排序原创 2022-05-14 21:31:53 · 158 阅读 · 0 评论 -
【csdn默认使用操作详解】
一种做法是我们直接进行一个堆排序,或者快排,然后打印前100个即可,但是这样子比较耗时间;平均下来快排都在9000多ms,而堆排就更大,32s多;所以我们不能简单粗暴的直接快排或者堆排,要对其进行相对的优化;(这种做法不可取,要优化!!!)下面我们看具体方法:方法一:基于quicksort实现的原理如下1. 假设数组为 array[N] (N = 1 亿),首先利用一次quicksort的原理把array分成两个部分,左边部分比基准值大, 右边部分比基准小。 得到基准值在整个数组中的位置,假设是原创 2022-05-18 22:30:02 · 1931 阅读 · 0 评论 -
归并排序-JAVA代码 附注释
归并排序原创 2022-04-14 21:30:55 · 289 阅读 · 0 评论 -
直接插入排序-JAVA代码
直接插入排序思想:①把n个待排序的元素看成一个有序表和一个无序表;②刚开始时有序表只有一个元素(第一个元素),无序表有n-1个元素;③进行排序:每次从无序表中去一个元素,与有序表中的元素挨个比较,插入适当的的位置,形成新的有序表;重复③直到无序表中无元素//3.直接插入排序 public int[] StraightInsertionSort(int[] a) { for (int i = 1; i < a.length; i++) { //定原创 2022-04-14 22:00:22 · 562 阅读 · 0 评论 -
【排序算法--八大排序大总结】
八大排序总结稳定性排序(口诀):基数、计数和一个桶;冒泡、插入和归并;时间复杂度:堆排、快排( n*logn),其他常用是n2空间复杂度:除了快排都是1;原创 2022-05-29 12:08:51 · 148 阅读 · 1 评论 -
快速排序JAVA
快排注意点:明确快排终止条件:left >= right,即只有一个元素或者没有元素。明确指针移动条件:start < end,即首指针在尾指针右边时才能移动。明确指针定义:定义指针时,两个指针一定要把基准元素包含进去。(因为指针相交时交换元素并没有判断与基准元素的大小,特殊情况下:一个指针没动,另一个指针直接移动到头,此时指针的终止条件也可能是因为指针相交了,元素与基准元素的大小比较未知,这时候与基准元素交换可能是一次错误的交换,但是如果把基准元素包含进来,就会与基准元素自身交换,不会原创 2022-05-13 22:32:13 · 240 阅读 · 0 评论 -
堆排序JAVA
堆排序的基本思想是:具体可看视频演示:堆排序- 1、将带排序的序列构造成一个大(小)顶堆,根据大顶堆的性质,当前堆的根节点(堆顶)就是序列中最大的元素; buildHeap();- 2、将堆顶元素和最后一个元素交换交换一次,i--一次,然后将剩下的节点重新构造成一个大顶堆; swap() + buildHeap()- 3、重复步骤2,如此反复,从第一次构建大顶堆开始,每一次构建,我们都能获得一个序列的最大值,然后把它放到大顶堆的尾部。最后,就得到一个有序的序列了。 heapSort();原创 2022-05-16 22:31:14 · 229 阅读 · 0 评论 -
简单选择排序-JAVA代码
简单选择排序思想:用第i位置上的数与后面的每一个数进行n-i次比较;也就是说:①先循环,找到比arr[min]小的数,然后把它的下标记录在min里;②再用arr[min] 与后面的继续比较;重复①③直到某次循环结束我们再把min与i位置上的数进行交换// 2.简单选择排序 i从0开始 j从i+1开始 public int[] SimpleSelectionSort(int[] a){ int min,temp; for(int i=0;i<a.原创 2022-04-14 21:56:37 · 529 阅读 · 0 评论 -
冒泡排序-JAVA代码
冒泡排序原创 2022-04-14 21:50:46 · 980 阅读 · 0 评论 -
分治算法—汉诺塔问题Java
汉诺塔问题三根柱子 把A柱子上的盘子全部挪到C上,且每次挪动的时候 小的必须在大的上面分治算法的思想;分:把一个大问题拆成若干个小的子问题;治:求解每个子问题的(递归);并:把子问题的解合并起来就是大问题的解;汉诺塔拆分:我们每次把这些个盘子看成两部分;- 第一部分: 最下面的一个大的作为一部分,先把他放在C上;- 第二部分 除去最大的剩下的整体作为一部份,再把他放在c上;### 步骤先把第二部分移动到B上;然后第一部分就可以取出来放到C上;然后再把第二部分移动到C上;pa原创 2022-04-21 17:09:04 · 455 阅读 · 0 评论