随笔分类 - LeetCode/牛客算法与数据结构
摘要:
代码地址: https://gitee.com/Tom-shushu/Algorithm-and-Data-Structure.git 一、ArrayList自定义封装 package com.zhouhong; /** * @ClassName: array * @Description: 二次封
阅读全文

摘要:一、题目: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明: 1.必须在原数组上操作,不能拷贝额外的数组。 2.尽量减少操作次数。 二、思路: 分为两种情况: 1.第一位
阅读全文
摘要:链表是面试中最常见的一种题型,因为他的每个题的代码短,短短的几行代码就可以体现出应聘者的编码能力,所以它也就成为了面试的重点。 链表常见的操作有1.打印链表的公共部分,2.删除链表的倒数第K个节点,3.翻转单向链表,4.环形约瑟夫环问题,5.判断链表是否是一个回文链表,6.两个链表生成相加链表,7.
阅读全文
摘要:二分查找的基本思想: 是将n个元素分成大致相等的两部分,取arr[n/2]与target做比较,如果target=arr[n/2],则找到target,算法中止;如果target<arr[n/2],则只要在数组arr的左半部分继续搜索target,如果target>arr[n/2],则只要在数组ar
阅读全文
摘要:我们通常所说的堆是指二叉堆,二叉堆又称完全二叉树或者叫近似完全二叉树。二叉堆又分为最大堆和最小堆。 堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。数组可以根据索引直接获取元素,时间复杂度为O(1),也就是常量,因此
阅读全文
摘要:备注:这里使用的插入排序和选择排序都是经过优化后的详细优化请查看上一条博客,编译器使用DEV-C++ 冒泡排序算法的运作如下:(从后往前) 1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数
阅读全文
摘要:插入排序第一种:交换法| 8 | 6 | 3 | 2 | 10 | 9 | 11 | 4 | 5 |第一个元素就不需要考虑了,直接看第二个元素6,因为6<8,所以6与8交换位置得到:| 6 | 8 | 3 | 2 | 10 | 9 | 11 | 4 | 5 |在考虑第三个元素3,因为3<8,交换3和
阅读全文
摘要:用C++语言实现选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致
阅读全文
摘要:1.二分搜索树特点:每个节点的键值大于左孩子; 每个节点的键值小于右孩子;以左右孩子为根的子树仍为二分搜索树 ;不是完全二叉树2.优势:高效,不仅可以查找数据;还可以高效的插入,删除数据-动态维护数据3.二分搜索树的局限性: 1.二分搜索树的排列不同,对应的时间复杂度不同:最差可以退化为链表的形式O
阅读全文
摘要:一,单路快排1.测试用例: 2.归并排序: 3.优化时要用的插入排序: 4.单路快排实现: 图解单路快排: 5.单路快排的测试结果: 可见单路快排在随机测试和近乎有序的情况下效率是完全可以接受的,但是在存在大量重复的元素中表现不是太好,下面我们进行一步一步的优化:二,双路快排:只需改一下主函数: 图
阅读全文
摘要:原理: 设两个有序的子序列(相当于输入序列)放在同一序列中相邻的位置上:array[low..m],array[m + 1..high],先将它们合并到一个局部的暂存序列 temp (相当于输出序列)中,待合并完成后将 temp 复制回 array[low..high]中,从而完成排序。 在具体的合
阅读全文
摘要:测试环境为DEV-C++,并且选择排序,插入排序,冒泡排序,均为优化后的,若想了解具体优化过程,请参照:https://blog.csdn.net/qq_40164152 测试用例: 选择排序:基本思想:每一趟在n-i+1(i=1,2,…,n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录
阅读全文
摘要:备注:本文参照《剑指offer第二版》 题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数, 输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 1、分析 首先选取数组中右上角的数字。如果该数字等于要查找的数字,查找过程结束;如
阅读全文
摘要:数组中重复的数:题目:找出数组中重复的数,题目描述:在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的
阅读全文
摘要:【程序9】 题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3。编程找出1000以内的所有完数 //第一种public class A09 {public static void main(String[] args) {int s;for (int i = 1; i <
阅读全文
摘要:【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21.... 具体分析如下: 分析:从第一个兔子开始,第1个月1只兔子,由于“
阅读全文
摘要:题目:一个小猴子边上有100根香蕉,它要走过50米才能到家,每次它最多搬50根香蕉,(多了就被压死了) , 它每走1米就要吃掉一根,请问它最多能把多少根香蕉搬回家里? 分析: 当然了这个题按平时的思想:一共100个香蕉,来回刚好100米,所以带回0根香蕉。 很显然滴滴面试题不是这么容易的,那么请看正
阅读全文