
数组
数组
alone_yue
后端开发 算法 爱好健身打球游泳
展开
-
【Leetcode数组--排序+辗转相除法最大公约数】6122.使数组可以被整除的最少删除次数
【Leetcode数组--排序+辗转相除法最大公约数】6122.使数组可以被整除的最少删除次数。原创 2022-07-17 16:35:49 · 405 阅读 · 0 评论 -
【Leetcode子数组--各类枚举法】1395. 统计作战单位数
方法二:枚举三元组方法三:枚举中间点原创 2022-07-02 14:57:36 · 303 阅读 · 0 评论 -
【Leetcode数组--排序/去重】75.颜色分类 HJ3.明明的随机数
1.这是一道排序题,难处在于如何优雅的排序,大致思想就是小的往前换,然后最终就是有序了,也可以双指针,本题采用单指针,然后用head维护要更新的地方,其实说实话也类似双指针,因为head是一个指针,遍历算第二个指针。2.抽象一下思想就是双指针,一个指针选取,一个指针更新。...原创 2022-02-18 20:41:27 · 383 阅读 · 2 评论 -
【Leetcode数组--二分法查找变形】33. 搜索旋转排序数组
文章目录Leetcode331.问题描述2.解决方案解法一:暴力法o(n)解法二:二分查找变形o(logn)Leetcode331.问题描述2.解决方案解法一:暴力法o(n)class Solution { public int search(int[] nums, int target) { int i; for (i = 0; i < nums.length ; i++) { if(nums[i]==target) ret原创 2022-01-20 21:50:53 · 426 阅读 · 2 评论 -
【Leetcode数组】31. 下一个排列
文章目录Leetcode311.问题描述2.解决方案Leetcode311.问题描述2.解决方案总结一下步骤就是(记住了思路就很清晰,实现也很简单,关键就是如何设计一个算法保证左边较小数靠右,右边较大数尽可能小1.找到 左边较小数(尽量靠右),右边较大数(尽可能小) ,并且交换-------至于找到符合规则的数对的算法,下面有描述,感觉很难归纳出来,记住吧!!2.然后升序排列右边较大数交换后的位置的后面数字序列class Solution { public void n原创 2022-01-20 20:55:56 · 4351 阅读 · 1 评论 -
【百度面试-有序矩阵】有序矩阵判断是否存在target
文章目录1.问题描述2.问题描述1.问题描述一个矩阵有序,同一行从小到大,下一行最小大于上一行最大值(其实说白了就是完全有序),问是否存在tartget【1,2,3】【4,5,6】【7,8,9】2.问题描述1.思路就是把整个矩阵看作从0到n*m-1这么长的一个数组,使用递归进行二分查找2.每读取一个start,end都转化为行和列,然后进行读取,二分比较递归3.时间复杂度当然就是o(logn)了4.但是我又一想假如给的数组是二维数组,int arr[n][m],那么arr这个指针,a原创 2021-12-02 16:55:10 · 670 阅读 · 1 评论 -
【Leetcode-第260场周赛-数组】2016. 增量元素之间的最大差值
文章目录1.问题描述2.解决方案解法一:解法二:1.问题描述2.解决方案解法一:不太巧妙的思路:1.从后往前遍历,因为结果是要求找到 i<j 的,其实从前往后应该也可以2.维护一个最小值min,一个最大值max3.如果遇到更大的直接更新min,max4.遇见小的更新min,并且计算更新后的min,max并更新ansclass Solution {public: int maximumDifference(vector<int>& nums) {原创 2021-09-26 15:10:13 · 133 阅读 · 0 评论 -
【Leetcode-第260场周赛-数组】2017. 网格游戏(前缀和)
文章目录1.问题描述2.解决方案解法一:错误的动态规划解法二:错误的前缀和解法三:正确的前缀和1.问题描述2.解决方案解法一:错误的动态规划1.先来一遍dp确定第一个机器人和最大的一条路径,并且反推回去并置零(这算是实现了,但是感觉很傻,后期想一下有没有什么好办法就是关于,记录dp选择序列的)2.然后grid已经改变了,所以我们要再来一遍dp确定第二个机器人和最大的路径,并且直接输出class Solution {public: long long gridGame(vecto原创 2021-09-26 16:12:10 · 153 阅读 · 0 评论 -
【Leetcode字符串-子字符串】3. 无重复字符的最长子串(有数组操作的重要方法:滑动窗口法)
文章目录Leetcode31.问题描述2.解决方案解法一:滑动窗口法Leetcode31.问题描述2.解决方案解法一:滑动窗口法1.已经做过不少滑动窗口题了,还是那句话,求一个子数组最长或者最短,子数组满足一定的条件,必然要用滑动窗口2.这道题一看题目就是子数组符合条件,如果不重复加入hashmap,并更新最大值3.重复了就left++,直到不重复public class lc3 { public int lengthOfLongestSubstring(String s)原创 2021-11-28 17:28:11 · 213 阅读 · 1 评论 -
【Leetcode数组】846. 一手顺子(Java中TreeMap的key排序的使用)
文章目录Leetcode8461.问题描述2.解决方案Leetcode8461.问题描述2.解决方案public class lc846 { public boolean isNStraightHand(int[] hand, int groupSize) { TreeMap<Integer,Integer> count=new TreeMap(); for (int i : hand) { if(count.cont原创 2021-11-28 14:53:56 · 548 阅读 · 1 评论 -
【Leetcode数组--矩阵】59. 螺旋矩阵 II 48. 旋转图像(很清晰的模拟方法,循环不变量原则)
文章目录Leetcode591.问题描述2.解决方案Leetcode591.问题描述2.解决方案1.整体思路呢,看图和注释就明白了,就是一圈一圈的填充,其中每一圈都分四条边填充2.重要的是这个循环不变量原则,这个通俗解释就是你需要使用你所定义的变量取描述你所在的圈和边,也就是第n圈,第k条边等等,都是使用一组变量去表示的,而不能加入用数字模拟出的一些值来描述圈和边3.这样就不具备下一圈下一条边还适用的特点,这个是有点难以理解的,多理解!!!class Solution {publ原创 2021-10-07 17:23:23 · 129 阅读 · 3 评论 -
【Leetcode数组--子数组--滑动窗口】209. 长度最小的子数组 904. 水果成篮 1004. 最大连续1的个数 III 76. 最小覆盖子串(有数组操作中重要的方法:滑动窗口!!!!)
文章目录Leetcode2091.问题描述2.解决方案Leetcode2091.问题描述2.解决方案原创 2021-10-07 11:33:02 · 567 阅读 · 1 评论 -
【Leetcode数组--数组变化】977. 有序数组的平方
文章目录Leetcode9771.问题描述2.解决方案解法一:朴实无华暴力法 (时间复杂度:O(n+nlogn))解法二:双指针法(时间复杂度:O(nlogn))Leetcode9771.问题描述2.解决方案解法一:朴实无华暴力法 (时间复杂度:O(n+nlogn))class Solution {public: vector<int> sortedSquares(vector<int>& nums) { for(int i=0;i<原创 2021-10-07 11:28:18 · 193 阅读 · 1 评论 -
【Leetcode数组--数组变化】27. 移除元素(有关于双指针的理解!!)
文章目录Leetcode271.问题描述2.解决方案解法一:自己的一边交换一边改变数组长度方法(最优解法)解法二:暴力解法三:双指针Leetcode271.问题描述大致题目要求:返回长度len,并且要求nums的前len个元素是移除val后的元素集合,至于顺序,无关!2.解决方案解法一:自己的一边交换一边改变数组长度方法(最优解法)就是遇到val就和数组最后一个元素len-1交换,并且下次遍历还是从这个i开始,并且len–,最后val应该都会被换到nums的最后,并且len也会被更新原创 2021-10-07 10:47:48 · 301 阅读 · 1 评论 -
【Leetcode数组--二分查找】34. 在排序数组中查找元素的第一个和最后一个位置
文章目录Leetcode341.问题描述2.解决方案解法一:二分查找迭代解法二:不讲码德调用STL库函数方法Leetcode341.问题描述2.解决方案解法一:二分查找迭代1.先二分查找找到target对应index,但是具体找到的是哪一个不确定2.然后我们只需要用i,j分别向前和向后遍历找边界就好了3.代码实现有细节,二分查找就不说了,就是向前向后遍历的细节错误的遍历条件(错误样例如图):i>=0&&j<=nums.size()-1正确的遍历条件:i>原创 2021-10-07 10:08:41 · 118 阅读 · 1 评论 -
【Leetcode数组--二分查找】704. 二分查找(循环不变量原则!!)
文章目录Leetcode7041.问题描述2.解决方案解法一:左闭右闭递归Leetcode7041.问题描述2.解决方案1.有序加无重复—>符合二分的前提条件解法一:左闭右闭递归class Solution {public: int find(vector<int>& nums,int begin,int end,int target){ if(begin>end) return -1; int mid=(begi原创 2021-10-06 21:39:47 · 126 阅读 · 1 评论 -
【Leetcode数组】数组理论基础
文章目录1.数组定义基础2.C++和java的二维数组内存空间1.数组定义基础1.下标从0开始2.内存空间的地址是连续的2.C++和java的二维数组内存空间1.毋庸置疑C++的二维数组内存空间肯定是连续的2.而java则不是,由于java没有暴露指针,同时也不对程序员暴漏其元素的地址,寻址操作完全交给虚拟机。public static void test_arr() { int[][] arr = {{1, 2, 3}, {3, 4, 5}, {6, 7, 8}, {9,9原创 2021-10-06 21:23:10 · 194 阅读 · 1 评论