前言:给大家总结一些leetcode容易在面试中出现的题目,这个容易出现的标准来源于我们项目组面试算法题,在这几个月内会持续更新这篇博客。
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
比如:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
算法思想,不考虑0,用另一个下标j标记位置,不断增加。
获得j的数字 就是去除0的数组长度,j到nums.length-1的位置填充0
public void moveZeroes(int[] nums) {
int i = 0;
int j = 0;
int numsSize = nums.length;
for(i = 0 ; i < numsSize; i++) {
if(nums[i] != 0) {
nums[j++] = nums[i];
}
}
while(j < numsSize) {
nums[j++] = 0;
}
}
给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
比如:
输入: [2,0,2,1,1,0]
输出: [0,0,1,1,2,2]
算法思想:插入排序,三路快排也可以做到。
public void sortColors(int[] nums) {
int i=0;
int numsSize = nums.length;
//插入排序
int temp;
for(i=1; i<numsSize; i++) {
for(int j=0; j<i; j++) {
if(nums[j] > nums[i]) {
temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
}
}
内容持续更新。。。