[LeetCode][算法初级][数组] 27-29

27 加一

https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/1/array/27/

很简单,数组从最后往前遍历,记录进位的情况,当不需要进位或结束时退出。

结束后最后如果还需要进位,则在数组最前插入1.

# @param {Integer[]} digits
# @return {Integer[]}
def plus_one(digits)
    plus=1
    (digits.size-1).downto 0 do |i|
        if(plus==1)
            plus = (digits[i]+1)/10
            digits[i] = (digits[i]+1)%10            
        end
    end
    if(plus == 1)
        digits.insert(0,plus)
    end
    digits
end

28 移动零

https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/1/array/27/

遍历数组,维护一个下标表示非0元素的末尾,最后在填充满0就行了。

void moveZeroes(int* nums, int numsSize) {
    int i=0, non_zero = 0;
    for(;i<numsSize;i++){
        if(nums[i]){
            nums[non_zero++] = nums[i];
        }
    }
    for(i=non_zero;i<numsSize;i++){
        nums[i]=0;
    }
}


29 两数之和

https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/1/array/29/

除了用最原始的方法外,还可以用hashmap。hashmap是个好东西,后面要复习一下。

# @param {Integer[]} nums
# @param {Integer} target
# @return {Integer[]}
def two_sum(nums, target)
    map = {}
    #res = []
    nums.each_with_index do |e,i| 
        if map[e]
            #res.push i
            #res.push map[nums[i]]
            #map.delete nums[i]
            return map[e],i
        else
            map[target-e]=i
        end
    end
    #res
end

#O(n) Space, O(n) Time


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值