服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - 剑指Offer之Java算法习题精讲二叉搜索树与数组查找

剑指Offer之Java算法习题精讲二叉搜索树与数组查找

2022-10-10 14:16明天一定. Java教程

跟着思路走,之后从简单题入手,反复去看,做过之后可能会忘记,之后再做一次,记不住就反复做,反复寻求思路和规律,慢慢积累就会发现质的变化

题目一

剑指Offer之Java算法习题精讲二叉搜索树与数组查找

 解法

/**
* Definition for a binary tree node.
* public class TreeNode {
*     int val;
*     TreeNode left;
*     TreeNode right;
*     TreeNode() {}
*     TreeNode(int val) { this.val = val; }
*     TreeNode(int val, TreeNode left, TreeNode right) {
*         this.val = val;
*         this.left = left;
*         this.right = right;
*     }
* }
*/
class Solution {
  int ans;
  int pre;
  public int minDiffInBST(TreeNode root) {
      ans = Integer.MAX_VALUE;
      pre = -1;
      method(root);
      return ans;
  }
  public void method(TreeNode root){
      if(root==null) return;
      method(root.left);
      if(pre==-1){
          pre = root.val;
      }else{
          ans = Math.min(ans,root.val-pre);
          pre = root.val;
      }
      method(root.right); 
  }
}

 

题目二

剑指Offer之Java算法习题精讲二叉搜索树与数组查找

 解法

class Solution {
  public int dominantIndex(int[] nums) {
      int f = Integer.MIN_VALUE;
      int fi = 0;
      int s = Integer.MIN_VALUE;
      int si = 0;
      for(int i = 0; i<nums.length;i++){
          if(nums[i]>f){
              s = f;
              f = nums[i];
              fi = i;
          }else if(nums[i]>s){
              s = nums[i];
          }
      }
      if(nums.length==1) return 0;
      if(2*s<=f) return fi;
      return -1; 
  }
}

 

题目三

剑指Offer之Java算法习题精讲二叉搜索树与数组查找

解法

class Solution {
  public int repeatedNTimes(int[] nums) {
      int n = nums.length/2;
      HashMap<Integer,Integer> map =new HashMap<Integer,Integer>();
      for(int key : nums){
          if(map.containsKey(key)){
              map.put(key,map.get(key)+1);
              if(map.get(key)==n){
                  return key;
              }
          }else{
              map.put(key,1);
          }
      }
      return 0;
  }
}

 

 题目四

剑指Offer之Java算法习题精讲二叉搜索树与数组查找

 解法

class Solution {
  public boolean uniqueOccurrences(int[] arr) {
      int[] nums = new int[2000];
      for(int i =0;i<arr.length;i++){
          nums[arr[i]+1000]+=1;
      }
      HashSet<Integer> set =new HashSet<Integer>();
      for(int i =0;i<nums.length;i++){
          if(nums[i]==0) continue;
          if(!set.add(nums[i])){
              return false;
          }else{
              set.add(nums[i]);
          }
      }
      return true;
  }
}

到此这篇关于剑指Offer之Java算法习题精讲二叉搜索树与数组查找的文章就介绍到这了,更多相关Java 二叉搜索树内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/wai_58934/article/details/123336107

延伸 · 阅读

精彩推荐