划分数组问题
来源:互联网 发布:胖熊数据库微博 编辑:程序博客网 时间:2024/06/08 00:31
今天做了一道题目,是划分数组的问题:
给出一个整数数组 nums 和一个整数 k。划分数组(即移动数组 nums 中的元素),使得:
- 所有小于k的元素移到左边
- 所有大于等于k的元素移到右边
返回数组划分的位置,即返回满足 nums[i] 大于等于 k的数组中第一个位置 i。
在做这道题的时候,思想十分的简单,就相当于快速排序的partition算法一样,但是唯一不同的是,这个数组的第0的位置nums[0]是有效数字,即给一个数字,让在这个数组里进行划分,和partition方法不一样。
这道题的一个必须注意的地方是边界一定要确定如何处理,是采用low < high,还是low <= high,要考虑清楚
这样的题,一般都是有固定模板的,都是用两个指针,从两头开始处理,最外层是一个while循环,控制程序可以一直执行,在里面每个指针又分别对应一个while循环,这样保证从两头夹逼这个数组,时间复杂度是O(n),关键是边界的确定。
int partitionArray(vector<int> &nums, int k) {
if (nums.size() == 0) return 0;
int low = 0;
int high = nums.size() - 1;
while (low <= high) {
while (low <= high && nums[low] < k) low++;
while (low <= high && nums[high] >= k) high--;
if (low <= high) {
swap(nums[low], nums[high]);
low++;
high--;
}
}
return low;
}
0 0
- 划分数组问题
- 和差值最小的数组划分问题
- 数组划分
- 数组划分
- 数组划分
- 数组划分
- 数组划分
- 数组划分
- 数组划分
- 划分问题
- LintCode-数组划分
- LintCode 数组划分
- LintCode:数组划分
- LintCode 数组划分
- lintcode之数组划分
- LintCode:数组划分
- 【LintCode】数组划分
- 数组奇数偶数划分
- TwoSum解题
- 计算机网络学习笔记day2
- 树莓派Pi3+Qt5.3.2安装PyQt5
- 数组折半查找
- Android Studio error: Cannot start internal HTTP server && Gradle sync failed
- 划分数组问题
- linux 下nginx php 配置
- Android Loading Dialiog
- 【Unity&JSON】datapath和persistentDataPath文件路径的两种路径地址
- 欢迎使用CSDN-markdown编辑器
- android--设置TextView部分文字的颜色和背景(高亮显示)
- 华为SD-DC²架构, 聚焦数据中心云化
- LeetCode算法题解法体会
- 后台管理网站模板