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. 小说免费看!python爬虫框架scrapy 爬取纵横网

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 风,又奈何 PS:如有需要Python学习资料的小伙伴可以加点击下方 ...

  2. Netty 中的异步编程 Future 和 Promise

    Netty 中大量 I/O 操作都是异步执行,本篇博文来聊聊 Netty 中的异步编程. Java Future 提供的异步模型 JDK 5 引入了 Future 模式.Future 接口是 Java ...

  3. summary && scenarios

    小组中期总结 项目目标: 我们的目标是制作一款pdf阅读器的必应查词插件,帮助大家在阅读英文资料的时候查单词更加的方便并且可以帮助人们英语学习. 痛点:对于在电脑上现在屏幕取词软件已经做得相当好了,所 ...

  4. Ubuntu搭建Redis 集群

    1.源码编译 查看需要下载版本:http://download.redis.io/releases/ 本人保存路径:/usr/local/soft/ wget http://download.redi ...

  5. 教你如何入手用python实现简单爬虫微信公众号并下载视频

    主要功能 如何简单爬虫微信公众号 获取信息:标题.摘要.封面.文章地址 自动批量下载公众号内的视频 一.获取公众号信息:标题.摘要.封面.文章URL 操作步骤: 1.先自己申请一个公众号 2.登录自己 ...

  6. 调用sleep后,我做了一个噩梦

    sleep系统调用 我是一个线程,生活在Linux帝国.一直以来辛勤工作,日子过得平平淡淡,可今天早上发生了一件事让我回想起来都后怕. 早上,我还是如往常一样执行着人类编写的代码指令,不多时走到了一个 ...

  7. Springboot:员工管理之删除员工及退出登录(十(9))

    springboot2.2.6 delete请求报错,降至2.1.11功能可用 原因未知 构建员工删除请求 com\springboot\controller\EmployeeController.j ...

  8. SpringCloud(五)学习笔记之Hystrix

    在微服务架构中多层服务之间会相互调用,如果其中有一层服务故障了,可能会导致一层服务或者多层服务故障,从而导致整个系统故障.这种现象被称为服务雪崩效应. Hystrix组件就可以解决此类问题,Hystr ...

  9. 解决Typecho Gravatar头像加载缓慢的问题

    前言 Typecho评论默认使用的是Gravatar头像,但因为Gravatar网站总是被墙,导致页面加载被拖慢,而且加载半天也还是个裂图,太影响心情,所以我们可以不使用Gravatar头像,换成另一 ...

  10. <vector>常用操作

    如果不清楚vector是什么的话就去看我的另一篇随笔吧:https://www.cnblogs.com/buanxu/p/12791785.html 进入正题,vector和string一样,也是一种 ...