How to make camera follow player smoothly?

(video 2019 05 23 17 38 08 - YouTube) - the video

I got this code for player’s movement:

void Update()
    {
        {
            transform.Translate(new Vector3(0, 1, 0) * speed * Time.deltaTime)
        }
}

Aslo my camera follows player like this:

void LateUpdate () {
		transform.position = new Vector3(transform.position.x, player.transform.position.y + offset, transform.position.z);
    }
}

The game is about player moving up, dodging some obstacles on his way. Obstacles stand still.
The problem i need to solve is that, as you can see in video I attached, it looks like obstacles are jittering a liitle every frame. I guess this is because camera (like the player) moves with translate method, so it is jittering itself. What is the best way to make camera movement smoothly? Maybe problem with framerate?

Also there is a problem with detectng collisions. As you see in the video, ball turns back not at the point of collision, but when it is altready at the wall or out of the screen if it knocks the sides. Again, that’s because player moves from point before the wall right forward and scips visual point of collision. Maybe there is a way to move player with a higher rate by smaller steps or even contionious, but not affecting the perfomance too much?

I made this the other the other day:

public class SmoothFollow2D : MonoBehaviour
    {
        [SerializeField] Transform target;

        [SerializeField] float maxLeft;
        [SerializeField] float maxRight;

        private void Start()
        {
            transform.position = new Vector3(target.position.x, transform.position.y, transform.position.z);
        }

        // Update is called once per frame
        void LateUpdate()
        {
            if (target.position.x <= maxLeft)
            {
                transform.position = Vector3.Lerp(transform.position, new Vector3(maxLeft, transform.position.y, transform.position.z), Time.deltaTime);
            }
            else if (target.position.x >= maxRight)
            {
                transform.position = Vector3.Lerp(transform.position, new Vector3(maxRight, transform.position.y, transform.position.z), Time.deltaTime);
            }
            else
            {
                transform.position = Vector3.Lerp(transform.position, new Vector3(target.position.x, transform.position.y, transform.position.z), Time.deltaTime);
            }
        }
    }