您的位置:首页 > 健康 > 养生 > 电脑怎么制作视频短片_开网店哪个电商平台好_网络广告发布_泉州百度广告

电脑怎么制作视频短片_开网店哪个电商平台好_网络广告发布_泉州百度广告

2024/12/23 3:40:58 来源:https://blog.csdn.net/weixin_46447549/article/details/142302958  浏览:    关键词:电脑怎么制作视频短片_开网店哪个电商平台好_网络广告发布_泉州百度广告
电脑怎么制作视频短片_开网店哪个电商平台好_网络广告发布_泉州百度广告

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、283.移动零
    • 1. 解析
    • 2. 代码
    • 3. 更多解
  • 二、704. 二分查找
    • 1.解析
    • 2.代码
  • 三、27.移除元素
  • 四、977.有序数组的平方
    • 收货
    • 代码


前言

遗忘多年的CSDN密码又被我想起来了
每天都学这么多东西,还是应该留下属于自己的一些记录
不然都忘记了夺亏(笔芯:)

今天在b站看了一个up的java学习路线,感觉其中很多东西都似曾相识,但在脑海中是零散的碎片。
我想试试能不能把这些碎片串起来,千里之行始于leetcode! 这里加入那个视频的链接~ java学习路线

一、283.移动零

1. 解析

看到题干之后,虽然明知道是数组题,但是我还是想起了我最爱的双指针(bushi
可能潜意识里觉得双指针时间复杂度会更低(事实证明确实如此,时间复杂度O(N))

大概思路就是,准备 first 和 last 两个指针(这里可以理解为分别指示每个时刻0区间的首和尾):
①从前向后遍历数组,找到第一个0的位置。(如果没有0或者仅有一个0在数组最后就可以直接返回了);
②last 指针指向first + 1 的位置,如果值不为0,就和 first 指向的元素调换,随后first和last指针后移;如果值为0,不做调换,只将last指针后移;
③当last指针移动到数组末尾,整个0区间也移动到了数组末尾,返回;

这道题还是练到一些java数组语法的,但不多(

2. 代码

class Solution {public void moveZeroes(int[] nums) {int first = 0;int last = 0 ;//把first 定位到第一个0的位置,或者数组中压根儿没0while(first < nums.length && nums[first] != 0 ){first ++;}//如果没0或者只有一个零在末尾,直接返回,否则last = first后面的那个if(first == nums.length || first == nums.length - 1){return;}else{last = first + 1 ;//last也指向第一个0}//last向后遍历while(last < nums.length){if( nums[last] != 0){//调换first和lastint temp = nums[first];nums[first] = nums[last];nums[last] = temp;first += 1;}last += 1;}return;}
}

在这里插入图片描述

3. 更多解

看了官解发现也是双指针(笑活
而且在评论区看到一种神奇的方法
感觉类似于对于每轮for循环,cont记载了这个元素之前0区间的长度,这样就可以和0区间的第一个0交换,代码更简单了,时间复杂度也是O(N)在这里插入图片描述

二、704. 二分查找

1.解析

没啥好说的,背代码就完事了

2.代码

class Solution {public int search(int[] nums, int target) {//定义首尾的指针int left = 0;int right = nums.length - 1 ;int mid = 0;//循环条件是小于等于while(left <= right){mid = (left + right) / 2;if(nums[mid] == target){return mid;}else if(nums[mid] < target){left = mid + 1;}else{right = mid - 1;}}return -1;}
}

在这里插入图片描述

三、27.移除元素

这个跟283挺像的

class Solution {
public:int removeElement(vector<int>& nums, int val) {int count = 0;int temp = 0;int length = nums.size();for(int i = 0;i < length; i++){if(nums[i] == val){count += 1 ;}else{temp = nums[i];nums[i] = nums[i - count];nums[i - count] = temp;}}return length - count;}
};

在这里插入图片描述

四、977.有序数组的平方

收货

好困
归并排序可以用两种方法写。事实上前一个更好理解,第二个只是写出来之后觉得可以优化。
学到了java数组的定义 int[] name = new int[length],添加元素必须用下标,但是Vector可以用 .add()方法
还有就是数组的排序方法 Arrays.sort(name)

代码

class Solution {public int[] sortedSquares(int[] nums) {int[] sortedNums = new int[nums.length];int p1 = -1;for (int i = 0; i < nums.length; i++){if(nums[i] < 0){p1 = i; //指向最后一个小于0的下标}nums[i] = nums[i] * nums[i];}//定位最后一个负数和第一个非负数int p2 = p1 + 1;int index = 0;//归并排序// while(p1 > -1 || p2 < nums.length){//     if(p2 >= nums.length){//         sortedNums[index] = nums[p1];//         --p1;//     }else if(p1 <= -1){//         sortedNums[index] = nums[p2];//         ++p2;//     } else if(nums[p1] <= nums[p2]){//         sortedNums[index] = nums[p1];//         --p1;//     }else{//         sortedNums[index] = nums[p2];//         ++p2;//     }//     ++index;// }while(p1 > -1 || p2 < nums.length){if(p2 >= nums.length || p1>=0 && nums[p1] <= nums[p2]){sortedNums[index] = nums[p1];--p1;}else{sortedNums[index] = nums[p2];++p2;}++index;}return sortedNums;}}

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com