![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leecode
妖码
未来可期
展开
-
两个数组的交集 II
主要思路:首先对两个数组进行排序,然后从头使用双指针举例排序后的两个数组,指针为A、B当A<B的时候,A指针向后移动当A=B的时候,A、B指针都向后移动,并且保存共同的元素到集合中当A>B的时候,B指针向后移动这样持续到某一个数组遍历完成class Solution { public int[] intersect(int[] nums1, int[] nums2) { ArrayList<Integer> list = new Arra原创 2022-04-14 17:30:58 · 242 阅读 · 0 评论 -
只出现一次的数字
主要思路:通过异或运算,0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1),那么我们现在里面只有一个是单独的,其他的都是重复的两个,两个异或就会为0,最终就是0⊕单独数字=单独数字class Solution { public int singleNumber(int[] nums) { int len = nums.length; int res = 0; for(int i=0;i<len;i++){原创 2022-04-14 16:53:06 · 126 阅读 · 0 评论 -
存在重复元素
存在重复元素主要思路:思路一:数组排序,然后通过遍历看相邻两个元素是否相同class Solution { public boolean containsDuplicate(int[] nums) { int len = nums.length; if(len==0 || len==1){ return false; } Arrays.sort(nums); for(int i=1;i&原创 2022-04-11 21:04:24 · 569 阅读 · 0 评论 -
旋转数组解决方法
旋转数组主要思路:思路一:首先将数组全部反转,然后前半部分反转,后半部分反转例如:1234567 移动3次(这里注意一下可能移动10个,移动7次和原本的数组一样,所以 我们对位移求模,10%7==3)全部反转 7654321反转前3个 5674321反转后面部分 5671234class Solution { public void rotate(int[] nums, int k) { int len = nums.length; k =原创 2022-04-11 19:48:29 · 253 阅读 · 0 评论 -
买卖股票的最佳时机 II
买卖股票的最佳时机 II主要思路:求上升区间的高度差的累加和,对于每一个递增区间都算出来每两个之间的差值,然后累加起来解释一下为什么要划分为一个一个的递增区间:我们用1 3 2 10 和 1 3 3 10来对比我们发现在图一中,有明显下滑,我们如果要求最大的利润,是第一天买入,第二天卖出,第三天买入,第四天卖出,共计3-1 + 10-2 = 10,为什么不会考虑非要在一个递增区间的开始买入和最高卖出呢,为什么不可以在下一个递增区间卖出呢,我们由图一看到第三天的下滑,那么我们计算一个区间的从低到高原创 2022-04-10 15:20:22 · 316 阅读 · 0 评论 -
删除排序数组中的重复项
删除排序数组中的重复项主要思路是:我们将不重复的数据存储在数组的前面部分,实现过程是通过slow指针指向前面的不重复部分的最后一个,而fast指针是负责找到后面哪个元素还没有重复过:如果fast的和slow的元素相同,那么fast往后接着走,直到找到下一个不同的如果fast的和slow的元素不同,那么由于slow是最后一个不重复的元素,而要新加一个不重复的元素,slow先向后+1,然后再将fast的元素覆盖到slow所在位置,slow成了新的不重复部分的最后一个,直到fast走完整个数组clas原创 2022-04-10 14:27:37 · 150 阅读 · 0 评论