【2023】字节跳动 10 日心动计划——第六关

这篇具有很好参考价值的文章主要介绍了【2023】字节跳动 10 日心动计划——第六关。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 环形链表 II

🔗 原题链接:142. 环形链表 II

用哈希表判重即可。

class Solution {
public:
    ListNode *detectCycle(ListNode *head) {
        unordered_set<ListNode*> st;
        while (head) {
            if (st.count(head)) return head;
            st.insert(head);
            head = head->next;
        }
        return nullptr;
    }
};

2. 有序数组中的单一元素

🔗 原题链接:LCR 070. 有序数组中的单一元素

这里介绍两种做法。

方法一:异或。注意到 x ⊕ x = 0 x\oplus x=0 xx=0,因此 ⊕ i = 1 n n u m s [ i ] \oplus_{i=1}^nnums[i] i=1nnums[i] 就是最终答案。

class Solution {
public:
    int singleNonDuplicate(vector<int>& nums) {
        int ans = 0;
        for (auto& num: nums) ans ^= num;
        return ans;
    }
};

方法二:二分。注意到数组是有序的,因此我们可以用二分去处理,时间复杂度可以降至 O ( log ⁡ n ) O(\log n) O(logn)

不妨设只出现一次的元素的下标是 x x x,由题意可知下标 x x x 的左右两边各有偶数个元素,从而 x x x 是偶数,且数组的长度是奇数,不妨设为 n n n

既然要用二分,那我们就需要找到一个性质能够将区间 [ 0 , n − 1 ] [0,n-1] [0,n1] 一分为二。注意到 ∀ i ∈ [ 0 , x − 1 ] \forall i\in[0,x-1] i[0,x1],如果 n u m s [ i ] = n u m s [ i + 1 ] nums[i]=nums[i+1] nums[i]=nums[i+1],那么 i i i 一定是偶数; ∀ i ∈ [ x , n − 1 ] \forall i\in[x,n-1] i[x,n1],如果 n u m s [ i ] = n u m s [ i + 1 ] nums[i]=nums[i+1] nums[i]=nums[i+1],那么 i i i 一定是奇数。

更进一步, ∀ i ∈ [ 0 , n − 1 ] \forall i\in[0,n-1] i[0,n1],如果 i i i 是偶数,我们判断 n u m s [ i ] nums[i] nums[i] n u m s [ i + 1 ] nums[i+1] nums[i+1] 是否相等,如果相等,则 i ∈ [ 0 , x − 1 ] i\in[0,x-1] i[0,x1],否则 i ∈ [ x , n − 1 ] i\in[x,n-1] i[x,n1];如果 i i i 是奇数,则 i − 1 i-1 i1 是偶数,我们判断 n u m s [ i − 1 ] nums[i-1] nums[i1] n u m s [ i ] nums[i] nums[i] 是否相等,如果相等,则 i ∈ [ 0 , x − 1 ] i\in[0,x-1] i[0,x1],否则 i ∈ [ x , n − 1 ] i\in[x,n-1] i[x,n1]

注意到当 i i i 是偶数时, i + 1 = i ⊕ 1 i+1=i\oplus1 i+1=i1,当 i i i 是奇数时, i − 1 = i ⊕ 1 i-1=i\oplus1 i1=i1,从而我们只需要判断 n u m s [ i ] nums[i] nums[i] n u m s [ i ⊕ 1 ] nums[i\oplus 1] nums[i1] 是否相等。条件 n u m s [ i ] ≠ n u m s [ i ⊕ 1 ] nums[i]\neq nums[i\oplus1] nums[i]=nums[i1] 将区间 [ 0 , n − 1 ] [0,n-1] [0,n1] 分成了两部分: [ 0 , x ) [0,x) [0,x) [ x , n − 1 ] [x,n-1] [x,n1],前者不满足这个条件,后者满足这个条件,所以我们可以套用寻找左边界的二分模版。文章来源地址https://www.toymoban.com/news/detail-632595.html

class Solution {
public:
    int singleNonDuplicate(vector<int>& nums) {
        int l = 0, r = nums.size() - 1;
        while (l < r) {
            int mid = l + r >> 1;
            if (nums[mid] != nums[mid ^ 1]) r = mid;
            else l = mid + 1;
        }
        return nums[r];
    }
};

到了这里,关于【2023】字节跳动 10 日心动计划——第六关的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大一下暑期计划 + 2023字节青训营预告直播

    目录 🌼前言 🌹后端学习方法 🌳1,层次 🌳2,体系 🌳3,算法和数据结构 🌳4,总结 🌹前端学习方法 🌳基础 🌹求职中如何弥补学历差距? 🌹项目经历怎么准备? 🎂官网链接 + 简历如何写 🎂0基础可以跟项目吗 🎂主修Java或者C++能不能参加青训营? 🍍大一下暑期计划

    2024年02月11日
    浏览(48)
  • LeetCode(字节10日)-0714

    思路:前缀树匹配 问题:一开始没有仔细审题,犯大忌 思路: 一开始考虑到路径是全局最优贪心可能不行,就没有考虑使用 BFS,直接DFS,然后超时; 又考虑记忆化搜索+剪枝还是超时,可能没有优化好; 最后看了一眼题解原来可以用 dij,就思考 dij; 关键点在于 visit 这个

    2024年02月17日
    浏览(34)
  • LeetCode(字节10日)-0716

    注意:需要使用 set 过滤掉重复集合,例如 aab 的全排列 思路:乍一看是滑动窗口,但是发现可以是负数,窗口失效,则考虑双层 for 循环,之后看题解发现可以使用前缀和+哈希表优化 前缀和思路:pre 记录累加的值,那么k = pre[j] - pre[i] 我们只要确定了 pre[j] 就可以确定pre[

    2024年02月16日
    浏览(26)
  • LeetCode(字节10日)-0717

    思路:快慢指针,相遇 的时候意味着快比慢多走了一个圆环路程,但是怎么确定圆环入口忘记了,直接用 set 判断重复的。后来发现是需要把 head 移动,当 head 入环的时候慢指针刚好回到入口。 思路:用数组辅助;或者找到中点,反转后半部分,在合并起来

    2024年02月16日
    浏览(32)
  • 算法通关村第六关——如何使用中序和后序来恢复一颗二叉树

    树( Tree ) :表现得是一种 层次关系 ,为 n ( n ≥ 0 ) n(n≥0) n ( n ≥ 0 ) 个节点构成的有限集合,当 n=0 时,称为 空树 ,对于任一颗非空树( n0 ),它具备以下性质: ​ 树中有一个根(root)节点,用 r 表示 ​ 其余节点可分为 m(m0) 个 互不相交 的有限集 T 1 , T 2 , . .

    2024年02月13日
    浏览(42)
  • 字节跳动高频题目(1)

     3,1,42,200,15 121,128,49,25,88 5,146,70,2,4 21,33,55,27,560 11,20,31,53,236 300,26,215,279,438 135,148,9,169,76 22,101,14,54,56 72,206,152,80,39 46,62,104,122,179 3. Longest Substring Without Repeating Characters Medium Given a string  s , find the length of the  longest   s

    2024年04月28日
    浏览(37)
  • 字节跳动春招——特征提取

           小明是一名算法工程师,同时也是一名铲屎官。某天,他突发奇想,想从猫咪的视频里挖掘一些猫咪的运动信息。为了提取运动信息,他需要从视频的每一帧提取“猫咪特征”。一个猫咪特征是一个两维的vectorx, y。如果x_1=x_2 and y_1=y_2,那么这俩是同一个特征。    

    2024年02月07日
    浏览(46)
  • 字节跳动懂车帝一面

    自我介绍 3分钟 项目介绍 10分钟 完单率解释 广告计费和消耗 AB实验一般怎么做? 常见AB策略有哪些类型? 进行AB的策略是如何寻找? 决定要不要AB,通常是有新的能力/产品上线,预计对业务的核心关注指标有收益,需要用实验证明有收益可扩量 AB怎么分组,以及各自多少流

    2024年02月08日
    浏览(51)
  • 字节小程序踩坑-uni-app字节跳动小程序运行

    运行-运行到小程序模拟器-运行设置 运行-运行到小程序模拟器-字节跳动开发者工具  注意:抖音小程序不会像微信小程序自动打开!!!! 复制提示的地址 手动打开抖音小程序 点击导入项目,把地址复制到项目目录,点击导入即可 现在修改改HBuilderX的内容并运行,抖音小

    2024年02月14日
    浏览(47)
  • 分享一道字节跳动后端面试算法题

    题目: 给你一个字符串s,可以将任意一个字符转为任意一个小写字符,这个操作可有m次,问转化后的字符串中最长的相等子串长度。 案例: s=\\\"abcdac\\\" ,m=2,2次操作,可以转化为\\\"abcccc\\\" ,最长是4,返回4。 分析: 题目很好理解,但是如果对算法掌握不是很透彻或者是对滑动

    2024年02月16日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包