“劳累一天回到家中“
”对象赶忙问我想吃些什么?“
“望着窗外淅淅沥沥的小雨 蛋炒饭吧”
“雨声洗涤了心灵 炒饭温暖了肚子”
“我没有问她炒饭是怎么做的,他也没有管我吃相有多难看”
“我面向对象,她也面向对象”
面向对象和面向过程的区别
概念
面向过程:字面意义上就是面向的是过程,先做什么,在做什么,最后做什么,然后用函数把这些步骤一步一步的实现,在使用的时候----调用即可
面向对象:字面意义上就是面向的是对象,是把构成问题的事务分解成各个对象,但是建立对象的目的也不是为了完成一个个步骤,而是为了描述某一个事物在解决整个问题的过程中所发生的行为
性能
面向过程:性能较高,所以单片机,嵌入式开发等一般采用面向过程开发
面向过程:性能相比面向过程要低
可用性
面向对象:有封装,继承,多态的特性,所以易维护,易复用,易扩展,可以设计出低耦合的系统
三大特征
封装:只隐藏对象的属性和实现细节,仅对外提供公共访问方式
好处:将变化隔离、便于使用、提高复用性、提高安全性
原则:将不需要对外提供的内容隐藏起来;把属性隐藏,提供公共方法对其访问
继承:提高代码复用性;继承是多态的前提
①子类中所有的构造函数都会默认访问父类中的空参数的构造函数,默认第一行有super();若无空参数构造函数,子类中需指定;另外,子类构造函数中可自己用this指定自身的其他构造函数。
多态:是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象
好处:提高了程序的扩展性
弊端:当父类引用指向子类对象时,虽提高了扩展性,但只能访问父类中具备的方法,不可访问子类中的方法;即访问的局限性。
前提:实现或继承关系;覆写父类方法。
二分查找
题目:搜索插入位置
等级:🌟
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/search-insert-position
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
输入: nums = [1,3,5,6], target = 5
输出: 2
输入: nums = [1,3,5,6], target = 2
输出: 1
输入: nums = [1,3,5,6], target = 7
输出: 4
请先思考!!!!
|||||||||||
|||||||||||
|||||||||||
|||||||||||
|||||||||||
|||||||||||
|||||||||||
答答答答答答答答答答答
案案案案案案案案案案案
往往往往往往往往往往往
下下下下下下下下下下下
翻翻翻翻翻翻翻翻翻翻翻
|||||||||||
|||||||||||
|||||||||||
|||||||||||
|||||||||||
|||||||||||
|||||||||||
class Solution {
public int searchInsert(int[] nums, int target) {
int start = 0;
int end = nums.length - 1;
while(start <= end){
// 先计算出中间值 右移运算 相当于 int middle = (start + end)/2
int middle = (start + end) >> 1;
// 如果中间值小于目标值,则循环后半部分
if(nums[middle] < target){
start = middle + 1;
}else {// 否则循环右半部分
end = middle - 1;
}
}
// 最后start值便是我们要求的最终值
return start;
}
}
题解:
二分查找又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程。直到查找到了为止,否则序列中没有待查的关键字。
例如:nums = [1,2,3,4] target = 5
参数 | 第一次循环 | 第二次循环 | 第三次循环 | 第四循环 |
---|---|---|---|---|
start | 0 | 2 | 3 | 4 |
end | 3 | 3 | 3 | |
middle | 1 | 2 | 3 | |
nums[middle] | 2 | 3 | 4 | |
target | 5 | 5 | 5 |
第四次的时候结束循环,所以 start = 4 即我们所得的结果