遗忘的速度真的远远超过自己的想象
一刷的时候,感觉都知道。但是不到10天的时间,又变得非常的模糊,因此打算一边学一边复习。二刷复习的时候,考虑到以后C#会用得比较多,因此,二刷采用C#,一方面算是熟悉C#,一方面也算是自己真的把算法学会吧!!
加油!
以下代码仅做个人复习参考使用。
实现功能:二分查找,利用快慢指针删除特定的元素。
二刷总结:
1.一看就会,上手就错。
在二分查找中,只用分找得到和找不到的区别,不用具体细分第一个元素比taget大还是小这样的问题。
if-else只会判断一次,注意与while的区别。感觉就是看的时候都懂,但是自己真正实现的时候,看就要看半天。
2.注意区间开闭自己定义的时候,要从一而终!!
3.不要总是看代码,或者只是抄代码。还是要自己上手写!不断内化。
4.注意一下C#的格式,main要写在类里面!!!
using System.Globalization;
namespace progrom;
class test
{
public static void Main(string[] args)
{
int[] nums = new int[6];
nums[0] = -1;
nums[1] = 0;
nums[2] = 3;
nums[3] = 5;
nums[4] = 9;
nums[5] = 12;
int target = 13;
solution2 sol = new solution2();
sol.RemoveElement(nums, target);
}
}
public class solution2
{
public void RemoveElement(int[] nums,int target)
{
//删除特定的元素,快慢指针,当遇到特定元素的时候就跳过!
int fast = 0;
int slow = 0;
while (fast < nums.Length)
{
if (nums[fast] != target)
{
nums[slow] = nums[fast];
slow++;
}
fast++;
}
Console.WriteLine(slow);
}
}
public class solution
{
public void Search(int[] nums, int target)
{
//左闭右开
//int right=nums.Length-1;(右边是取不到的)
//遍历的时候需要保持前后一致
//用if-else时,只判断了一次就停止了
//前后一致,这里取不到
//注意赋值语句!!!mid的比较那里!!画个图!!求求了
int left = 0;
int right = nums.Length;
while (left < right)
{
int mid = (right-left)/2 + left;
if (nums[mid] < target)
{
left = mid+1;
}
if (nums[mid] > target)
{
right=mid;
}
if (nums[mid] == target)
{
Console.WriteLine(mid);
break;
}
}
if (left >= right)
{
Console.WriteLine("no");
}
}
}
最近因为一些曾经的决定在不停地内耗,状态不太好。深知这样不对,因此只能不断一步一步说服自己,那些曾经的决定放在如今的状态下可能略显荒唐,但是你要知道,在过去的那一个时刻,不管你做出什么样的决定,在那个时刻都是你能做出的你认为最为正确的决定。在那之后,发生什么,你也不得而知,但如果做出决定的那一刻你是无怨无悔的,在那之后也就没有必要再为此烦恼。而如果当初做出的决定有悖于你内心真正的想法,那么你能做的,只能是从当下开始尽可能去做一些可以弥补的事情,而不是不停地踌躇不前。
永远不要忘了,你当时做出决定的那一刻,你自己内心深处期待的是怎样的生活。