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;
         }
      }
  }
}

内容持续更新。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值