暑假算法7.20,Day19

本文介绍了三道算法题目,分别是整数替换、最大交换和最小差值问题。在整数替换中,通过贪心策略更新整数,目标是最小步数达到1;最大交换问题通过排序找到最优交换位置,以获得最大数值;最小差值问题通过调整数组元素加减k,找到最小差值范围。这些题目涉及到了贪心算法和数组操作技巧。
摘要由CSDN通过智能技术生成
暑假算法7.20,Day19

贪心

第一题

整数替换

class Solution {
public:
    int integerReplacement(int n) {
        int ans=0;
        long long x=n;
        while(x>1){
            
            if(x%2==0) x=x/2;
            else if((x+1)%4==0&&(x-1)%4==0)x=x-1;
            else if((x+1)%4==0&&((x+1)/2<x-1)) x=x+1;
            else if((x-1)%4==0) x=x-1;
            else x=x-1;
            ans++;
        }
        return ans;
    }
};

请添加图片描述

第二题

最大交换

class Solution {
public:
    int maximumSwap(int num) {
        string st = to_string(num);
        string st_sort = st;
        sort(st_sort.rbegin(),st_sort.rend());
        int len = st.length();
        int id = -1;
        char maxval=char('0'-1);
        for (int i =  0 ; i < len ; i++){
            if (st[i]==st_sort[i]) continue;
            if (st[i]>=maxval){
                maxval = st[i];
                id = i;
            }
        }
        for ( int i = 0 ; i < id ; i++){
            if (st[i]<st[id]){
                swap(st[i],st[id]);
                break;
            }
        }
        return stoi(st);
    }
};

请添加图片描述

第三题

最小差值2

class Solution {
public:
    int smallestRangeII(vector<int>& nums, int k) {
        sort(nums.begin(), nums.end());
		int result = nums[nums.size() - 1] - nums[0];
		for (int i = 1; i < nums.size(); i++) {
			int minValue = min(nums[0] + k, nums[i] - k);
			int maxValue = max(nums[nums.size() - 1] - k, nums[i - 1] + k);
			result = min(maxValue - minValue, result);
		}
		return result;
    }
};

请添加图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值