LeetCode简单题

此篇文章用户记录leetcode的简单题

leetcode9给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。

分析 看到这道题目首先我想的是反证法比如121是不是一个回文数只需要把他反过来121看两数是否需要相等即可,但是发现编译报错,这是因为int类型可能会爆表,比如x = 2,147,483,646 也就是反过来一定会超出范围所以不可行,我们只需要比较一半就可以定义一个revertedNumber 当x > renvertedNumber去做比较即可 代码如下

	class Solution {
	    public boolean isPalindrome(int x) {
	        if(x < 0 || (x % 10 == 0 && x != 0)){
	            return false;
	        }
	        int revertedNumber = 0;
	        while(x > revertedNumber){
	            revertedNumber = revertedNumber * 10 + x % 10;
	            x /= 10;
	        } 
	        return x == revertedNumber || x == revertedNumber / 10;
	    }
}

LeetCode27:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

分析 双指针法: 一个指针指向有效元素个数 另一个指针用来判断是不是要移除的数字,如果不是要移除的数字那么就把他给有效数字的指针即可,然后有效指针自增。代码如下

 public int removeElement(int[] nums, int val) {
		if (nums == null || nums.length == 0)
			return 0;
		int j = 0;
		for (int i = 0; i < nums.length; i++) {
			if (nums[i] != val) {
				nums[j] = nums[i];
				j++;
			}
		}
		return j;
	}

双指针优化 如果要移除的元素恰好在数组的开头,例如序列 [1,2,3,4,5],当 val 为 1 时,我们需要把每一个元素都左移一位。注意到题目中说:「元素的顺序可以改变」。实际上我们可以直接将最后一个元素 5 移动到序列开头,取代元素 1,得到序列 [5,2,3,4][5,2,3,4],同样满足题目要求。这个优化在序列中 元素的数量较少时非常有效。此方法借鉴了leetcode官方。

class Solution {
    public int removeElement(int[] nums, int val) {
        int left = 0;
        int right = nums.length;
        while (left < rig
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值