原地置换,手动模拟哈希表
剑指 Offer 03. 数组中重复的数字
法1:HASHSET
class Solution {public int findRepeatNumber(int[] nums) {Set set=new HashSet<>();for(int num:nums){if(!set.add(num)){return num;}}return -1;}
}
法2:原地置换(下标与当前值是否相同-- 下标1 当前值1)
如果没有重复数字,那么正常排序后,数字i应该在下标为i的位置,所以思路是重头扫描数组,遇到下标为i的数字如果不是i的话,(假设为m),那么我们就拿与下标m的数字交换。在交换过程中,如果有重复的数字发生,那么终止返回
class Solution {public int findRepeatNumber(int[] nums) {int temp;for(int i=0;i
41. 缺失的第一个正数
class Solution {public int firstMissingPositive(int[] nums) {int len=nums.length;for (int i = 0; i 0 && nums[i]<=len && nums[i]!=nums[nums[i]-1]){int t=nums[i];nums[i]=nums[t-1];nums[t-1]=t;}}for (int j = 0; j
442. 数组中重复的数据
因为给定题目 值为 1---n 而下标是从0开始 所以 对应 值减一
当前数值-1 作为下标 的 值 变为负数
int[] arr=new int[]{3,2,4,11,33};
比如3 修改对应下标为2的位置的数也就是4 变为 -4;
class Solution {public List findDuplicates(int[] nums) {List ans=new ArrayList<>();int len=nums.length;for(int i=0;i
448. 找到所有数组中消失的数字
class Solution {public List findDisappearedNumbers(int[] nums) {List ans=new ArrayList<>();int len=nums.length;//值 1 2 3 4//下标 0 1 2 3for(int i=0;i0) nums[index]= -nums[index];}for(int i=0;i0) ans.add(i+1);}return ans;}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
