随笔分类 -  数据结构与算法

没有小偷比我更专业(打家劫舍)
摘要:没有小偷比我更专业(打家劫舍)一:写在前面 动态规划真的很重要,无论大公司小公司都会涉及到。博主最近在秋招,遇到了两个打家劫舍的笔试题 ,或者说是变形题。4399的猜密码,给你一串数字,相邻2个数字不能一起用,让你计算出这串数字能获得的最大和。另外一个小公司的摘苹果,一排苹果树,每颗树上都有一定的苹果,相邻的两棵树不能摘,问你能 阅读全文

posted @ 2022-09-20 09:39 Love&Share 阅读(62) 评论(0) 推荐(0) 编辑

希尔排序
摘要:思想: 逐步分组进行粗调,最后进行插入排序。 分组的话一开始两个元素之间相隔的距离是总元素数量的一半,然后再变为1半,最后变为1,每一次都是使用插入排序来做的,我排两个元素和一个元素,总比排很多个元素要好。 代码: public static void sort(int[] nums) { int 阅读全文

posted @ 2022-04-09 10:47 Love&Share 阅读(31) 评论(0) 推荐(0) 编辑

动态规划-最长连续递增序列
摘要:给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。 思路: 严格和前一个数比较,而不是前面的某个数。 代码: class Solution { public int findLengthOfLCIS(int[] nums) { int len = nums.length; 阅读全文

posted @ 2022-03-27 14:30 Love&Share 阅读(46) 评论(0) 推荐(0) 编辑

动态规划之最长递增子序列
摘要:给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 示例 1: 输入:nums = [10,9,2,5,3,7,101,18 阅读全文

posted @ 2022-03-24 10:41 Love&Share 阅读(51) 评论(0) 推荐(0) 编辑

摘要:一、什么是栈?1.后进者先出,先进者后出,这就是典型的“栈”结构。2.从栈的操作特性来看,是一种“操作受限”的线性表,只允许在端插入和删除数据。 二、为什么需要栈?1.栈是一种操作受限的数据结构,其操作特性用数组和链表均可实现。2.但,任何数据结构都是对特定应用场景的抽象,数组和链表虽然使用起来更加 阅读全文

posted @ 2021-10-26 22:46 Love&Share 阅读(322) 评论(0) 推荐(0) 编辑

算法和空间复杂度分析
摘要:看代码: 1 int cal(int n) { 2 int sum = 0; 3 int i = 1; 4 for (; i <= n; ++i) { 5 sum = sum + i; 6 } 7 return sum; 8 } 从cpu角度来看,这段代码每一行都执行类似操作 读数据-运算-写数据 阅读全文

posted @ 2021-05-27 00:17 Love&Share 阅读(347) 评论(0) 推荐(1) 编辑

哈希表
摘要:一 导读: 首先要明确一个概念:哈希表不是 算法,而是一种数据结构 。 我们都知道,java代码可以操作数据库,并且从从数据库再返回数据。但是如果频繁的对数据库进行操作,效率较低且存在安全隐患,这时就诞生出了缓存产品,也就是现在常用的redis或者Memcache ,但是以前的 老程序员们没有这些产 阅读全文

posted @ 2021-04-22 22:08 Love&Share 阅读(80) 评论(0) 推荐(0) 编辑

二分查找
摘要:思路:1.首先确定该数组中间的下标mid = (left + right) / 22.然后让需要查找的数findval和arr[mid]比较2.1 如果findVal > arr[mid],说明你要查找的数在mid的右边,因此 需要递归的向右查找。2.2 如果findVal < arr[mid],说 阅读全文

posted @ 2021-03-22 09:22 Love&Share 阅读(36) 评论(0) 推荐(0) 编辑

桶排序
摘要:一 导读 我们先思考这样一个数学问题,如何取出一个数的个位,十位,百位。。。? 以128为例,要取出个位8我们可以对其进行直接取余10操作 128 % 10 = 8,取出十位2我们可以先对其除以10再取余10。 128 % 10 = 12,12 % 10 = 2; 二 桶排算法思路图解 假设现在有数 阅读全文

posted @ 2021-03-19 09:26 Love&Share 阅读(46) 评论(0) 推荐(0) 编辑

快速排序
摘要:一 基本思想 先给定一个数组{-3,2,0,5,-4,1},设定一个标杆,假设就是中间值0,然后一头一尾两个指针,去对数组进行重新排序,排序的结果为中间值0的左边的数全部小于0,而标杆0的右边的数全部大于0。此时数组为{-3,-4,0,5,2,1}。然后再用相同的思想对0左边的数进行递归得{-4,- 阅读全文

posted @ 2021-03-03 21:04 Love&Share 阅读(75) 评论(0) 推荐(0) 编辑

插入排序
摘要:一 思想 插入排序的基本思想就是把数组看成两部分,前面一部分是有序排好的数组,后面一部分是待排的数组 比如 3,1,2,5 四个数,一开始可以把3看做前面一部分,1,2, 5为后面待排的无序数组 代码分步分析 1 package Sort; 2 3 import java.util.Arrays; 阅读全文

posted @ 2021-02-08 11:46 Love&Share 阅读(138) 评论(0) 推荐(0) 编辑

选择排序
摘要:一种内部排序,选出某个元素,按照规则交换 基本思想: 重复(元素个数-1)次 把第一个没有排序过的元素设置为最小值 遍历每个没有排序过的元素 如果元素 < 现在的最小值 将此元素设置成为新的最小值 将最小值和第一个没有排序过的位置交换 第一次:遍历数组,找到最小值后,与arr[0]交换第二次:从ar 阅读全文

posted @ 2021-02-05 13:24 Love&Share 阅读(80) 评论(0) 推荐(0) 编辑

堆排序
摘要:一--大顶堆和小顶堆 节点的值大于或等于左右孩子节点的值叫大顶堆,节点的值小于或等于其左右孩子的值叫做小顶堆。 大顶堆:arr[i] >= arr[2i+1] && arr[i] >= arr[2i+2] 小顶堆:arr[i] <= arr[2i+1] && arr[i] <= arr[2i+2] 阅读全文

posted @ 2021-02-01 13:07 Love&Share 阅读(62) 评论(0) 推荐(0) 编辑

两数之和等于目标数【数组专题】
摘要:给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。 说明: 返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重 阅读全文

posted @ 2021-01-22 14:32 Love&Share 阅读(174) 评论(0) 推荐(0) 编辑

数组中的第K个最大元素 【数组专题】
摘要:数组中的第K个最大元素在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2: 输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 阅读全文

posted @ 2021-01-12 20:12 Love&Share 阅读(79) 评论(0) 推荐(0) 编辑

冒泡排序
摘要:有如下数组 int nums[ ] = {4,2,8,0,5,7,1,3,9} 排序步骤如图。 排序轮数 = 元素个数 - 1; 各轮数对应的排序次数 = 元素总个数 - 排序轮数 - 1; 代码: 1 for(int i = 0 ;i < 9 ; i++) { // 排序轮数 2 for(int 阅读全文

posted @ 2021-01-12 14:39 Love&Share 阅读(80) 评论(0) 推荐(0) 编辑

颜色分类(数组专题)
摘要:颜色分类给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 进阶: 你可以不使用代码库中的排序函数来解决这道题吗?你能想出一个仅使用常数空间的一趟扫描算 阅读全文

posted @ 2021-01-09 17:49 Love&Share 阅读(246) 评论(0) 推荐(0) 编辑

移除元素【数组专题】
摘要:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 示例 1: 给定 nums = [3, 阅读全文

posted @ 2021-01-08 18:06 Love&Share 阅读(67) 评论(0) 推荐(0) 编辑

移动零【数组专题】
摘要:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 示例: 输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明: 必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。 解题思路:本题的解题思路还是可以用模板; if(nums.siz 阅读全文

posted @ 2021-01-08 18:02 Love&Share 阅读(52) 评论(0) 推荐(0) 编辑

删除数组中重复的元素plus【数组专题】
摘要:给定一个增序排列数组 nums ,你需要在 原地 删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 说明: 为什么返回数值是整数,但输出的答案是数组呢? 请注意,输入数组是以“引用 阅读全文

posted @ 2021-01-08 17:50 Love&Share 阅读(86) 评论(0) 推荐(0) 编辑

导航