日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

剑指Offer-数组中重复的数字

發布時間:2023/12/13 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 剑指Offer-数组中重复的数字 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

在一個長度為n的數組里的所有數字都在0到n-1的范圍內。 數組中某些數字是重復的,但不知道有幾個數字是重復的。也不知道每個數字重復幾次。請找出數組中任意一個重復的數字。 例如,如果輸入長度為7的數組{2,3,1,0,2,5,3},那么對應的輸出是第一個重復的數字2。

思路

數組中的數字都在0到n-1的數字范圍內。如果數組中沒有重復出現的數字,那么當數組排序后數字i就出現在數組中下標為i的元素處。那么數組中如果存在重復數字的話,有些位置的對應的數字就沒有出現,而有些位置可能存在多個數字。數組用numbers表示
那么我們重排這個數組。從第0個元素開始。

  • 比較numbers[i]和i的值,如果i與numbers[i]相等,也就是對數組排序后,numbers[i]就應該在對應的數組的第i個位置處,那么繼續判斷下一個位置。
  • 如果i和numbers[i]的值不相等,那么判斷以numbers[i]為下標的數組元素是什么。
  • 如果numbers[numbers[i]]等于numbers[i]的話,那么就是說有兩個相同的值了,重復了。找到了重復的數字
  • 如果numbers[numbers[i]]不等于numbers[i]的話,那么就將numbers[numbers[i]]和numbers[i]互換。繼續進行1的判斷。
  • 循環退出的條件是直至數組最后一個元素,仍沒有找到重復的數字,數組中不存在重復的數字。
  • 代碼實現

    package Array;/*** 數組中重復的數字*在一個長度為n的數組里的所有數字都在0到n-1的范圍內。* 數組中某些數字是重復的,但不知道有幾個數字是重復的。也不知道每個數字重復幾次。請找出數組中任意一個重復的數字。* 例如,如果輸入長度為7的數組{2,3,1,0,2,5,3},那么對應的輸出是第一個重復的數字2。* 思路:* 數組中的數字都在0到n-1的數字范圍內。如果數組中沒有重復出現的數字,那么當數組排序后數字i就出現在數組中下標為i的元素處。那么數組中如果存在重復數字的話,有些位置的對應的數字就沒有出現,而有些位置可能存在多個數字。數組用numbers表示那么我們重排這個數組。從第0個元素開始。1、比較numbers[i]和i的值,如果i與numbers[i]相等,也就是對數組排序后,numbers[i]就應該在對應的數組的第i個位置處,那么繼續判斷下一個位置。2、如果i和numbers[i]的值不相等,那么判斷以numbers[i]為下標的數組元素是什么。2.1、如果numbers[numbers[i]]等于numbers[i]的話,那么就是說有兩個相同的值了,重復了。找到了重復的數字2.2、如果numbers[numbers[i]]不等于numbers[i]的話,那么就將numbers[numbers[i]]和numbers[i]互換。繼續進行1的判斷。3、循環退出的條件是直至數組最后一個元素,仍沒有找到重復的數字,數組中不存在重復的數字。*/ public class Solution02 {// Parameters:// numbers: an array of integers// length: the length of array numbers// duplication: (Output) the duplicated number in the array number,length of duplication array is 1,so using duplication[0] = ? in implementation;// Here duplication like pointor in C/C++, duplication[0] equal *duplication in C/C++// 這里要特別注意~返回任意重復的一個,賦值duplication[0]// Return value: true if the input is valid, and there are some duplications in the array number// otherwise falsepublic static void main(String[] args) {int[] arr ={2,3,1,0,2,5,3};int[] duplication = {-1};duplicate(arr,arr.length,duplication);System.out.println(duplication[0]);}public static boolean duplicate(int numbers[],int length,int [] duplication) {if(length<=0||numbers==null){return false;}//判斷數組數據是否合法for(int i=0;i<length;i++){if(numbers[i]<0||numbers[i]>length-1){return false;}}for(int i=0;i<length;i++){while(numbers[i]!=i){if(numbers[i]==numbers[numbers[i]]){duplication[0] = numbers[i];return true;}else{//交換numbers[i]和numbers[numbers[i]]int temp = numbers[i];numbers[i] = numbers[temp];numbers[temp] = temp;}}}return false;} }

    轉載于:https://www.cnblogs.com/wupeixuan/p/8623363.html

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的剑指Offer-数组中重复的数字的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。