第21题 Partition List

本文详细阐述了如何通过链表遍历与比较实现元素值小于指定值x的节点前置,大于等于x的节点后置,同时保持相对顺序不变。

Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.

You should preserve the original relative order of the nodes in each of the two partitions.

For example,
Given 1->4->3->2->5->2 and x = 3,

return 1->2->2->4->3->5.

Solution:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode partition(ListNode head, int x) {
        if(head==null || head.next==null) return head;
        ListNode fakeHead= new ListNode(0);
        fakeHead.next = head; 
        ListNode less=fakeHead;
        while(less.next.val<x){
            less=less.next;
            if(less.next==null)
                return fakeHead.next;
        }
        ListNode great=less.next;
        while(great!=null&&great.next!=null){
            if(great.next.val>=x)   great=great.next;
            else{
                ListNode temp = great.next;
                great.next=temp.next;   //remove temp from list
                temp.next=less.next;    //insert temp after less
                less.next=temp;
                less=less.next; 
                //Notice: dont need great=great.next here. 
                //Because the value of great.next has changed, need to check the value of great.next again
            }
        }
        return fakeHead.next;
        
        
    }
}
Note:一般程序有可能对头节点执行增删,插入或改换位置的操作时,需要新建一个fakeHead,指向头结点,来统一对头结点的操作,减少special case,简化代码。

2 -- 创建父表 3 CREATE TABLE jiedian_cause_list_45G ( 4 time TIMESTAMP, 5 eci VARCHAR(50), 6 region_name VARCHAR(50), 7 city_name VARCHAR(50), 8 cell_name VARCHAR(200), 9 site_name VARCHAR(200), 10 vendor_name VARCHAR(50), 11 site_id VARCHAR(100), 12 ci VARCHAR(100), 13 net_type VARCHAR(50), 14 ant_channel INTEGER, 15 rru_type VARCHAR(2000), 16 if_white_list VARCHAR(30), 17 symbol_white_list VARCHAR(256), 18 symbolshutdownswitch VARCHAR(128), 19 symbol_config_case VARCHAR(30), 20 rfchannel_white_list VARCHAR(256), 21 rfchannelshutdownswitch VARCHAR(128), 22 rfchannel_config_case VARCHAR(30), 23 rfchannel_white_start VARCHAR(128), 24 acttime_ye_rfchannel_start VARCHAR(128), 25 rfchannel_white_end VARCHAR(128), 26 acttime_ye_rfchannel_end VARCHAR(128), 27 acttime_ri_rfchannel VARCHAR(128), 28 carrier_white_list VARCHAR(256), 29 carriershutdownswitch VARCHAR(128), 30 carrier_config_case VARCHAR(30), 31 carrier_white_start VARCHAR(128), 32 acttime_ye_carrier_start VARCHAR(128), 33 carrier_white_end VARCHAR(128), 34 acttime_ye_carrier_end VARCHAR(128), 35 acttime_ye_carrier VARCHAR(128), 36 deepsleep_white_list VARCHAR(256), 37 deepsleepswitch VARCHAR(128), 38 deepsleep_config_case VARCHAR(30), 39 deepsleep_white_list_start VARCHAR(128), 40 acttime_ye_deepsleep_start VARCHAR(128), 41 deepsleep_white_list_end VARCHAR(128), 42 acttime_ye_deepsleep_end VARCHAR(128), 43 acttime_ri_deepsleep VARCHAR(128), 44 rfchannel_rru_support VARCHAR(50), 45 symbol_rru_support VARCHAR(50), 46 carrier_rru_support VARCHAR(50), 47 deepsleep_rru_support VARCHAR(50), 48 if_new_site VARCHAR(30), 49 carriershutdowntime NUMERIC, 50 deepsleepshutdowntime NUMERIC, 51 carrier_default_time NUMERIC, 52 deepsleep_default_time NUMERIC, 53 white_list_type VARCHAR(300), 54 white_list_right_cofig VARCHAR(300), 55 white_list_wrong_cofig VARCHAR(300), 56 jiedian_switch_using VARCHAR(300), 57 jiedian_switch_closed VARCHAR(300), 58 parameter_reject_type VARCHAR(50), 59 switch_mistake VARCHAR(30), 60 carrier_switch_abnormal VARCHAR(30), 61 deepsleep_switch_abnormal VARCHAR(30), 62 rfchannel_ant_config VARCHAR(30), 63 f_down_5g_rfchannel_on NUMERIC, 64 down_5g_rfchannel_on_def NUMERIC, 65 rfchannel_on_contrast VARCHAR(30), 66 f_down_5g_rfchannel_of NUMERIC, 67 down_5g_rfchannel_of_def NUMERIC, 68 rfchannel_off_contrast VARCHAR(30), 69 f_user_5g_rfchannel_on NUMERIC, 70 user_5g_rfchannel_on_def NUMERIC, 71 user_rfchannel_on_contrast VARCHAR(30), 72 f_user_5g_rfchannel_off NUMERIC, 73 user_5g_rfchannel_off_def NUMERIC, 74 user_rfchannel_off_contrast VARCHAR(30), 75 f_down_5g_carrier_on NUMERIC, 76 down_5g_carrier_on_def NUMERIC, 77 carrier_5g_on_contrast VARCHAR(30), 78 f_down_5g_carrier_of NUMERIC, 79 down_5g_carrier_of_def NUMERIC, 80 carrier_5g_off_contrast VARCHAR(30), 81 f_user_5g_carrier_on NUMERIC, 82 user_5g_carrier_on_def NUMERIC, 83 user_carrier_5g_on_contrast VARCHAR(30), 84 f_user_5g_carrier_off NUMERIC, 85 user_5g_carrier_off_def NUMERIC, 86 user_carrier_5g_off_contrast VARCHAR(30), 87 f_down_4g_carrier_on NUMERIC, 88 down_4g_carrier_on_def NUMERIC, 89 carrier_4g_on_contrast VARCHAR(30), 90 f_down_4g_carrier_of NUMERIC, 91 down_4g_carrier_of_def NUMERIC, 92 carrier_4g_off_contrast VARCHAR(30), 93 f_user_4g_carrier_on NUMERIC, 94 user_4g_carrier_on_def NUMERIC, 95 user_carrier_4g_on_contrast VARCHAR(30), 96 f_user_4g_carrier_off NUMERIC, 97 user_4g_carrier_off_def NUMERIC, 98 user_carrier_4g_off_contrast VARCHAR(30), 99 parameter_anomaly_status VARCHAR(2000) 100 ) PARTITION BY LIST (time); dmserver.exe D:\work\dmdbms\data\DAMENG\dm.ini -- 创建父表 CREATE TABLE jiedian_cause_list_45G ( time TIMESTAMP, eci VARCHAR(50), region_name VARCHAR(50), city_name VARCHAR(50), cell_name VARCHAR(200), site_name VARCHAR(200), vendor_name VARCHAR(50), site_id VARCHAR(100), ci VARCHAR(100), net_type VARCHAR(50), ant_channel INTEGER, rru_type VARCHAR(2000), if_white_list VARCHAR(30), symbol_white_list VARCHAR(256), symbolshutdownswitch VARCHAR(128), symbol_config_case VARCHAR(30), rfchannel_white_list VARCHAR(256), rfchannelshutdownswitch VARCHAR(128), rfchannel_config_case VARCHAR(30), rfchannel_white_start VARCHAR(128), acttime_ye_rfchannel_start VARCHAR(128), rfchannel_white_end VARCHAR(128), acttime_ye_rfchannel_end VARCHAR(128), acttime_ri_rfchannel VARCHAR(128), carrier_white_list VARCHAR(256), carriershutdownswitch VARCHAR(128), carrier_config_case VARCHAR(30), carrier_white_start VARCHAR(128), acttime_ye_carrier_start VARCHAR(128), carrier_white_end VARCHAR(128), acttime_ye_carrier_end VARCHAR(128), acttime_ye_carrier VARCHAR(128), deepsleep_white_list VARCHAR(256), deepsleepswitch VARCHAR(128), deepsleep_config_case VARCHAR(30), deepsleep_white_list_start VARCHAR(128), acttime_ye_deepsleep_start VARCHAR(128), deepsleep_white_list_end VARCHAR(128), acttime_ye_deepsleep_end VARCHAR(128), acttime_ri_deepsleep VARCHAR(128), rfchannel_rru_support VARCHAR(50), symbol_rru_support VARCHAR(50), carrier_rru_support VARCHAR(50), deepsleep_rru_support VARCHAR(50), if_new_site VARCHAR(30), carriershutdowntime NUMERIC, deepsleepshutdowntime NUMERIC, carrier_default_time NUMERIC, deepsleep_default_time NUMERIC, white_list_type VARCHAR(300), white_list_right_cofig VARCHAR(300), white_list_wrong_cofig VARCHAR(300), jiedian_switch_using VARCHAR(300), jiedian_switch_closed VARCHAR(300), parameter_reject_type VARCHAR(50), switch_mistake VARCHAR(30), carrier_switch_abnormal VARCHAR(30), deepsleep_switch_abnormal VARCHAR(30), rfchannel_ant_config VARCHAR(30), f_down_5g_rfchannel_on NUMERIC, down_5g_rfchannel_on_def NUMERIC, rfchannel_on_contrast VARCHAR(30), f_down_5g_rfchannel_of NUMERIC, down_5g_rfchannel_of_def NUMERIC, rfchannel_off_contrast VARCHAR(30), f_user_5g_rfchannel_on NUMERIC, user_5g_rfchannel_on_def NUMERIC, user_rfchannel_on_contrast VARCHAR(30), f_user_5g_rfchannel_off NUMERIC, user_5g_rfchannel_off_def NUMERIC, user_rfchannel_off_contrast VARCHAR(30), f_down_5g_carrier_on NUMERIC, down_5g_carrier_on_def NUMERIC, carrier_5g_on_contrast VARCHAR(30), f_down_5g_carrier_of NUMERIC, down_5g_carrier_of_def NUMERIC, carrier_5g_off_contrast VARCHAR(30), f_user_5g_carrier_on NUMERIC, user_5g_carrier_on_def NUMERIC, user_carrier_5g_on_contrast VARCHAR(30), f_user_5g_carrier_off NUMERIC, user_5g_carrier_off_def NUMERIC, user_carrier_5g_off_contrast VARCHAR(30), f_down_4g_carrier_on NUMERIC, down_4g_carrier_on_def NUMERIC, carrier_4g_on_contrast VARCHAR(30), f_down_4g_carrier_of NUMERIC, down_4g_carrier_of_def NUMERIC, carrier_4g_off_contrast VARCHAR(30), f_user_4g_carrier_on NUMERIC, user_4g_carrier_on_def NUMERIC, user_carrier_4g_on_contrast VARCHAR(30), f_user_4g_carrier_off NUMERIC, user_4g_carrier_off_def NUMERIC, user_carrier_4g_off_contrast VARCHAR(30), parameter_anomaly_status VARCHAR(2000) ) PARTITION BY LIST (time); dmserver.exe D:\work\dmdbms\data\DAMENG\dm.ini * 第 1 行, 第 25 列[D]附近出现错误[-2007]:语法分析出错. 已用时间: 2.638(毫秒). 执行号:0. SQL> SQL> -- 创建分区表 2 CREATE TABLE jiedian_cause_list_45G_20250801 PARTITION OF jiedian_cause_list_45G FOR VALUES IN ('2025-08-01 00:00:00'); -- 创建分区表 CREATE TABLE jiedian_cause_list_45G_20250801 PARTITION OF jiedian_cause_list_45G FOR VALUES IN ('2025-08-01 00:00:00'); CREATE TABLE jiedian_cause_list_45G_20250801 PARTITION OF jiedian_cause_list_45G FOR VALUES IN ('2025-08-01 00:00:00'); * 第 2 行, 第 97 列[PARTITION]附近出现错误[-2007]:语法分析出错. 已用时间: 2.160(毫秒). 执行号:0. SQL> CREATE TABLE jiedian_cause_list_45G_20250802 PARTITION OF jiedian_cause_list_45G FOR VALUES IN ('2025-08-02 00:00:00'); CREATE TABLE jiedian_cause_list_45G_20250802 PARTITION OF jiedian_cause_list_45G FOR VALUES IN ('2025-08-02 00:00:00'); CREATE TABLE jiedian_cause_list_45G_20250802 PARTITION OF jiedian_cause_list_45G FOR VALUES IN ('2025-08-02 00:00:00'); * 第 1 行, 第 96 列[PARTITION]附近出现错误[-2007]:语法分析出错. 已用时间: 0.190(毫秒). 执行号:0. SQL> CREATE TABLE jiedian_cause_list_45G_20250803 PARTITION OF jiedian_cause_list_45G FOR VALUES IN ('2025-08-03 00:00:00'); CREATE TABLE jiedian_cause_list_45G_20250803 PARTITION OF jiedian_cause_list_45G FOR VALUES IN ('2025-08-03 00:00:00'); CREATE TABLE jiedian_cause_list_45G_20250803 PARTITION OF jiedian_cause_list_45G FOR VALUES IN ('2025-08-03 00:00:00'); * 第 1 行, 第 96 列[PARTITION]附近出现错误[-2007]:语法分析出错. 已用时间: 0.273(毫秒). 执行号:0.
最新发布
08-07
在达梦数据库中创建分区表时遇到语法错误,通常是由于SQL语句不符合达梦数据库的语法规范或版本特性所导致。达梦数据库支持多种类型的分区,包括范围分区、列表分区、哈希分区和复合分区[^2]。以下是一些常见的解决方案和注意事项,帮助排查和解决创建分区表时的语法问: ### 1. 检查分区类型与语法格式 达梦数据库支持的分区类型包括: - **范围分区(Range Partitioning)**:适用于按范围划分数据。 - **列表分区(List Partitioning)**:适用于按离散值划分数据。 - **哈希分区(Hash Partitioning)**:适用于均匀分布数据。 - **复合分区(Composite Partitioning)**:范围+哈希、范围+列表等组合。 创建分区表的基本语法如下: ```sql CREATE TABLE table_name ( column1 datatype, column2 datatype, ... ) PARTITION BY [RANGE | LIST | HASH] (partition_column) ( PARTITION partition_name VALUES [LESS THAN (value) | IN (value_list)], ... ); ``` 例如,创建一个范围分区表: ```sql CREATE TABLE sales ( sale_id INT, sale_date DATE ) PARTITION BY RANGE (sale_date) ( PARTITION p2023 VALUES LESS THAN ('2024-01-01'), PARTITION p2024 VALUES LESS THAN ('2025-01-01') ); ``` ### 2. 确保分区键的正确性 分区键必须是表中的一个列,且不能是`BLOB`、`CLOB`、`TEXT`等大对象类型。此外,达梦数据库对分区键的唯一性约束和主键约束也有特定限制,需确保分区键的定义与约束一致。 ### 3. 检查达梦数据库版本 达梦数据库的不同版本对分区功能的支持程度不同。例如,某些早期版本可能不支持复合分区或某些高级特性。可通过以下语句查询当前数据库版本: ```sql SELECT SF_GET_UNICODE_FLAG(); ``` 或通过客户端工具查看版本信息。 ### 4. 使用达梦数据库管理工具辅助建表 达梦数据库提供了图形化工具 **DM Management Studio**,可以通过可视化界面创建分区表,避免手动编写SQL语句时的语法错误。该工具会自动校验分区规则并生成合法的SQL脚本。 ### 5. 处理布尔值的兼容性问 如果SQL语句中使用了布尔值(如 `true` 或 `false`),达梦数据库可能无法识别,需将其转换为整数形式。例如,将 `def_flag = false` 改为 `def_flag = 0`,以避免语法错误[^1]。 ### 6. 检查SQL语句中的关键字冲突 达梦数据库对某些关键字(如 `DATE`、`TIME`、`ORDER` 等)有特殊含义,若在SQL语句中使用这些关键字作为列名或表名,需用双引号包裹,如 `"DATE"`,以避免语法冲突。 ### 7. 查阅达梦数据库官方文档 达梦数据库的官方文档提供了详细的SQL语法说明和分区表创建指南,建议参考《达梦SQL语言使用手册》中的分区表章节,确保SQL语句符合规范。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值