Message on Whatsapp 8879355057 for DSA(OA + Interview) + Fullstack Dev Training + 1-1 Personalized Mentoring to get 10+LPA Job
0 like 0 dislike
752 views
in Online Assessments by Expert (46,090 points) | 752 views

3 Answers

0 like 0 dislike
Best answer

imageImage of ques

by Expert (46,090 points)
0 like 0 dislike

Java solution:

 

public static void main(String[] args) {
	int[] nums1 = { 3, 4, 2, 3, 0, 3, 1, 2, 1 };
	int[] nums2 = { 1, 0, 2, -3 };
	int[] nums3 = { 0, 0, 0, 3};
	int s = 3;
	System.out.println(canReach0(nums1, s));
	System.out.println(canReach0(nums2, s));
	System.out.println(canReach0(nums3, s));
}

private static boolean canReach0(int[] nums, int s) {
	Map<Integer, Boolean> map = new HashMap<>();
	return dfs(nums, s, map);
}

private static boolean dfs(int[] nums, int s, Map<Integer, Boolean> map) {
	if (s < 0 || s >= nums.length)
		return false;
	if (nums[s] == 0)
		return true;
	if (map.containsKey(s))
		return map.get(s);
	map.put(s, false);
	if (s - nums[s] >= 0) {
		if (dfs(nums, s - nums[s], map))
			return true;
	}
	if (s + nums[s] < nums.length) {
		if (dfs(nums, s + nums[s], map))
			return true;
	}
	return false;
}

 

true
true
true

by Expert (46,090 points)
0 like 0 dislike

C++ solution version

 

bool dfsArray(vector num, int s, unordered_map<int, int> m)
{
bool res = false;

 

//end
if(num[s] == 0)
    return true;

cout << "s: " << s << endl;

if(m.find(s) != m.end() )
    return false;

m[s]++;


//Go to right
if(s + num[s] < num.size() )
{
    if(dfsArray(num, s+num[s], m))
        return true;
}

//Go to left
if(s - num[s] >= 0)
{
    if(dfsArray(num, s-num[s] , m))
        return true;
}


return res;

 

}

by Expert (46,090 points)