1.数组中重复的数字
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
示例 1:
输入:
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3
方式一
class Solution {
public int findRepeatNumber(int[] nums) {
int[] num = new int[nums.length];
for (int i = 0; i < nums.length ; i++) {
num[nums[i]]++;
if(num[nums[i]] > 1){
return nums[i];
}
}
return -1;
}
方式二
class Solution {
public int findRepeatNumber(int[] nums) {
Set<Integer> set = new HashSet<Integer>();
int repeat = -1;
for (int num : nums) {
if (!set.add(num)) {
repeat = num;
break;
}
}
return repeat;
}
}
方式三
class Solution {
public int findRepeatNumber(int[] nums) {
Arrays.sort(nums);
for (int i = 0; i < nums.length -1; i++) {
if(nums[i] == nums[i+1] ){
return nums[i];
}
}
return -1;
}
}
2、旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。
示例 1:
输入:[3,4,5,1,2]
输出:1
示例 2:
输入:[2,2,2,0,1]
输出:0
class Solution {
public int minArray(int[] numbers) {
int len = numbers.length;
for(int i=1; i< len;i++){
if(numbers[i] < numbers[i-1]){
return numbers[i];
}
}
return numbers[0];
}
}
3、打印从1到最大的n位数
输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。
示例 1:
输入: n = 1
输出: [1,2,3,4,5,6,7,8,9]
class Solution {
public int[] printNumbers(int n) {
int max = (int)Math.pow(10, n);
int[] nums = new int[max-1];
for(int i = 1 ; i < max;i++){
nums[i-1] = i;
}
return nums;
}
}
4、 调整数组的顺序使其奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
示例:
输入:nums = [1,2,3,4]
输出:[1,3,2,4]
注:[3,1,2,4] 也是正确的答案之一。
方式一:快慢双指针
slow和fast都从数组的头部开始遍历
fast正常一步一步右移
如果fast遇到了奇数,和slow位置的数字互换,slow++,fast++
如果fast没有遇到奇数,继续右移,fast++
fast遍历到末尾时结束遍历
class Solution {
public int[] exchange(int[] nums) {
int slow = 0;
int fast = 0;
while(fast < nums.length){
if(nums[fast]%2 == 1){
int temp = nums[fast];
nums[fast] = nums[slow] ;
nums[slow] = temp;
slow ++;
}
fast ++;
}
return nums;
}
}
方式二:
class Solution {
public int[] exchange(int[] nums) {
int[] res = new int[nums.length];
int left = 0;
int right = nums.length - 1;
for (int num : nums) {
if ((num & 1) == 0) {
res[right--] = num;
} else {
res[left++] = num;
}
}
return res;
}
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof