zoukankan      html  css  js  c++  java
  • 剑指 Offer 03. 数组中重复的数字

     这道题在原书上绝对不是简单级别啊!
    它考察的是程序员的沟通能力,先问面试官要时间/空间需求!!!
    只是时间优先就用字典,
    还有空间要求,就用指针+原地排序数组,
    如果面试官要求空间O(1)并且不能修改原数组,还得写成二分法!!!

    这个最明显的做法当然就是用一个HashSet,排除重复就行

    原地排序这种想法到是很好。。。

    如果没有重复数字,那么正常排序后,数字i应该在下标为i的位置,所以思路是重头扫描数组,遇到下标为i的数字如果不是i的话,(假设为m),那么我们就拿与下标m的数字交换。在交换过程中,如果有重复的数字发生,那么终止返回ture

    这样是O1空间复杂度的,只是修改了原数组

    class Solution {
        public int findRepeatNumber(int[] nums) {
            int temp;
            for(int i=0;i<nums.length;i++){
                while (nums[i]!=i){
                    if(nums[i]==nums[nums[i]]){
                        return nums[i];
                    }
                    temp=nums[i];
                    nums[i]=nums[temp];
                    nums[temp]=temp;
                }
            }
            return -1;
        }
    }
  • 相关阅读:
    1600802101
    Android第二次作业
    android 第一次作业
    团队作业—项目答辩
    软件工程—团队作业2.2
    软件工程—团队作业2
    软件工程—团队作业1
    第一篇博客
    Android第四次作业
    作业3
  • 原文地址:https://www.cnblogs.com/take-it-easy/p/14542052.html
Copyright © 2011-2022 走看看