数据结构->线性枚举:将找到的值乘以 2(C语言)

原题:力扣2154 难度:easy

题目描述:

给你一个整数数组 nums ,另给你一个整数 original ,这是需要在 nums 中搜索的第一个数字。

接下来,你需要按下述步骤操作:

  1. 如果在 nums 中找到 original ,将 original 乘以 2 ,得到新 original(即,令 original = 2 * original)。
  2. 否则,停止这一过程。
  3. 只要能在数组中找到新 original ,就对新 original 继续 重复 这一过程

返回 original 的 最终 值。

示例 1:

输入:nums = [5,3,6,1,12], original = 3
输出:24
解释: 
- 3 能在 nums 中找到。3 * 2 = 6 。
- 6 能在 nums 中找到。6 * 2 = 12 。
- 12 能在 nums 中找到。12 * 2 = 24 。
- 24 不能在 nums 中找到。因此,返回 24 。

 分析题目:题目的意思还是比较清晰的,第一轮先找到数组元素为original的数,如果能找到这个数,就乘2再去下一轮重复上述操作直到找不到返回当前original的值,当然如果第一轮就找不到也是直接返回的。这里不难发现original的值会改变,所以需要一个变量记住original变化之前的数是多少,并且可以用这个变量来分析是否找到original还是没找到目标值。

我们来看一下代码的书写和分析:

我们可以定义一个变量记住最开始original的值:

int count = original;

 我们先写一轮查找是怎么样的,先遍历整个数组元素查找有没有目标值original,重点是后面的设计,如果找到的话,我们要更新当前的original的值变成2倍,然后跳出这一层for循环:

for(int i = 0;i < numsSize;i++){
    if(nums[i] == original){
        original = original * 2;
        break;
    }
}

我们可以用最开始记录的count来和original比较,如果值不一样肯定是找到了,所以还要再进行一次查找,如果没找到就跳出查找返回当前original值即可,所以这整个是一个很多次的循环,可以放进while中进行处理,那么最后的代码结果就是如下:

int findFinalValue(int* nums, int numsSize, int original){
    int count = original;
    while(1 == 1){
        for(int i = 0;i < numsSize;i++){
            if(nums[i] == original){
                original = original * 2;
                break;
            }
        }
        if(count == original){
            break;
        }else{
            count = original;
        }
    }
    return original;
}

那么这一次的算法学习就结束了,我们再下一章节再会。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值