DEV Community

Xavier Chretien
Xavier Chretien

Posted on

2 2

Day 2: Fixed point

  • Difficulty: Easy
  • Programming language: Kotlin

Problem

A fixed point in an array is an element whose value is equal to its index.
Given a sorted array of distinct elements, return a fixed point, if one exists. Otherwise, return false.

For example:

  • Given [-6, 0, 2, 40], you should return 2
  • Given [1, 5, 7, 8], you should return false

My solution

This is an easy one and I don't want to go to a very complex solution. Let's just iterate the array and find the fixed point 😄

/**
 * Find each fixed point in a sorted array.
 *
 * @param array, sorted array
 * @return an list with each fixed points, the list is empty if there is no fixed points.
 */
fun findFixedPoint(array: IntArray): List<Int>{
    if(array[1] < array[0]) throw IllegalArgumentException("Array not sorted")

    val pointFixedFound = mutableListOf<Int>()
    for ((index, value) in array.withIndex()) {
        if(index == value){
            pointFixedFound.add(index)
        }
    }

    return pointFixedFound.toList()
}
Enter fullscreen mode Exit fullscreen mode

UPDATED VERSION

As

nickholmesde image

suggests in the comments, I didn't really follow the question asked. The question is to return A fixed point not all fixed points, so there is the updated version (thanks again to Nick Holmes).

fun findFixedPoint(array: IntArray): Int? {
    val pointFixedFound = mutableListOf<Int>()

    for ((index, value) in array.withIndex()) {
        if(index == value){
            return index
        } else if (value > index) {
            break
        }
    }
    return null
}
Enter fullscreen mode Exit fullscreen mode

The function returns null if there is no fixed point because I didn't find if this is possible to return an int or false in Kotlin, so I return null instead.

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (2)

Collapse
 
nickholmesde profile image
Nick Holmes

As a constructive critique of your solution:

A)

if(array[1] < array[0]) throw IllegalArgumentException("Array not sorted")

You are claiming the array is not sorted if the first two elements are not sorted. What about the array [1, 3, 2] or [1, 1, 2]? Also, what if the array is of length 0 or 1?

You weren't asked to validate that the array was sorted, so you could simply remove this line.

B)

return pointFixedFound.toList()

You are asked to return either an integer or a false, but you are returning a list. Although your list contains the answer, if this was an interview question, I would mark you down on this - demonstrating the ability to extract all detail out of a provided specification is important.

C)
Finally, given that this is coding challenge, and that we are told that input list is sorted and distinct, I think a "more optimal" solution is evident;

  • as soon as you find a cell value equal to the index, just return the value - no need to go to the end of the list.

  • as soon as you find a cell value greater than the index, just return false - there can be no fixed points from here on.

Collapse
 
apomalyn profile image
Xavier Chretien

First, thank you for your critique! 😃

A) About the first line, you are right I could simply remove that line.

B) In an interview, I would probably follow the problem asked without any modification. In that case, I choose to return every fixed point on the given array but you are right I should just respect the problem.

C) I will update the post with your proposition

Once again thank you I really appreciate your comment 😃

Sentry mobile image

Improving mobile performance, from slow screens to app start time

Based on our experience working with thousands of mobile developer teams, we developed a mobile monitoring maturity curve.

Read more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay