classSolution{publicintfindRepeatNumber(int[] nums){for(int i =0; i < nums.length; i++){for(int j =0; j < nums.length; j++){if(i != j && nums[i]== nums[j]){return nums[i];}}}return-1;}}
利用 Set 特性【不可重复】,用 list.contains()也可以实现,不过会超时!
classSolution{publicintfindRepeatNumber(int[] nums){Set<Integer> set =newHashSet<>();for(int num : nums){if(!set.add(num)){return num;}
set.add(num);}return-1;}}
排序 + 遍历
classSolution{publicintfindRepeatNumber(int[] nums){Arrays.sort(nums);for(int i =1; i < nums.length; i++){if(nums[i -1]== nums[i])return nums[i];}return-1;}}
遍历链表获取链表个数 n,新建长度为 n 的新数组 遍历链表,同时数组反向赋值(即链表第一个值给数组最后一个值…)
classSolution{publicint[]reversePrint(ListNode head){int n =0;ListNode cur = head;while(cur !=null){
n++;
cur = cur.next;}int[] arr =newint[n];
cur = head;for(int i = n -1; i >=0; i--){
arr[i]= cur.val;
cur = cur.next;}return arr;}}
classSolution{publicintfib(int n){if(n ==0|| n ==1)return n;returnfib(n -1)+fib(n -2);}}
定义 dp 数组,动态规划
classSolution{publicintfib(int n){if(n ==0|| n ==1)return n;int[] dp =newint[n +1];
dp[0]=0;
dp[1]=1;for(int i =2; i <= n; i++){
dp[i]=(dp[i -1]+ dp[i -2])%1000000007;}return dp[n];}}
进阶:不用数组,定义三个临时遍历存储值,节省空间
classSolution{publicintfib(int n){if(n ==0|| n ==1)return n;int a =0, b =1, c =0;for(int i =2; i <= n; i++){
c =(a + b)%1000000007;
a = b;
b = c;}return c;}}
剑指 Offer 03. 数组中重复的数字暴力循环,超时TATclass Solution { public int findRepeatNumber(int[] nums) { for (int i = 0; i < nums.length; i++) { for (int j = 0; j < nums.length; j++) { if (i != j && nums[i] == num