当前位置: 首页 > news >正文

dummy|trick

 

 

lc481

交替出现 实现构造

for (int i = 2; s.length() < n; ++i)
s += string(s[i], s.back() ^ 3); // 1^3=2, 2^3=1,这样就能在 1 和 2 之间转换

 class Solution {
public:
int magicalString(int n)

   {
string s = "\1\2\2"; // 值就是 1,2,2,这样就可以直接用 s[i] 当作个数
for (int i = 2; s.length() < n; ++i)
s += string(s[i], s.back() ^ 3); // 1^3=2, 2^3=1,这样就能在 1 和 2 之间转换
return count(s.begin(), s.begin() + n, 1);
}
};

另一种写法_直接构造

const int MX = 1e5;
int acc[MX + 1];

int init = []() {
string s = "\1\2\2";
for (int i = 2; s.length() < MX; ++i)
s += string(s[i], s.back() ^ 3); // 1^3=2, 2^3=1,这样就能在 1 和 2 之间转换


for (int i = 0; i < MX; ++i)
acc[i + 1] = acc[i] + 2 - s[i]; // 2-1=1,2-2=0,这样就只统计了 1
return 0;
}();

class Solution {
public:
int magicalString(int n) {
return acc[n];
}
};

 

 

lc1679

class Solution {

public:

    int maxOperations(vector<int>& nums, int k) 

    {

        unordered_map<int,int> hash;

        for(auto num:nums)

            hash[num]++;

        int ret=0;

        for(auto [a,b]:hash)

        {

            if(hash.count(k-a))

                 ret+=min(hash[a],hash[k-a]);

            

        }

        return ret/2;

    }

};

 

lc817

hash快速查 nums 中的值,遍历链表时通过标记判断是否进入新的连续含 nums 值的片段,统计这种片段(组件)的总数并返回。

class Solution {
public:
int numComponents(ListNode* head, vector<int>& nums) {
unordered_set st(nums.begin(),nums.end());
int ans =0;
bool ok =false; //标记上个元素是否被访问
for(auto p = head;p;p=p->next)
{
if(!ok && st.contains(p->val)) ans++;
ok = st.contains(p->val);
}
return ans;
}
};

 

逆天中文翻译,可以直接看示例1写代码即可

示例1:

- 链表是  0 → 1 → 2 → 3 (每个节点的值依次是0、1、2、3)。
-  nums  是  [0,1,3] (即nums里包含0、1、3这三个值)。

“组件”的定义是链表中一段最长的连续节点,且这些节点的值都在nums里。

我们逐个看链表节点:

- 节点0:值在nums里;
- 节点1:值在nums里,且和节点0是连续的,所以这两个节点构成一个连续片段 [0,1] ;
- 节点2:值不在nums里,断开了连续;
- 节点3:值在nums里,且前面没有连续的、值在nums里的节点了,所以单独构成一个片段 [3] 。

这样就有两个这样的片段,所以输出是2

 

lc3217

hash快速查询 nums 中的值

再通过“哨兵节点”遍历链表,删除所有节点值在 nums 中的节点

最后返回修改后的链表头

class Solution {
public:
ListNode* modifiedList(vector<int>& nums, ListNode* head) {
unordered_set<int> st(nums.begin(), nums.end());
ListNode dummy(0, head);
ListNode* cur = &dummy;


while (cur->next)

       {
ListNode* nxt = cur->next;


if (st.contains(nxt->val)) 
cur->next = nxt->next; // del
else 
cur = nxt; // not del
}
return dummy.next;
}
};

 

http://www.dtcms.com/a/558541.html

相关文章:

  • 计算机软件开发网站建设取什么名字手机怎样下载安装建设银行网站
  • FreeRTOS 学习:(七)FreeRTOS 中相关的 API 函数的命名规则
  • 如何用博客网站做cpa网站建设哪家公司好网站建设
  • 自动化测试的使用场景有哪些?
  • 安徽哪家公司做网站比较好淘宝上网站开发退款
  • view()与transpose()函数使用注意事项
  • WHAT - 前端自动化测试系列(二)
  • 【代数学】置换群的正规子群与猜拳游戏
  • 南京做网站南京乐识权威京东购物网站怎么做
  • 3.5 介质访问控制【2010统考真题】
  • 网站导航条用什么做邢台123最新事件
  • 网站建设模板免费下载万联芯城网站建设
  • 电商网站 性能目标有哪些桂阳网站制作
  • 百度有网站建设吗cn网站
  • 利用选择法对数据排序
  • django网站开发源代码企业画册图片
  • 什么颜色做网站显的大气网站开发流程分为哪三个阶段
  • tomcat启动web项目使用debug,无法进行下一步
  • 网站后台中文模板电话营销网站建设
  • dede模板网站如何搭建网站子目录怎么做的
  • 网站建设需要钱吗网页制作手机版
  • etcd安装与配置完全指南
  • 一个基于深度学习文本分析与格式识别技术开发的不同版本Word文档对比工具
  • 3.4 流量控制与可靠传输机制【2017统考真题】
  • 做外国网用哪些网站广州头条新闻最新
  • 网站建设设计公司类网站织梦模板 带手机端国内公关公司
  • 用老域名重新做个网站广东集团网站建设
  • 在自己网站建立自己的外链主流的网站开发技术有
  • World of Warcraft [CLASSIC] Icecrown Citadel (ICC)12H [Shushia]
  • 网站页面 原则东光做淘宝网站