欢迎光临
我们一直在努力

cpp算法题目整理——线性枚举篇2

三元组中心问题

题目描述:

在数列 a1,a2,⋯,ana1​,a2​,⋯,an​ 中,如果对于下标 i,j,ki 满足 0<i<j<k<n+1 且 ai<aj<ak​,则称 ai,aj,ak 为一组递增三元组,aj为递增三元组的中心。

给定一个数列,请问数列中有多少个元素可能是递增三元组的中心。

解题思路:

这个题目不能下意识用三层循环解决,用三层循环会导致重复计数,因此引入两个bool值,用来判断j前面有没有小于他的元素,j后面有没有大于他的元素,有的话就直接break,因为只要存在一个小于、大于j的数,就能说明j就是三元组的中心,而且这样还是两层循环。

拿硬币

题目描述:

桌上有 n 堆力扣币,每堆的数量保存在数组 coins 中。我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有力扣币的最少次数。

解题思路:

我是先定义了一个哈希表unordered_map m<int,int>;然后定义了m[1]、m[2]的次数为0,接着for循环遍历整个coins,然后去判断每个coins[i]需要多少次2,多少次1,因为求次数最小值,所以肯定优先拿2个,如果刚好取完,那就将次数加在m[2]上,然后直接break,如果有余数,那必定为1,然后m[1]++即可,然后break,等待遍历完之后写一个sum求出m[1]和m[2]出现的次数并返回即可。

删除有序数组中的重复元素

题目描述:

给你一个 非严格递增排列的数组 nums ,请你原地删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。元素的相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。考虑 nums 的唯一元素的数量为 k。去重后,返回唯一元素的数量 k。nums 的前 k 个元素应包含排序后的唯一数字。下标 k – 1 之后的剩余元素可以忽略。

解题思路:

利用双指针遍历,slow=0,fast=1,然后遍历整个数组,fast<nums.size();fast++; 然后当nums[slow] != nums[fast]的时候,将slow++,向前移动,然后将fast的值赋值给slow,这样一来就会把后边的值赋值给第一个重复元素的第二个值,依次往后,重复元素就会被逐个替代,最后返回slow+1就是数组长度。

将找到的值乘以2

题目描述:

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

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

  • 如果在 nums 中找到 original ,将 original 乘以 2 ,得到新 original(即,令 original = 2 * original)。

  • 否则,停止这一过程。

  • 只要能在数组中找到新 original ,就对新 original 继续重复这一过程。

  • 返回 original的最终值

    解题思路:

    这个也是进行for循环,但是i++不能放在for循坏内层,应该进行判断,因为original每次变化之后都需要从头遍历数组,因此当找到这个original的时候需要将i重新置为0,num[i]不等于original的时候才进行i++;

    猜数字

    题目描述:

    猜数字游戏是gameboy最喜欢的游戏之一。游戏的规则是这样的:计算机随机产生一个四位数,然后玩家猜这个四位数是什么。每猜一个数,计算机都会告诉玩家猜对几个数字,其中有几个数字在正确的位置上。 比如计算机随机产生的数字为1122。如果玩家猜1234,因为1,2这两个数字同时存在于这两个数中,而且1在这两个数中的位置是相同的,所以计算机会告诉玩家猜对了2个数字,其中一个在正确的位置。如果玩家猜1111,那么计算机会告诉他猜对2个数字,有2个在正确的位置。 现在给你一段gameboy与计算机的对话过程,你的任务是根据这段对话确定这个四位数是什么。

    输入数据有多组。每组的第一行为一个正整数N(1<=N<=100),表示在这段对话中共有N次问答。在接下来的N行中,每行三个整数A,B,C。gameboy猜这个四位数为A,然后计算机回答猜对了B个数字,其中C个在正确的位置上。当N=0时,输入数据结束。

    每组输入数据对应一行输出。如果根据这段对话能确定这个四位数,则输出这个四位数,若不能,则输出"Not sure"。

    解题思路:

    这个题目是我做过的最复杂也是难度最高的问题了,也是直接遍历,四位数嘛,从1000开始到9999,然后将每个数字去和输入的猜测值,正确数字的个数,正确数字的位置进行匹配,,找到满足匹配所有条件的cand再进行输出,主要分为两大块,一是验证条件c,一是验证条件b,验证之后输出即可,如果不存在就输出not sure就行。这个题目对我来说是最难的。

    赞(0)
    未经允许不得转载:171主机测评 » cpp算法题目整理——线性枚举篇2
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址