題目:
Given an array of integers, find if the array contains any duplicates. Your function should return true if any value appears at least twice in the array, and it should return false if every element is distinct.
大意:
給出一個int型的數(shù)組谷暮,判斷數(shù)組是否包含了重復的數(shù)仰泻。如果有任何的數(shù)值在函數(shù)中出現(xiàn)過至少兩次,你的數(shù)組就應該返回true渊抽,如果每個數(shù)值都是單一的,那么就返回false畅买。
思路:
一開始我采用之前一個判斷字母數(shù)的同樣的思路浑侥,用一個10位的數(shù)組記錄09的出現(xiàn)次數(shù)姜挺,后來運行說還有負數(shù)。段直。吃溅。于是加上了-9-1的9個數(shù)字,將數(shù)組改成19位鸯檬,運行又發(fā)現(xiàn)還有極大的數(shù)决侈。。喧务。而不是我想的單一的個位數(shù)赖歌,這就超過數(shù)組的承受能力了枉圃,一開始又不說清楚= =。
于是換了一種思路庐冯,先將數(shù)組中的數(shù)字進行排序孽亲,排序之后數(shù)組中的內(nèi)容就是按順序排列的,如果有相同的數(shù)值展父,那一定是相鄰排列的返劲,所以只要遍歷數(shù)組檢查是否有相鄰的兩個數(shù)值相等就可以啦。這次終于ac了栖茉,看了一下Discuss的最Hot的方法篮绿,跟我的思路一樣,太開心了衡载。
關于排序有很多種方法搔耕,Java的數(shù)組自帶有排序函數(shù)隙袁,也可以采用一些排序算法痰娱,可以參考這個博客:http://blog.csdn.net/fengyifei11228/article/details/2623980,寫的還蠻全的菩收。
代碼(Java):
public class Solution {
public boolean containsDuplicate(int[] nums) {
Arrays.sort(nums);// 先數(shù)組內(nèi)排序梨睁,參考:http://blog.csdn.net/fengyifei11228/article/details/2623980
for (int i = 0; i < nums.length - 1; i++) {
if (nums[i] == nums[i + 1]) return true;// 循環(huán)判斷排序后有沒有兩個相同的數(shù)字
}
return false;
}
}
合集:https://github.com/Cloudox/LeetCode-Record