【leetcode-82,83,26,80】 删除排序链表/数组中的重复元素
83. 删除排序链表中的重复元素
(1 pass)
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 1:
输入: 1->1->2
输出: 1->2
示例 2:
输入: 1->1->2->3->3
输出: 1->2->3
public ListNode deleteDuplicates(ListNode head) {
if (head == null) {
return null;
}
ListNode preHead = new ListNode(0);
preHead.next = head;
ListNode p1 = head;
ListNode p2 = head.next;
while (p2 != null) {
if (p2.val == p1.val) {
p2 = p2.next;
p1.next = p2;
} else {
p1 = p2;
p2 = p2.next;
}
}
return preHead.next;
}
82. 删除排序链表中的重复元素 II
(1 pass)
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
示例 1:
输入: 1->2->3->3->4->4->5
输出: 1->2->5
示例 2:
输入: 1->1->1->2->3
输出: 2->3
public ListNode deleteDuplicates(ListNode head) {
if (head == null) {
return null;
}
ListNode preHead = new ListNode(0);
preHead.next = head;
ListNode p1 = preHead;
ListNode p2 = head;
ListNode p3 = head.next;
while (p3 != null) {
if(p2.val == p3.val) {
while(p3.next != null && p3.val == p3.next.val) {
p3 = p3.next;
}
if (p3.next != null) {
p2 = p3.next;
p3 = p2.next;
p1.next = p2;
} else {
p1.next = null;
return preHead.next;
}
}
else {
p1 = p2;
p2 = p3;
p3 = p3.next;
}
}
return preHead.next;
}
26. 删除排序数组中的重复项
(1pass)
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
示例 1:
给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为1,2。 你不需要考虑数组中超出新长度后面的元素。
示例 2:
给定 nums = [0,0,1,1,1,2,2,3,3,4], 函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为0,1,2,3,4。 你不需要考虑数组中超出新长度后面的元素。
说明:
为什么返回数值是整数,但输出的答案是数组呢?
请注意,输入数组是以“引用”方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。
你可以想象内部操作如下:
// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝
int len = removeDuplicates(nums); // 在函数里修改输入数组对于调用者是可见的。
// 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。
for (int i = 0; i < len; i++) {
print(nums[i]);
}
public int removeDuplicates(int[] A) {
if (A == null) {
return 0;
}
int index = 1;
for (int i=1;i< A.length;i++) {
if (A[i] != A[i-1]) {
A[index++] = A[i];
} else {
continue;
}
}
return index;
}
80. 删除排序数组中的重复项 II
(1pass)
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
示例 1:
给定 nums = [1,1,1,2,2,3], 函数应返回新长度 length =5, 并且原数组的前五个元素被修改为1, 1, 2, 2,3 。 你不需要考虑数组中超出新长度后面的元素。
示例 2:
给定 nums = [0,0,1,1,1,1,2,3,3], 函数应返回新长度 length =7, 并且原数组的前五个元素被修改为0, 0, 1, 1, 2, 3, 3 。 你不需要考虑数组中超出新长度后面的元素。
public int removeDuplicates(int[] A) {
if (A == null) {
return 0;
}
int index = 1;
boolean twice = false;
for (int i=1;i< A.length;i++) {
if (A[i] != A[i-1]) {
A[index++] = A[i];
twice = false;
} else if (!twice){
A[index++] = A[i];
twice = true;
}
}
return index;
}
【leetcode-82,83,26,80】 删除排序链表/数组中的重复元素的更多相关文章
- LeetCode(83): 删除排序链表中的重复元素
Easy! 题目描述: 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1->1-&g ...
- 26. Remove Duplicates from Sorted Array(删除排序数组中的重复元素,利用排序的特性,比较大小)
Given a sorted array, remove the duplicates in-place such that each element appear only once and r ...
- LeetCode#26 | Remove Duplicates from Sorted Array 删除有序数组中的重复元素
一.题目 Description Given a sorted array, remove the duplicates in-place such that each element appear ...
- LeetCode Remove Duplicates from Sorted Array删除整型数组中的重复元素并返回剩下元素个数
class Solution { public: int removeDuplicates(int A[], int n) { ],*e=&A[]; //s指向开头第一个,e往后遍历相同的 i ...
- [LeetCode] Remove Duplicates from Sorted Array II 有序数组中去除重复项之二
Follow up for "Remove Duplicates":What if duplicates are allowed at most twice? For exampl ...
- [LeetCode] Single Element in a Sorted Array 有序数组中的单独元素
Given a sorted array consisting of only integers where every element appears twice except for one el ...
- LeetCode Remove Duplicates from Sorted Array II 删除整型数组中的重复元素并返回剩下元素个数2
class Solution { public: int removeDuplicates(int A[], int n) { ],*e=&A[]; //s指向“连续数字”的第一个,e往后遍历 ...
- LeetCode OJ:Remove Duplicates from Sorted Array II(移除数组中的重复元素II)
Follow up for "Remove Duplicates":What if duplicates are allowed at most twice? For exampl ...
- 算法练习之合并两个有序链表, 删除排序数组中的重复项,移除元素,实现strStr(),搜索插入位置,无重复字符的最长子串
最近在学习java,但是对于数据操作那部分还是不熟悉 因此决定找几个简单的算法写,用php和java分别实现 1.合并两个有序链表 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两 ...
随机推荐
- 用户队列服务API
/// <summary> /// 用户队列服务API /// </summary> public interface ICustomerQueueManager : ISer ...
- stm32使用rt-thread在文件《stm32f1xx_hal.h》中头文件包含顺序引出的错误
@2019-01-24 [小记] 在学习 rt-thread BSP制作过程中,发现文件<stm32f1xx_hal.h>中 Env工具生成的原始顺序 1. #include " ...
- Qt Creator 编译测试 MQTT-C
@2018-12-21 [小记] 创建工程步骤: a. File ---> New File or Project ---> Non-Qt Project ---> Plain C ...
- css颜色表示法
css颜色值主要有三种表示方法: 1.颜色名表示,比如:red 红色,gold 金色 2.rgb表示,比如:rgb(255,0,0)表示红色 3.16进制数值表示,比如:#ff0000 表示红色,这种 ...
- Mysql连接报错:1130 - Host ‘118.111.111.111’ is not allowed to connect to this MariaDB server
这个问题是因为在数据库服务器中的mysql数据库中的user的表中没有权限(也可以说没有用户),下面将记录我遇到问题的过程及解决的方法. 在搭建完LNMP环境后用Navicate连接出错 遇到这个问题 ...
- cf245H Queries for Number of Palindromes (manacher+dp)
首先马拉车一遍(或者用hash),再做个前缀和处理出f[i][j]表示以j为右端点,左端点在[i,j]的回文串个数 然后设ans[i][j]是[i,j]之间的回文串个数,那就有ans[i][j]=an ...
- Balanced Sequence HDU - 6299(杭电多校1 B)
题目说要n个字符串串内随意组合以后将这些串放在一起,然后求最长的括号匹配的长度,并不要求是连续的 因为不需要是连续的,所以可以先把已经匹配好的括号加入到答案里面去,先把这些删掉,以为并不影响结果,然后 ...
- Centos7下源码编译安装python3.6
测试环境: 操作步骤: 1. 下载Python源码包(python3.6.0) 官网下载地址:https://www.python.org/downloads/ 搜狐下载地址:http://mirro ...
- Redis主从复制与高可用方案
redis简单介绍 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库.Redis与其他key – value缓存产品有以下三个特点: 支持数据的持久化,可以将内存中 ...
- python学习day5 数据类型Ⅲ(字典)
day5 字典 回顾&补充 面试题 #数据类型判断a = 1 #intb = (1) #intc = ('1') #strd = (1,) #tuple int py2/py3 除法 强制转换 ...