![](https://img-blog.csdnimg.cn/20201115205857989.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Algorithm
算法相关
秦淏
天赐食于鸟,但绝不投食于巢!
展开
-
【循环】问题:打印9行的倒三角【等腰/等边】
行数 *数 space数***************** |第1行 17 0 *************** |第2行 15 1 ************* |第3行 13 2 *********** |第4行 11 3 ********* |第5行 9 4 ******* |第6行 7 5 ***** |第7行 5 6 *** |第8行 3 7 * |第9行 1 8规律是什么?...原创 2021-06-21 09:37:06 · 231 阅读 · 0 评论 -
【数组】问题:输出有序数组中元素K出现的次数
给一个有序的int数组和数组当中元素k,输出元素k在数组当中出现的次数。例如:[2,3,4,5,5,5,6,8] k=5 output:3 要去算法的时间复杂度不超过O(n),也就是说不能去遍历数组了/** * 是排序数组,那么第一个K 之前的数都会比K 小,最后一个K之后的数都会比K大 * 思路: * 分两步解决: * 二分法找到第一个K * 二分法找到第二个K * 实现? * 二分: * 1.如果中间的数比K大,那么K出现在前半段 * 2原创 2021-06-21 09:14:07 · 817 阅读 · 0 评论 -
玩转数组:插入排序
import java.util.Arrays;/** * 插入排序:直接插入排序、二分插入排序、链表插入排序 * <p> * 思想: * 将一组数据分成两组,分为有序组与待插入组 * 每次从待插入组中取出一个元素,与有序组的元素进行比较,找到合适的位置,插入 * 直到带插入组元素个数为0 * 1.涉及到元素的移动 * 2.把第一个元素视为有序数组,其他均为待插入组 */public class TestInsertSort { public static voi原创 2021-06-21 08:57:27 · 123 阅读 · 0 评论 -
玩转数组:快速排序
/** * 特点:一次循环,递归思想 * 思想: * 1.在数据集中,选择一个元素作为 基准值 * 2.所有小于基准值的元素 在左,所有大于基准值的元素,在右 * 3.对基准的左右两边的两个子集,重复1,2,直到所有子集剩下一个元素为止 */public class TestQuickSort { public static void main(String[] args) { int[] array = {9, 5, 3, 7, 1}; quickSo原创 2021-06-21 08:53:00 · 66 阅读 · 0 评论 -
玩转数组:二分法
/** * 二分法 dichotomy 也称 binarySearch * 思想:一分为二 * 设[a,b]为闭区间,逐次二分就是找到中点n,造出如下区间[a,n] [n,b] * 再对确定的某一区间[a,n]或者[n,b]进行二分 * 以[a,n] 为例,m为中点,分为[a,m] [m,n] * 以此下去,直到找到为止 * 二分常用作数组中某一元素查找,可提高效率,仅对有序数组有效 * <p> * 源码:Arrays.binarySearch(int[] a,int key)原创 2021-06-21 08:49:27 · 217 阅读 · 0 评论 -
玩转数组:选择排序
/** * 思想: * 拿到固定位置的数,依此和后面的数进行比较,找到应该在的位置,则交换位置 * 实现方式: * 从小到大排序,则从头找最小的,最小的放在最前面,比较一轮交换一次 * <p> * 区别于冒泡排序: * 冒泡是相邻的两两比较,满足则交换(1V1) * 选择是固定位置和其余位置比较,满足则交换(1V5) */public class TestSelectSort { public static void main(String[] args) {原创 2021-06-21 08:45:35 · 73 阅读 · 0 评论 -
玩转数组:冒泡排序
/** * 推导式,不要去背 sort1-->sort2-->sort3 * 思想:相邻的两个数组元素进行比较,满足比较条件则进行位置交换 */public class TestBubbleSort { /** * 定义一个方法,以便打印数组 * @param array */ public static void printArray(int[] array){ for (int i = 0; i < array.le原创 2021-06-21 08:44:07 · 162 阅读 · 0 评论 -
【数组】问题:两个有序数组合并为一个有序数组
import java.util.Arrays; /** * for循环实现 扩容的思想 */ public class TestArraysUnionAll1 { public static void main(String[] args) { int[] a1 = {2,3,5,8,9}; int[] a2 = {2,5,7}; //创建一个足够大的数组 int[] array =..原创 2021-06-15 17:44:12 · 333 阅读 · 0 评论