ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

8.15【A】

8.15【A】 3702首先应当寻找最大元素因为最大元素转为二进制与其它数异或后其最高位最可能不变然后考虑最大元素为奇数还是偶数如果是偶数那么只要不是异或自身则与其它数的异或结果一定不是0因为有自己的最高位如果为奇数那么应该跳过小于它的紧邻偶数不过这考虑的是第一个数即如果已经有一个安全偶数则后续奇数和其紧邻偶数可一起出现所以应当先排序然后寻找第一个安全偶数找到后再接上剩余数组的数量即可先判断第一个数是否为偶数如果是则ressize如果为奇数看其紧邻的下一个数是奇数还是偶数如果是奇数则res1如果为偶数检测是否为紧邻的如果是则ressize-1否则ressize-1或许不是偶数的问题而是最高位的1什么时候确定的问题最高位的1一旦确定那么剩下的都可以随便选如果第一个数是偶数那么ressize如果是奇数看下一个是否为紧邻偶数如果是那就只能二选一为size-1否则也是ressize还要考虑去重的问题有重复元素也就还是只考虑最大元素的重复问题如果最大元素重复奇数次那不影响如果重复偶数次则需要再去掉一个应当先完成最大元素的去重再判断紧邻元素对于奇数的紧邻偶数应该也要考虑偶数的重复情况即如果它重复奇数次则正常减1否则不用减存在问题就是4和54是1005是101奇数后面是其紧邻偶数不一定结果就是0只是其最高位为0那要这要考虑问题就复杂了不过结果只是这个1该不该减的问题class Solution { public: int longestSubsequence(vectorint nums) { if(nums.size()1){ return 1; } sort(nums.begin(),nums.end()); int resnums.size(),begnums.size()-1; while(beg0(nums[beg]nums[beg-1])){ beg--; } if((nums.size()-beg)%20){ res--; } if(beg0){return res;} if(nums[beg]%2){ if((nums[beg]-nums[beg-1])1){ int beg2beg-1; while(beg20(nums[beg2]nums[beg2-1])){ beg2--; } if((beg-beg2)%2){ res--; } } } return res; // if(nums[nums.size()-1]%2){ // if((nums[nums.size()-1]-nums[nums.size()-2])1){ // return nums.size()-1; // }else{ // return nums.size(); // } // }else{ // return nums.size(); // } //return nums[nums.size()-1]-nums[nums.size()-2]1? } };SUSim
返回列表