2020-07-12所学(Java)

1.有序数组的二分查找

要点

(1) 为什么用 mid = first + (last - first)/ 2 代替 mid = (first + last )/ 2 ?

答:当查找至少有2^30 个元素的数组时,first + last 有可能超过 2^31 -1,而导致其变成负数,mid也变成负数,所以用mid = first + (last - first)/ 2代替,避免此问题产生。

(2) 代码模板

int  start = 0, int last  = nums.length - 1;
while(start + 1 < last ){
      int mid = first + (last - first)/ 2;
      if(...)   start = mid;
      else    last = mid;
}

还有一种常用模板(不足点:要考虑清楚当数组为[1]时)

int start = 0, int last = nums.length - 1;
while(start <= last){
      int mid = first + (last - first)/ 2;
      if(nums[mid] <= target)  start = mid + 1;
      else  last = mid - 1;
}   

2.刷过的题

1021. 删除最外层的括号Tag为栈

此题并没有解出来。

思路:利用栈进行原语化分解,用substring函数进行删除,即取子字符串。
67. 二进制求和Tag为字符串

此题也没有做出来,自己简直是铁five。

思路:既然是二进制求和,类比于十进制的加法,满2进1,如何进,用int carry 保存进位,carry = 和 / 2,余数即 和 % 2。还有一个知识点就是 **数字字符转换成数字,eg: '1' - '0' = 1
122.买卖股票的最佳时机 II(Tag为贪心)

还是没做出来。此题其实还是比较简单的。

思路:算出相邻两天间的利润,若为正则加在总利润上,若为负则不加。

1046. 最后一块石头的重量(Tag为贪心)

有了前一道题的铺垫,此次的贪心终于做出来了。

思路:排序,递归

1217. 玩筹码(Tag为贪心)

此题理解错了题目的意思,看了一下评论区的阅读理解,懂了题意后就写完了。

思路:数组的元素表示的是筹码放置的位置,如2,即一个筹码放在位置2.此题即是表达是奇数位置的筹码多还是偶数位置的筹码多,若奇数位置的多就返回偶数位置的筹码数,反之返回奇数位置的筹码数

贪心即是用局部最优代替全局最优。

3.分治与动态规划

还未做题,故还不知道其具体的应用方式。

4.其他

刷完了《钢之炼金术师》,很棒的一部老番。

还学了些啥忽然就记不得了。(— _ —)

明天开启《操作系统》与《计算机网络》的征途。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容