![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
码上追梦
这个作者很懒,什么都没留下…
展开
-
LeetCode 旋转数组
题目 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 示例 1: 输入: [1,2,3,4,5,6,7] 和 k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右旋转 1 步: [7,1,2,3,4,5,6] 向右旋转 2 步: [6,7,1,2,3,4,5] 向右旋转 3 步: [5,6,7,1,2,3,4] 示例 2: 输入: [-1,-...原创 2018-06-21 18:19:33 · 337 阅读 · 0 评论 -
排序算法:交换排序之冒泡排序
介绍 1.冒泡排序同样属于交换排序 2.冒泡排序的基本思路为: 比较相邻元素的大小,如果元素大于(小于也行,看你要从大到小,还是从paixun小到大)下一个元素,则交换,然后比较下一个元素和下下一个元素,这样一次的冒泡排序就会使一个最大值(最小值)排在顶端,如果总共有n个元素,那么只需n-1次(这个可以优化,待会会讲)这样的冒泡排序就可以将所有元素排序 分析 下面我以简单的[1, 4...原创 2018-07-29 13:49:33 · 234 阅读 · 0 评论 -
二分搜索算法
背景 公司里每次面试必然有二分查找,平常想想,觉得挺简单也就没动手写,今天想起来决定写篇博客加强记忆。(纸上得来终觉浅,绝知此事要躬行) 介绍 二分搜索算法,也称折半搜索,是在一个有序数组中搜索某一特定值的搜索算法。大致过程为:从数组中间开始搜索,如果数组中间元素正好等于该特定值,则搜索结束;如果该特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元...原创 2018-07-18 23:42:13 · 838 阅读 · 0 评论 -
栈的应用:表达式求值
背景 在写这篇博客之前让我想到了一年多以前去小米面试,就是这道面试题让我挂了,后来听同事说这不就是数据结构里的例题吗,后来一看还真是,不过书里不太完整,看了几篇博客,学习了下解决方法,但是写的还是不太完美,不知道读者你有没有更优雅的代码,废话不多说开始学习吧。 介绍 栈大家都知道,一种先进后出的数据结构,可以自己使用线性表实现(数组,链表)。这篇写的是栈的应用,一般有两个,一个是迷宫问题...原创 2018-07-03 23:45:13 · 2948 阅读 · 0 评论 -
LeetCode 买卖股票的最佳时机 II
题目 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 示例 1: 输入: [7,1,5,3,6,4] 输出: 7 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖...原创 2018-06-16 21:05:13 · 262 阅读 · 0 评论 -
排序算法:交换排序之快速排序
介绍 1.快速排序属于交换排序(如果发现元素次序相反,则交换元素位置),而交换排序是属于内排序一种,内排序即所有数据都存在内存中,与外排序不一样,这个后续文章再说。 2.快速排序采用分而治之的思想,每次找到一个元素,将所有元素与之对比,将小于该元素的元素放在左边,大于则放在右边(方向可以不同,这里只是举个例子),这样再从左边的这堆元素中,按照刚刚同样的方法操作,右边也同样,就这样一直递归下去,...原创 2018-06-23 14:55:35 · 888 阅读 · 0 评论 -
LeetCode 只出现一次的数字
题目 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 示例 1: 输入: [2,2,1] 输出: 1 示例 2: 输入: [4,1,2,1,2] 输出: 4 解答 class Solution { public int singleNu...原创 2018-06-22 19:04:36 · 269 阅读 · 0 评论 -
LeetCode 删除排序数组中的重复项
题目 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例 1: 给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。 示例...原创 2018-06-14 21:56:19 · 230 阅读 · 0 评论 -
LeetCode 存在重复
题目 给定一个整数数组,判断是否存在重复元素。 如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。 示例 1: 输入: [1,2,3,1] 输出: true 示例 2: 输入: [1,2,3,4] 输出: false 示例 3: 输入: [1,1,1,3,3,4,3,2,4,2] 输出: true 解答 class Sol...原创 2018-06-21 22:47:43 · 313 阅读 · 0 评论 -
排序算法:选择排序之直接选择排序
介绍 1.直接选择排序的思路是: 每一趟从待排序的的元素中取出最大或者最小的元素,排在已经排好序的子表的最后,直到所有元素都排好序。 2.直接选择排序适合从大量元素中选择一部分排序元素,如从100个元素取出前10排好序的元素 分析 下面我以简单的[1, 4, 2, 8, 5, 3]为例,画图解释一下 代码 public static void selectSort(int[...原创 2018-07-29 17:59:59 · 528 阅读 · 0 评论