
数组
算法-数组应用
谈谈1974
火萎了,我也准备走了
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
算法-轮转数组
给定一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。输入: nums = [1,2,3,4,5,6,7], k = 3。向右轮转 1 步: [7,1,2,3,4,5,6]向右轮转 2 步: [6,7,1,2,3,4,5]向右轮转 3 步: [5,6,7,1,2,3,4]输出: [5,6,7,1,2,3,4]原创 2023-01-29 15:28:12 · 282 阅读 · 0 评论 -
算法-打家劫舍
从递推公式 dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]) 可看出递推的基础就是dp[0] 和 dp[1]。此时从 dp[i] 的定义来看,dp[0] 一定是 nums[0],dp[1] 则是 nums[0] 和 nums[1] 的最大值。解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3),偷窃到的最高金额 = 1 + 3 = 4。dp[i]:表示下标 i 以内的房屋最多可以偷窃的金额。输入:[1,2,3,1]原创 2022-11-26 15:27:44 · 788 阅读 · 0 评论 -
算法-子数组和大于等于目标值的最小长度
双指针组成窗口,前指针不断往后移动,叠加其经过的元素的值。当统计值大于等于目标值时,后指针向后移动,并减去后指针对应元素值,计算取前后指针下标相差最小的值。给定一个正整数的数组 nums 和一个正整数 target ,找出该数组中满足其。输入:target = 7, nums = [2,3,1,2,4,3]如果不存在符合条件的子数组,返回 0,解释:子数组 [4,3] 是该条件下的长度最小的子数组。原创 2022-11-20 15:24:02 · 853 阅读 · 0 评论 -
算法-移除有序数组重复项
给定有序数组 nums ,原地删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度,原创 2022-10-31 15:00:00 · 351 阅读 · 0 评论 -
算法-岛屿的周长
给定一个 的二维网格地图 ,其中 = 1 表示陆地, = 0 表示水域。网格中的格子水平和垂直方向相连,对角线方向不相连。整个网格被水完全包围,其中有一个或多个表示陆地的格子相连组成的岛屿,计算这个岛屿的周长示例 :输入:grid = [[0,1,0,0],[1,1,1,0],[0,1,0,0],[1,1,0,0]]输出:16解释:它的周长是上面图片中的 16 个黄色的边...原创 2022-07-08 20:30:13 · 526 阅读 · 0 评论 -
算法-移除目标元素
文章目录1. 原地移除元素2. 解法1. 原地移除元素给定一个数组 nums 和一个值 val,原地移除所有数值等于 val 的元素,并返回移除后数组的新长度,leetcode 链接不要使用额外的数组空间,必须仅使用 O(1) 额外空间并原地修改输入数组。元素的顺序可以改变,不需要考虑原数组中超出新长度后面的元素2. 解法使用双指针遍历目标数组,慢指针只在 nums[i] != val 的时候才向前移动,并将快指针指向的元素赋值到慢指针位置,最终返回慢指针指向的下标位置即为新数组长度pu原创 2022-05-22 15:04:49 · 267 阅读 · 0 评论 -
算法-最大子数组和
文章目录1. 最大子数组和问题2. 解法1. 最大子数组和问题给定一个整数数组 nums ,找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和,leetCode 原题示例输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 62. 解法动态规划法从左往右遍历数组,使用 dp[i] 表示直到当前下标的最大数组和,则可以简单推导出当 dp[i-1] <= 0 时,之前的累加和dp[i-1原创 2022-03-06 16:35:25 · 375 阅读 · 0 评论 -
算法-查找单调元素
文章目录1. 无序数组查找单调元素2. 解法1. 无序数组查找单调元素在无序不重复的数组中寻找满足如下条件的元素:该值左边的数均小于它该值右边的数均大于它例如给定数组 {2,5,3,7,101,18},其中元素7 的左边元素都小于它,而右边的元素都大于它,故符合条件。如不存在符合条件的元素则返回 -12. 解法根据要求可将符合条件的元素作为锚点把数组分为两个部分,则这个元素不仅要是左半部分的最大值,还要是右半部分的最小值。 基于此,借助额外数组从右往左逆序记录目标数组截至每个下标的最原创 2022-02-27 15:00:57 · 322 阅读 · 0 评论 -
算法-0~n-1中缺失的数字
文章目录1. 0~n-1中缺失的数字2. 解法1. 0~n-1中缺失的数字一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,找出这个数字,leetcode 传送门2. 解法假设 n 为 3,如果数组不缺失则其下标对应为 0,1,2,实际数组可以为 [0,2],此时使用数组下标和数组值进行异或运算,相同数字异或后为 0,那么最后剩下的就是缺失的数字 public int missingNum原创 2022-01-30 23:26:19 · 924 阅读 · 0 评论 -
算法-递增子序列最大长度
文章目录1. 计算递增子序列最大长度2. 解法1. 计算递增子序列最大长度给定一个整数数组 nums ,找到其中最长严格递增子序列的长度,以下为示例,leetcode 链接输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列2. 解法使用动态规划的解题原创 2021-02-26 14:53:09 · 1516 阅读 · 0 评论 -
算法-合并两个有序数组
1. 合并两个有序数组给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组初始化 nums1 和nums2 的元素数量分别为 m 和 n ,此处假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素LeetCode 链接示例 :输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]输入:num原创 2021-01-29 15:43:06 · 2451 阅读 · 2 评论 -
算法-数组中只出现一次的数字
1. 找出数组中只出现一次的数字这个题目其实有两种形式:一个整型数组里除了某一个数字之外,其他的数字都出现了两次,找出这个只出现了一次的数字如数组 [1,2,2,1,3], 则目标数字为 3一个整型数组里除了某两个数字之外,其他的数字都出现了两次,找出这两个只出现了一次的数字如数组 [1,2,2,1,3,5], 则目标数字为 3,52. 解法2.1 只有一个不重复数字思...原创 2019-10-27 15:54:49 · 816 阅读 · 3 评论 -
算法-找数组中出现次数超过一半的数
1. 找出数组中出现次数超过一半的数给定数组,要求找出数组中出现次数超过数组长度一半的数。2. 解法解法:方法一:先将数组中的元素排序,由于目标元素的数量超过数组长度的一半,故排序后数组的中间元素(即数组的中位数)就是目标元素。时间复杂度O(nlogn)方法二:构造一个hashmap,key为元素的值,value为元素出现的次数,然后遍历hashmap就可以找到目标元素了。时间复杂度...原创 2019-09-03 20:39:15 · 2815 阅读 · 0 评论 -
算法-相加等于N的序列
1. 相加等于N的序列给定数字 N,打印出所有相加等于 N 的序列。例如 N = 4,则打印如下:1+1+1+11+1+21+1+32+23+142. 解法回溯思想,使用额外数组来存储解空间,向下递归直至符合要求,处理后回溯到上一层 int s[] = new int[100];//存储序列的数组 int count = 0;//序列中数的存储个数 in...原创 2019-09-03 21:03:54 · 829 阅读 · 0 评论 -
算法-股票买卖问题
1. 股票买卖给定股价数组,数组元素为当天股价,可进行两次买入和卖出的交易,输出最大的收益例如: 股价数组: prices = {2,2,3,4,8,2,6};可分析得知:第一次操作:买入 prices[0] = 2,卖出 prices[4] = 8,收益 6第二次操作:买入 prices[5] = 2,卖出 prices[6] = 6,收益 4收益最大为 102. 解法动态...原创 2019-09-07 14:32:33 · 1254 阅读 · 0 评论 -
算法-数组元素组成最小整数
1. 数组元素组成最小整数给定一个数组,使用数组中的元素组成最小的整数。例如: 数组 a = {45, 78, 1, 6}输出组成的最小整数: 1456782. 解法将 int 数组转化为 String 数组,通过重写排序规则完成 String 数组的排序,使得高数位上的数尽可能小,以达到组成的整数最小的目的,之后将排序好的数组合并为 一个String 输出即可。public Stri...原创 2019-09-07 22:54:53 · 1212 阅读 · 0 评论 -
算法-完全背包硬币组合问题
1. 硬币组合问题给定硬币的面值数组,已经需要找零的目标值 target,输出能满足要求的最小硬币数量。例如: coins = [1, 2, 5], amount = 12可使用 2个 面值为5 的硬币和 1个面值为2的硬币满足要求,返回 3。2. 解法完全背包问题,面值相同的硬币可以复用,使用动态规划法。三趟遍历,每趟使用一个硬币面值更新 数组dp[0]:0 dp[1]:1 dp[...原创 2019-09-08 16:32:06 · 1323 阅读 · 1 评论 -
算法-0/1背包问题
1. 求最大价值给定 背包的容积 W,物品的体积数组 weights 和价值数组 values, 求背包能装入物品的最大价值。例如:W=6weights = {1, 2, 3, 4};values = {2, 4, 3, 6};输出最大价值 :102. 解法动态规划法, 0-1 Knapsack.一个物品只能用一次。定义一个二维数组 dp 存储最大价值,其中 dp[i][j] ...原创 2019-09-05 14:59:26 · 654 阅读 · 0 评论 -
算法-移动数组元素 0 到末尾
1. 移动数组元素 0 到末尾给定数组,将数组中为 0 的元素移动到数组末尾。例如: a = {0,1,0,2,6}移动后: a = {1,2,6,0,0}https://leetcode.com/problems/move-zeroes/description/2. 解法一个思路是使用辅助数组将元素组中不为 0 的元素提取出来,依次放入数组中即可public int[] moveZ...原创 2019-09-09 16:25:52 · 717 阅读 · 0 评论 -
算法-有序数组求目标和
1. 有序数组找出和为N的两个元素在有序数组中找出两个数,使它们的和为 target.例如: array = {0, 0, 1, 2, 5, 6}, target 为 6则 返回和为 6 的 array下标2. 解法使用双指针,一个指针指向值较小的元素,一个指针指向值较大的元素。指向较小元素的指针从头向尾遍历,指向较大元素的指针从尾向头遍历。 * 如果两个指针指向元素的和 sum ==...原创 2019-09-03 18:25:25 · 592 阅读 · 1 评论