其它

二分查找过程中会使用求中间值

  • int mid = (left + right) / 2;
  • int mid = left + (right - left) / 2;
  • `int mid = left + ((right - left) >> 1);

推荐使用第二或者第三种方式,可以避免right+left结果溢出int范围。

二分查找每次都是将区间的中间结点与val进行比较,当区间长度为奇数时,int mid = (left + right) / 2自然就是中间的结点

但是如果区间为偶数的时候,中间结点有两个,上面的查询就会是左半边的最后一个结点,而使用int mid = left + (right - left + 1) / 2;就可以查询右半区间第一个结点。

//记录是否出现
boolean[] vis = new boolean[26];
//记录出现几次
int[] vis = new int[26];
//记录最后一次出现的下标是那个
int[] vis = new int[26];
for(int i = 0;i < s.length();i++){
    vis[s.charAt(i) - 'a'] = i;
}

只对两个数进行加减,让两个数变成原来的负数

/**
 * x y
 * x - y y
 * x - y x
 * -y x   
 * -y -x x
 * -y -x -y
 * -x -y  
*/
posted @ 2020-11-10 21:02  yvzhu  阅读(92)  评论(0编辑  收藏  举报