leetcode(86-90)

LeetCode+ 86 - 90 链表、双指针|字符串、动态规划、区间 dp|数组、双指针、排序|数学|回溯、剪枝 链表的快排的其中一部分,将所有小于 x 的节点排在左边,把所有大于等于 x 的节点排在右边,左边两边的节点相对顺序不要发生变化,一开始 2 在 5 前面,排序后 2 还是在 5 前面原来链表是 1、4、3、2、5、2,分界点 x = 3,需要把所有小于 3 的放到左边,把所有大于 3 的放在右边,由于不知道左右两边有多少个元素,先看两个新链表存储左边是谁,右边是谁,然后再把两个链表拼接,把左边的最后一共点指向开始的第一个点快排、归并、浮点数二分、高精度加、减法 扰乱字符串 给我们一个字符串 s1 阅读详情

86. 分隔链表

给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。

你应当保留两个分区中每个节点的初始相对位置。

示例:

输入: head = 1->4->3->2->5->2, x = 3
输出: 1->2->2->4->3->5
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* partition(ListNode* head, int x) {
        if(!head) return NULL;
        ListNode *h1=new ListNode(0),*p=h1,*h2=new ListNode(0),*q=h2;
        while(head){
            if(head->val < x){
                p->next=head;
                p=p->next;
            } else {
                q->next=head;
                q=q->next;
            }
            head=head->next;
        }
        p->next=h2->next;
        q->next=NULL;
        return h1->next;
    }
};

87. 扰乱字符串

给定一个字符串 s1,我们可以把它递归地分割成两个非空子字符串,从而将其表示为二叉树。

下图是字符串 s1 = "great" 的一种可能的表示形式。

    great
   /    \
  gr    eat
 / \    /  \
g   r  e   at
           / \
          a   t

在扰乱这个字符串的过程中,我们可以挑选任何一个非叶节点,然后交换它的两个子节点。

例如,如果我们挑选非叶节点 "gr" ,交换它的两个子节点,将会产生扰乱字符串 "rgeat" 。

    rgeat
   /    \
  rg    eat
 / \    /  \
r   g  e   at
           / \
          a   t

我们将 "rgeat” 称作 "great" 的一个扰乱字符串。

同样地,如果我们继续将其节点 "eat" 和 "at" 进行交换,将会产生另一个新的扰乱字符串 "rgtae" 。

    rgtae
   /    \
  rg    tae
 / \    /  \
r   g  ta  e
       / \
      t   a

我们将 "rgtae” 称作 "great" 的一个扰乱字符串。

给出两个长度相等的字符串 s1 和 s2,判断 s2 是否是 s1 的扰乱字符串。

示例 1:

输入: s1 = "great", s2 = "rgeat"
输出: true

示例 2:

输入: s1 = "abcde", s2 = "caebd"
输出: false
class Solution {
public:
    bool isScramble(string s1, string s2) {
        if(s1.size() != s2.size()) return false;
        int len=s1.size();
        int cnt[256]={0};
        for(int i=0; i<len; i++) cnt[s1[i]]++;
        for(int i=0; i<len; i++){
            if(--cnt[s2[i]] < 0) return false;
        }
        if(len<=3) return true;
        for(int k=1; k<len; k++){
            if((isScramble(s1.substr(0,k), s2.substr(0,k))
               && isScramble(s1.substr(k,len), s2.substr(k,len)))
               || (isScramble(s1.substr(0,k), s2.substr(len-k,len))
               && isScramble(s1.substr(k,len), s2.substr(0,len-k))))
                return true;
        }
        return false;
    }
};

88. 合并两个有序数组

给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。

说明:

  • 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。
  • 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。

示例:

输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6],       n = 3

输出: [1,2,2,3,5,6]
class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        m--;
        n--;
        int i=m+n+1;
        while(m>=0 && n>=0){
            if(nums1[m] > nums2[n]) {
                nums1[i]=nums1[m];
                m--;
            } else {
                nums1[i]=nums2[n];
                n--;
            }
            i--;
        }
        while(m>=0) {
            nums1[i]=nums1[m];
            m--;
            i--;
        }
        while(n>=0){
            nums1[i]=nums2[n];
            i--;
            n--;
        }
        return;
    }
};

89. 格雷编码

格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。

给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。格雷编码序列必须以 0 开头。

示例 1:

输入: 2
输出: [0,1,3,2]
解释:
00 - 0
01 - 1
11 - 3
10 - 2

对于给定的 n,其格雷编码序列并不唯一。
例如,[0,2,3,1] 也是一个有效的格雷编码序列。

00 - 0
10 - 2
11 - 3
01 - 1

示例 2:

输入: 0
输出: [0]解释: 我们定义格雷编码序列必须以 0 开头。给定编码总位数为 n 的格雷编码序列,其长度为 2n。当 n = 0 时,长度为 20 = 1。因此,当 n = 0 时,其格雷编码序列为 [0]。
class Solution {
public:
    vector<int> grayCode(int n) {
        vector<int> res{0};
        for (int i = 0; i < n; ++i) {
            int size = res.size();
            for (int j = size - 1; j >= 0; --j) {
                res.push_back(res[j] | (1 << i));
            }
        }
        return res;
    }
};

90. 子集 II

给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

说明:解集不能包含重复的子集。

示例:

输入: [1,2,2]
输出:
[
  [2],
  [1],
  [1,2,2],
  [2,2],
  [1,2],
  []
]
class Solution {
public:
    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        vector<vector<int>> res;
        vector<int> path;
        subSet(nums, 0, path, res);
        return res;
    }
    void subSet(vector<int>& nums, int index, vector<int>& path, vector<vector<int>>& res){
        res.push_back(path);
        for(int i=index; i<nums.size(); i++){
            if(index<i && nums[i]==nums[i-1]) continue;
            path.push_back(nums[i]);
            subSet(nums, i+1, path, res);
            path.pop_back();
        }
    }
};

(以上题目均摘自leetcode)

leetcode-86 分隔链表 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。 你应当保留两个分区中每个节点的初始相对位置。 示例: 输入: head = 1->4->3->2->5->2, x = 3 输出: 1->2->2->4->3->5 使用双指针的方式,各自构造一个大元素的头节点和小元素的头节点,同时遍历当前链表完善大小链表,最终将两个大小链表链接起来即可 ListNode* partition(ListNode* head, int x) { if (head == NULL) return NULL; ListNode small(0); 立即下载

相关推荐

《点云处理算法》——GROR配准

GROR点云配准

阁楼 1315

【算法】leetcode 86. 分隔链表

leetcode第86题

qq_45841737的博客 269

手把手调试Android 10 DHCP服务:从dumpsys network_stack到DhcpServer.java的实战技巧

本文详细介绍了在Android 10中调试DHCP服务的实战技巧,从使用dumpsys network_stack分析服务状态到深入DhcpServer.java源码追踪问题。文章提供了完整的工具链配置、关键调试命令和常见问题解决方案,帮助开发者高效解决DHCP服务未启动、IP分配失败等典型问题,特别适合需要深入理解Android网络架构的开发者参考。

uu89012的博客 743

【LeetCode力扣】86. 分隔链表

86. 分隔链表 - 力扣(LeetCode)考虑通过「新建两个链表」实现原链表分割,算法流程为:新建两个链表small和BigEqu,分别用于链接小于标志数 x 的结点和大于等于标志数 x 的结点。遍历链表head并依次比较各节点值 head->val 和 x 的大小,若head->val < x ,则将head指向的该结点添加到链表 small 最后面。若head->val >=x,则将head指向的该结点添加到链表BigEqu最后面。遍历完成后,拼接small和Big

Hacynn的博客 1723

从翼型到湍流:用生活化案例图解空气动力学核心概念(中英双语版)

本文通过飞机机翼、F1赛车、高尔夫球等生活化案例,图解空气动力学核心概念。深入浅出地解释了攻角如何产生升力、边界层与流动分离如何影响阻力、马赫数如何划分速度世界,以及涡流与湍流的特性与应用。文章还介绍了计算流体动力学(CFD)这一现代数字风洞工具,帮助读者直观理解这些塑造现代交通与运动设计的无形之力。

metaverse5vr的博客 475

OLLAMA_HOST环境变量设置全攻略:从127.0.0.1到局域网共享的完整配置

本文详细解析了OLLAMA_HOST环境变量的核心作用与配置方法,指导用户如何将Ollama服务从仅限本机访问(127.0.0.1)扩展到局域网共享。文章涵盖了macOS、Linux、Windows三大平台的实战配置步骤,并提供了安全加固、性能优化及常见故障排查方案,是解决多设备协作访问本地AI模型的完整指南。

weixin_28455801的博客 1897

LeetCode 题目 86:分隔链表

这些方法可以应用于数据流分离、系统优先级调度、社交网络中的数据分级处理等多个领域,特别是在需要根据特定规则组织数据时。

10年数据\经营分析经验,现任大厂数据分析负责人 827

个人顶级AI助手OpenClaw(Clawdbot) - 新手快速入门指南

本文详细介绍了个人顶级AI助手OpenClaw(Clawdbot) 的快速入门指南,包括安装部署和使用配置及注意事项

program哲学 5305

leetcode:86. 分隔链表

题目来源 86. 分隔链表 题目描述 题目解析 法1 创建两个链表:链表1是小于x的值,链表二是大于等于x的值,然后将链表1和链表2拼接起来 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public Li

OceanStar的博客 503

JVM高频面试基本问题与知识点整理

JVM高频面试基本问题与知识点整理

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 87万+

MIKE 21 教程 2.2 Domain, Time, Module Selection设置教学

上一节讲解了水动力模型的基本概念与文件创建MIKE 21 教程 2.1水动力模型介绍​本节讲解水动力模型前三个模块的设置此模块需导入之前绘制好的网格文件,导入后可预览网格文件点击上方的Domain Specification可查看网格的数据统计与高程属性,快速检查网格文件有无明显错误 点击上方的Boundary names,可查看之前定义的出入水边界。在网格文件中,我们对边界只能以数字属性进行区分,这里可以对数字属性进行命名,在name中直接修改即可。本实例中我们的2代表入水边界,3代表出水边界。因为博主日

Hello Word 3866

LeetCode 86. 分隔链表

链表经典题目: 分隔链表。

weixin_74385491的博客 840

储能电池管理系统介绍(一)

介绍储能BMS的架构以及各模块功能

manjixingkong1234的专栏 1916

【LeetCode Solutions】LeetCode 86 ~ 90 题解

【LeetCode Solutions】LeetCode 86 ~ 90 题解

一只快乐的小蒟蒻~ 1186

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

LeetCode 86~90

前言 本文隶属于专栏《LeetCode 刷题汇总》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构请见LeetCode 刷题汇总 正文 幕布 幕布链接 86. 分隔链表 题解 Very concise one pass solution​ 双指针 class Solution { public ListNode partition(ListNode head, int x) { ListNode smallerHead = new L

Shockang的博客 6319

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【JavaScript】LeetCode:86-90

自上往下:与左右孩子进行比较,若均 > 左右孩子,则与左右孩子中较小值交换,否则与 < 自身的孩子交换。pop():取出堆顶元素,将堆中最后一个元素与堆顶元素交换,然后自上往下判断一次。自下往上:与父节点进行比较,若 > 父节点,则与父节点交换。push():插入末尾,然后自下而上判断一次。

weixin_45980065的博客 1008

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

LeetCode 实践练习86-90

LeetCode—86(分隔链表) 方法:我们可以利用一个新链表保存比x小的,这样原链表就剩下比x大于等于的,随后将原链表接在新链表后面即可。 C++代码: class Solution { public: ListNode* partition(ListNode* head, int x) { if(!head) return head; ListNod...

qq_40104034的博客 257

leetcode题解python版:86-90

86、分隔链表 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。 你应当保留两个分区中每个节点的初始相对位置。 解:笨方法是遍历两次,一次记录小于x的,一次记录其它的。好点的方法就是多准备几个变量同时记录大于等于x的和小于x的,最后再给他们连接起来。 # Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val

baidu_41689104的博客 302

力扣爆刷第120天之CodeTop100五连刷86-90

思路:所有的数字拼接成字符串之后的最大字符串,这里利用一个原理,两个字符串,如果x+y > y+x 那么就表示x > y,这个大于是指字符串拼接的前后顺序,更大的应该在前。题目链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/description/思路:求不同路径,非常简单,每个节点来自于他的左边和上边,故dp[i][j]=dp[i][j-1]+dp[i-1][j]。不持有的话,分为今天才不持有,和之前就不持有。

qq_43511039的博客 532

力扣爆刷第100天之hot100五连刷86-90

每一个dp[i]由三种装填推出。思路:定义dp[i]表示字符串s[0, i]可以被拼接出,那么如果要推导出当前s[0,i]可以被拼出,只需要,s[0, i-word.length]可以被拼出,且s[i-word.length] == w,即可推出,此即为递推公式。思路:定义dp[i]表示区间[0, i]以nums[i]为结尾的最长递增子序列的长度,那么如果nums[i] > nums[j],故 dp[i] = Math.max(dp[i], dp[j]+1);思路:使用动态规划做时间超了,可以使用栈做。

qq_43511039的博客 681

每日5题Day18 - LeetCode 86 - 90

感觉没读懂,一开始我觉得是下面这个做法。

alimamaalala的博客 555

Python小白 Leetcode刷题历程 No.86-No.90 分隔链表、扰乱字符串、合并两个有序数组、格雷编码、子集Ⅱ (有题干 有代码 有思路心得)

Python小白 Leetcode刷题历程 No.86-No.90 分隔链表、扰乱字符串、合并两个有序数组、格雷编码、子集Ⅱ 写在前面: 作为一个计算机院的大学生,总觉得仅仅在学校粗略的学习计算机专业课是不够的,尤其是假期大量的空档期,作为一个小白,实习也莫得路子,又不想白白耗费时间。于是选择了Leetcode这个平台来刷题库。编程我只学过基础的C语言,现在在自学Python,所以用P...

LanXiu_的博客 759

力扣爆刷第164天之TOP100五连刷86-90(最大数、不同路径、买卖股票)

思路:s = “3+2*2”,求类似这种的表达式,一般都是依赖于栈,看到题目第一时间要有这个想法,其他的就是只需要维护好一个符号位记录前一个位置的符号,然后用栈来优先处理乘法和除法,遇到加法、减法都先把对应的符合与数先压栈,遇到乘法或除法都出栈进行运算,这样最后栈内只剩下正数和负数。动态规划做法,对于股票买卖类型的题,每一天都有两种状态,即为持有股票或不持有股票,对于持有股票可以是之前就已经持有了,也可以是今天才持有。对于不持有股票,可以是今天才不持有,也可以是之前就已经不持有了。

qq_43511039的博客 1070

面试笔试杂项积累-leetcode 86-90

88.88-Merge Sorted Array-Difficulty: Easy Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note: You may assume that nums1 has enough space (size that

wolf96的专栏 655

算法-算法86-90

算法-算法86-90

weixin_45226668的博客 468

Leetcode 90. 子集 II

Leetcode 90. 子集 II

weixin_44852067的博客 320
上一篇: leetcode(81-85)
下一篇: 机器学习---集成学习
小小螺丝刀
博客等级 码龄10年 41粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值