h网站模板彩票网站怎么做收银
web/
2025/9/26 4:02:16/
文章来源:
h网站模板,彩票网站怎么做收银,平台开发流程,洛阳高新区做网站公司优选算法
一、leetcode283.移动零
题目分析#xff1a;
给定一个数组 nums#xff0c;编写一个函数将所有 0 移动到数组的末尾#xff0c;同时保持非零元素的相对顺序。
算法原理#xff1a;
快排原理#xff1a;
数组划分或者数组分块#xff1a;即在一定…优选算法
一、leetcode283.移动零
题目分析
给定一个数组 nums编写一个函数将所有 0 移动到数组的末尾同时保持非零元素的相对顺序。
算法原理
快排原理
数组划分或者数组分块即在一定的规则下将数组划分成若干个区间在原数组上进行处理
解决方法使用双指针在数组中是利用数组下标来充当指针双指针一个负责条件就绪通知另一个指针另一个指针负责处理任务
解决过程cur负责遍历数组可以划分为处理过和未处理过区域当前位置之前是处理过的区域之后到数组结尾是未处理区域dest负责在一处理过的数组区域之中根据规则划分数组块一开始没有划分已处理区域所以指向为空数组中就是-1在遍历的过程中保持数组块的划分规则是保持不变的
当遍历完数组之后就得到最终需要的结果
代码实现
void moveZeroes(vectorint nums) {int cur0;int dest-1;for(;curnums.size();cur){if(nums[cur]0){continue;}swap(nums[dest],nums[cur]);}return;
}二、leetcode1089.复写零
题目分析
给你一个长度固定的整数数组 arr 请你将该数组中出现的每个零都复写一遍并将其余的元素向右平移。注意请不要在超过该数组长度的位置写入元素。请对输入的数组就地进行上述修改不要从函数返回任何东西。
算法原理
双指针算法先异地操作然后优化成双指针下的就地操作
异地操作一个指针负责遍历数组检查是否触发条件另一个数组负责将符合条件的数组数据拷贝到一个新的数组当中
就地操作先找到最后一个复写位置的数(使用双指针)检查此时的dest位置是否越界cur指向此位置dest从最后一个位置开始向前遍历
代码实现
void duplicateZeros(vectorint arr) {int cur 0;int pos -1;for (; cur arr.size(); cur) {if (arr[cur]) {pos;} else {pos 2;}if (pos arr.size() - 1) {break;}}if (pos arr.size()) {arr[arr.size()-1]0;cur--;pos-2;}while (cur0) {if (arr[cur]) {arr[pos--] arr[cur--];} else {arr[pos--] arr[cur];arr[pos--] arr[cur];cur--;}}
}三、leetcode202.快乐数
题目分析
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」 定义为
对于一个正整数每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1那么这个数就是快乐数。
如果 n 是 快乐数 就返回 true 不是则返回 false 。
算法原理
使用快慢双指针找到环上重复的值是否是1由于抽屉原理可知
代码实现
int bitsum(int n) {int sum 0;while (n) {sum ((n % 10) * (n % 10));n / 10;}return sum;}bool isHappy(int n) {int slow n, fast n;do {slow bitsum(slow);fast bitsum(fast);fast bitsum(fast);} while (slow ! fast);if (slow 1) {return true;}return false;}四、leetcode11.盛最多水的容器
题目分析
给定一个长度为 n 的整数数组 height 。有 n 条垂线第 i 条线的两个端点是 (i, 0) 和 (i, height[i])。
找出其中的两条线使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
**说明**你不能倾斜容器。
算法原理
利用单调性使用双指针解决问题上世纪就按复杂度是On开始两个指针指向数组的两边不断往中间逼近并且记录容积相遇时比较所有容积中最大的往两边逼近时去较小或者相等的一个数
代码实现
int maxArea(vectorint height) {int left 0;int right height.size() - 1;int ret 0;vectorint v;retheight[left] height[right]?height[left]:height[right];v.push_back((right-left)*ret);while (left ! right) {if (height[left] height[right]) {ret (right - left) * height[right];v.push_back(ret);right--;} else {ret (right - left) * height[left];v.push_back(ret);left;}}int max v[0];for (auto e : v) {if (max e) {max e;}}return max;
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/81989.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!