183周赛前两道

题目链接:https://leetcode-cn.com/problems/minimum-subsequence-in-non-increasing-order/

题目描述:
image.png

题目要点:
题目花里胡哨描述了一大堆,其实意思不就是从最大的数字挑选相加,待结果大于剩下的数值之和就返回么。
1、返回 长度最小 的子序列--->说明子序列成员是从大的数字里挑选
2、返回的答案应当按 非递增顺序 排列--->说明返回数组倒序
3、「数组的子序列」不强调元素在原数组中的连续性--->说明可以排序打乱原来的数组随意挑选

代码如下:

vector<int> minSubsequence(vector<int>& nums) {
    int i,j;
    int total=0;
    int result = 0;   
    int n = nums.size();
    vector<int> return_result;
    sort(nums.begin(), nums.end());
    for (i = 0;i < n;i++) 
        total += nums[i];
    for (i = n-1;i > 0;i--) {
        result += nums[i];
        if (result > total - result)
            break;
    }
    for (j=n-1;j >= i;j--)
        return_result.push_back(nums[j]);
    return return_result;
}

第二题:将二进制表示减到 1 的步骤数

题目链接:https://leetcode-cn.com/problems/number-of-steps-to-reduce-a-number-in-binary-representation-to-one/
题目描述:

将二进制表示减到 1 的步骤数

题目要点:
1、1 <= s.length <= 500
这意味着,无法暴力将二进制转换成十进制数计算,因为2^500超过了所有类型的上限,如果自己写个大整数也可以,但杀鸡用宰牛刀太傻了。
2、既然无法使用十进制计算,那就模拟二进制计算,根据二进制除法规则,所谓的除2其实就是移位,比如1110(14)除2结果为111(7),数据右移了移位。如果把二进制数当做字符串遍历,每一次循环就会自动移位一次,也就是除以2。
3、所以,只需要额外处理奇数+1的进位问题并记录下步骤数即可。
4、进位溢出了原本的长度,说明其结果还要额外右移一次。
代码如下:

int numSteps(string s) {
    int i,j;
    int n = s.length();
    int step = 0;
    for (i = n - 1;i > 0;i--) {
        if (s[i] == '1') {//说明是奇数,奇数将+1进位,这里使得s[i]='0'会显得逻辑清晰,但是对于程序来说并不需要
            s[i] = '0';
            step++;
            if (s[i - 1] == '0') s[i - 1] = '1';
            else {
                j = i - 1;
                if (j >= 0)
                {
                    while (j>=0) {
                        if (s[j] == '1') {
                            s[j] = '0';
                            j--;
                        }
                        else {
                            s[j] = '1';
                            break;
                        }
                    }
                    
                }
            }
        }
        step++;
    }
    if(s[0]=='0') step++;
    return step;
}

关于进位的判断应该可以再简化。

我怀疑网站的提交判定出了问题
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 数学中存在这样一个序列,它充满魔力,在实际工程中也有一部分的应用。今天就打算分享一下这个序列,它在 Google ...
    一缕殇流化隐半边冰霜阅读 11,923评论 34 39
  • 本文出自 Eddy Wiki ,转载请注明出处:http://eddy.wiki/interview-code.h...
    eddy_wiki阅读 13,075评论 0 30
  • 1.二维数组的查找 题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一...
    少年梦游计_3403阅读 4,866评论 0 1
  • 谁都不知道 谈笑间 有试探 我没风雨 但却尝尽孤独 哪敢奢求 有人与你一生共鸣 某一刻 某个瞬间 那一双眼 照亮与...
    自在游沙阅读 780评论 1 5
  • 今天睡觉前跟我说,妈妈不要给电脑充电,还多呢。我也就没有纠结非要充电,有时候自己也是强迫症发作,爱着急,反而激起来...
    心心相印_66阅读 994评论 0 0