
算法
编程理想国
这个作者很懒,什么都没留下…
展开
-
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,-100,3,99] 和 k...原创 2019-03-07 12:24:42 · 159 阅读 · 0 评论 -
LeetCode刷题指南:买卖股票的最佳时机II
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获...原创 2019-03-06 10:35:41 · 161 阅读 · 0 评论 -
LeetCode刷题指南:从排序数组中删除重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums ...原创 2019-03-06 10:15:51 · 366 阅读 · 0 评论 -
LeetCode刷题指南:合并两个有序数组
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,...原创 2019-03-05 15:12:20 · 366 阅读 · 0 评论 -
LeetCode刷题指南:搜索二维矩阵II
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例:现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, ...原创 2019-03-05 14:28:58 · 286 阅读 · 0 评论 -
LeetCode刷题指南:求众数
给定一个大小为n的数组,找到其中的众数。众数是指在数组中出现次数大于⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。示例1:输入:【3,2,3】输出:【3】示例 2:输入:【2,2,1,1,1,2,2】输出:【2】解答:使用摩尔投票法,摩尔投票法常用来求一个序列中出现次数大于【n/2】的元素,是一个线性时间复杂度和空间复杂度...原创 2019-03-04 16:57:06 · 248 阅读 · 0 评论 -
LeetCode刷题指南:只出现一次的数字
只出现一次的数字给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4解答:注意题目,某个元素只出现一次,其余每个元素均出现两次,可以使用异或来解决,相同数字异或得零,零...原创 2019-03-04 16:35:14 · 174 阅读 · 0 评论 -
基础算法之二分查找
算法核心输入:一个有序的元素列表返回:查找的元素在列表中,返回位置,否则返回null每次查找中间的元素,对于一个n个元素的列表,最多log n步。(O(log n) < O(n))def binary_search(list,item): low = 0 # 用于跟踪带查找部分下界 high = len(list)-1 # 用于跟踪带...原创 2019-03-18 20:13:29 · 128 阅读 · 0 评论 -
基础算法之快速排序
算法核心对列表根据基准值进行分区,然后递归。找出基准值分区:小于基准值的元素和大于基准值的元素对两个分区进行快速排序def quicksort(array): # 快速排序 if len(array) < 2: # 只剩一个元素,直接返回 return array else: pivot = array[0] # 基准值 ...原创 2019-03-18 20:10:29 · 160 阅读 · 0 评论 -
基础算法之选择排序
算法核心从待排序列表中找出最小或者最大元素,存入新的列表,重复该操作。def findSmallest(arr): # 找到最小元素,返回索引 smallest = arr[0] # 第一个元素 smallest_index = 0 # 索引 for i in range(1,len(arr)): # 从第二个元素开始遍历 if arr[i] &...原创 2019-03-18 19:40:07 · 138 阅读 · 0 评论