leetcode练习算法题

前言:给大家总结一些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;
         }
      }
  }
}

内容持续更新。。。

展开阅读全文

没有更多推荐了,返回首页