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];
}

reference:

https://leetcode.com/problems/n-repeated-element-in-size-2n-array/discuss/208563/JavaC%2B%2BPython-O(1)-Solution

总结##

此题思路很多。我的思路是构建一个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)的更多相关文章

  1. 【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 ...

  2. 【LeetCode】961. N-Repeated Element in Size 2N Array 解题报告(Python & C+++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典 日期 题目地址:https://leetcod ...

  3. 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 ...

  4. 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 ...

  5. 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 ...

  6. 【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 ...

  7. [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 ...

  8. 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 ...

  9. LeetCode 961. N-Repeated Element in Size 2N Array (重复 N 次的元素)

    题目标签:HashMap 题目给了我们一个size 为 2N 的int array,其中有 N + 1 个唯一的 数字,让我们找出那个重复的数字. 利用hashset,把每一个数字存入,一旦发现有重复 ...

随机推荐

  1. G++编译链接的那些事

    语言 CPP 前言   虽然 VSCodeC++ 编辑器非常受大家的欢迎,无论是大佬还是小白都说对其爱不释手...   我...用了一段时间后发现实在是麻烦,配置往往花费我大量时间.可以说真的是吃力不 ...

  2. android学习笔记——利用BaseAdapter生成40个列表项

    RT: main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns ...

  3. matlab将数据读取和写入txt文档

    原文链接 matlab中打开文件 fid = fopen(文件名,‘打开方式’): 说明:fid用于存储文件句柄值,如果fid>0,这说明文件打开成功. 另外,在这些字符串后添加一个“t”,如‘ ...

  4. [YII2] Activeform表单部分组件使用方法

    文本框:textInput(); 密码框:passwordInput(); 单选框:radio(),radioList(); 复选框:checkbox(),checkboxList(); 下拉框:dr ...

  5. 面试题56 - I. 数组中数字出现的次数

    面试题56 - I. 数组中数字出现的次数 一个整型数组 nums 里除两个数字之外,其他数字都出现了两次.请写程序找出这两个只出现一次的数字.要求时间复杂度是O(n),空间复杂度是O(1). 示例 ...

  6. nignx location index的用法

    来源:https://blog.csdn.net/qq_32331073/article/details/81945134#_10 index指令的作用 在前后端分离的基础上,通过Nginx配置,指定 ...

  7. SweetAlert - 演示6种不同的提示框效果

    http://www.sucaihuo.com/js/190.html http://www.cnblogs.com/beiz/p/5238124.html

  8. MySQL的远程链接

    安装好我们的mMySQL,是不是也有种无从下手的感觉,不用怕,接下来我们可以使用远程连接来可视化我们的数据库的数据: 1. 打开我们的数据库,帐号是root,密码查看文件就行了 2.使用命令: mys ...

  9. 以命令行界面启动 Ubuntu

    1. /etc/default/grub 将GRUB_CMDLINE_LINUX_DEFAULT一行中改为"quiet splash 3" 2. update-grub 3. 重启

  10. [Qt] 通过socket将另一个程序的某个窗口调到最前端

    @ // THIS IS A HACK: // from QT documentation: // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...