2和3我都没见过原题,可能LC刷得还不够,只刷了400多
第二个应该是快慢指针的题型,结果就是看看在到达最后一个值之前有没有circle或者走进死了胡同。但是我怀疑楼主的描述有点小问题,应该是负数只能往左走,正数只能往右走,否则就没有正负数的必要性了,而且就无法快慢指针了。
循环中就考虑两点,是否走进了死胡同,就是没路走了,也就是 (i+num[i] < 0 || i +num[i] > num.Length), 或者出现了circle 也就是两个执政 fast == slow了。就停止循环返回false,在停止循环之前如果num[fast] == 0就返回true.
最后一题我能想到的解法不知道是不是正确,因为对这个approximately equals拿不准。新建一个class,里面两个property, sum 和 list。基于这个class建立一个priority queue,排序的顺序就是sum的大小。从大到小遍历那个数组,如果pq.Count() < n就根据当前数字新建一个class加进去,否则就把当前数字加到pq的最小的里面。我不知道该怎么证明,但自己试了几个test case,好像都对…
第二题的确没有注明有负数,但是由于题目只说了an array of integers,所以假设有负数也是没问题的,虽然没什么用。原题是这样:
You’re given an array of integers, such as arr = [3,4,2,3,0,3,1,2,1], and a start index.
When your’re at an index i, you can move left or right by arr. Your task is to figure out if you can reach value 0.