LeetCode--Sort Array By Parity && N-Repeated Element in Size 2N Array (Easy)
905. Sort Array By Parity (Easy)#
Given an array A of non-negative integers, return an array consisting of all the even elements of A, followed by all the odd elements of A.
You may return any answer array that satisfies this condition.
Example 1:
Input: [3,1,2,4]
Output: [2,4,3,1]
The outputs [4,2,3,1], [2,4,1,3], and [4,2,1,3] would also be accepted.
Note:
1 <= A.length <= 5000
0 <= A[i] <= 5000
solution##
我的解法
class Solution {
public int[] sortArrayByParity(int[] A) {
int i = 0, j = A.length - 1; int temp;
while (i < j)
{
if (A[i] % 2 != 0)
{
while (A[j] % 2 != 0 & i < j)
j--;
if (i < j)
{
temp = A[i];
A[i] = A[j];
A[j] = temp;
j--;
}
}
i++;
}
return A;
}
}
大佬的解法
public int[] sortArrayByParity(int[] A) {
for (int i = 0, j = 0; j < A.length; j++)
if (A[j] % 2 == 0) {
int tmp = A[i];
A[i++] = A[j];
A[j] = tmp;;
}
return A;
}
reference
https://leetcode.com/problems/sort-array-by-parity/discuss/170734/C%2B%2BJava-In-Place-Swap
总结##
此题主要考察数组相关的知识点。我的思路借鉴了快速排序的思想。首先设置两个计数器i与j分别记录数组的开头下标和结尾下标,然后用一个while循环从数组左端开始遍历数组,如果A[i]为奇数,则用一个while循环从数组右端开始遍历数组,直到A[j]为偶数(注意i<j)则跳出循环。假如此时j处的元素为偶数,如果i<j,就交换A[i]和A[j],并将j++,否则什么都不做。最后,当外层循环结束后,将A返回。
大佬的解法是将数组中的偶数与前面的奇数交换,即当遍历数组时,遇到奇数就跳过,遇到偶数就与前面的奇数相交换。
Notes:
1.此类数组问题最好只用题目给定的数组解决问题,如无必要,不要用额外的数组来存储中间结果。比如此题,如果新建一个int数组来存储结果,虽然也可以做出来,但是就失去了题目想要考察的技巧了。
961. N-Repeated Element in Size 2N Array (Easy)
In a array A of size 2N, there are N+1 unique elements, and exactly one of these elements is repeated N times.
Return the element repeated N times.
Example 1:
Input: [1,2,3,3]
Output: 3
Example 2:
Input: [2,1,2,5,3,2]
Output: 2
Example 3:
Input: [5,1,5,2,5,3,5,4]
Output: 5
Note:
4 <= A.length <= 10000
0 <= A[i] < 10000
A.length is even
solution##
我的解法
class Solution {
public int repeatedNTimes(int[] A) {
Set<Integer> s = new HashSet<Integer>();
for (int i = 0; i < A.length / 2 + 2; i++)
{
if (!s.add(new Integer(A[i])))
return A[i];
}
return -1;
}
}
大佬的解法,虽然有缺陷,但思想值得学习
//法一,利用数组数字充当数组下标,有意思。
//O(N) time, O(N) space
public int repeatedNTimes(int[] A) {
int[] count = new int[10000];
for (int a : A)
if (count[a]++ == 1)
return a;
return -1;
}
//法二,将数组中的某一个数与其前面的两个数作比较,看是否相等。是否可以增加比较的数字个数,或许最好前后比较。
//O(N) time,O(1) space
public int repeatedNTimes(int[] A) {
for (int i = 2; i < A.length; ++i)
if (A[i] == A[i - 1] || A[i] == A[i - 2])
return A[i];
return A[0];
}
//法三,随机挑选数组中的两个数字作比较
//O(4) time, O(1) space
public int repeatedNTimes(int[] A) {
int i = 0, j = 0, n = A.length;
while (i == j || A[i] != A[j]) {
i = (int)(Math.random() * n);
j = (int)(Math.random() * n);
}
return A[i];
}
总结##
此题思路很多。我的思路是构建一个HashSet,然后遍历数组,将数组里面的int值转为Integer后加到HashSet集合里面,如果值已经加到HashSet里面了,则就会返回false,此时直接返回当前的int数值。若遍历完毕,还没找到,则返回-1。
Notes:
1.java集合类只能存放引用类型,所以此题得将int转化为Integer后再放入集合。比如,Integer a = new Integer(A[i]);
2.数组里面的值(int)也可以当新的数组的下标,这种做法可以用来对数字计数;
LeetCode--Sort Array By Parity && N-Repeated Element in Size 2N Array (Easy)的更多相关文章
- 【Leetcode_easy】961. N-Repeated Element in Size 2N Array
problem 961. N-Repeated Element in Size 2N Array solution: class Solution { public: int repeatedNTim ...
- 【LeetCode】961. N-Repeated Element in Size 2N Array 解题报告(Python & C+++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典 日期 题目地址:https://leetcod ...
- LeetCode 961. N-Repeated Element in Size 2N Array
In a array A of size 2N, there are N+1 unique elements, and exactly one of these elements is repeate ...
- LeetCode 961 N-Repeated Element in Size 2N Array 解题报告
题目要求 In a array A of size 2N, there are N+1 unique elements, and exactly one of these elements is re ...
- 116th LeetCode Weekly Contest N-Repeated Element in Size 2N Array
In a array A of size 2N, there are N+1 unique elements, and exactly one of these elements is repeate ...
- 【leetcode】961. N-Repeated Element in Size 2N Array
题目如下: In a array A of size 2N, there are N+1 unique elements, and exactly one of these elements is r ...
- [Swift]LeetCode961. 重复 N 次的元素 | N-Repeated Element in Size 2N Array
In a array A of size 2N, there are N+1 unique elements, and exactly one of these elements is repeate ...
- LC 961. N-Repeated Element in Size 2N Array【签到题】
In a array A of size 2N, there are N+1 unique elements, and exactly one of these elements is repeate ...
- LeetCode 961. N-Repeated Element in Size 2N Array (重复 N 次的元素)
题目标签:HashMap 题目给了我们一个size 为 2N 的int array,其中有 N + 1 个唯一的 数字,让我们找出那个重复的数字. 利用hashset,把每一个数字存入,一旦发现有重复 ...
随机推荐
- PDM添加唯一性约束
- golang slice 源码解读
本文从源码角度学习 golang slice 的创建.扩容,深拷贝的实现. 内部数据结构 slice 仅有三个字段,其中array 是保存数据的部分,len 字段为长度,cap 为容量. type s ...
- 编写高质量Python程序(四)库
本系列文章为<编写高质量代码--改善Python程序的91个建议>的精华汇总. 按需选择 sort() 或者 sorted() Python 中常用的排序函数有 sort() 和 sort ...
- el-tab-pane label的文字内容怎样设间距
el-tab-pane label的文字内容怎样设间距 问题描述: 在使用element-ui的el-tab-pane做标签页时,label属性的位置与样式不能通过style样式直接解决 百度后几乎没 ...
- Laravel 上手增删改查
拿到一个框架,除了解框架,还要能实现基本的CURD操作. 添加 1.配置路由,指定添加页面: // routes/web.php 中增加如下: // 添加页面.存放路径 Laravel7/resour ...
- beanshell 常用的内置变量与函数
官方详细文档:https://github.com/beanshell/beanshell/wiki log:用来记录日志文件 log.info("jmeter"); vars - ...
- java中的模运算规则
取模运算定义 如果a和d是两个自然数,d非零,可以证明存在两个唯一的整数 q 和 r,满足 a = qd + r 且0 ≤ r < d.其中,q 被称为商,r 被称为余数. 运算实例 java模 ...
- Des对称可逆加密
/// <summary> /// DES AES Blowfish /// 对称加密算法的优点是速度快, /// 缺点是密钥管理不方便,要求共享密钥. /// 可逆对称加密 密钥长 ...
- 什么是CDN内容分发网络?【刘新宇】
CDN 使用第三方OSS服务的好处是集成了CDN服务,下面来了解一下什么是CDN. CDN 全称:Content Delivery Network或Content Distribute Network ...
- Jmeter系列(5)- jmeter.properties常用配置项讲解
如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html jmeter.properties 所 ...